單片機(jī)數(shù)字濾波的算法
在單片機(jī)進(jìn)行數(shù)據(jù)采集時(shí),會(huì)遇到數(shù)據(jù)的隨機(jī)誤差,隨機(jī)誤差是由隨機(jī)干擾引起的,其特點(diǎn)是在相同條件下測(cè)量同一量時(shí),其大小和符號(hào)會(huì)現(xiàn)無(wú)規(guī)則的變化而無(wú)法預(yù)測(cè),但多次測(cè)量的結(jié)果符合統(tǒng)計(jì)規(guī)律。為克服隨機(jī)干擾引起的誤差,硬件上可采用濾波技術(shù),軟件上可采用軟件算法實(shí)現(xiàn)數(shù)字濾波。濾波算法往往是系統(tǒng)測(cè)控算法的一個(gè)重要組成部分,實(shí)時(shí)性很強(qiáng)。
本文引用地址:http://www.ex-cimer.com/article/201611/321267.htm采用數(shù)字濾波算法克服隨機(jī)干擾的誤差具有以下優(yōu)點(diǎn):
l
l
l
l
(1)限幅濾波算法
該運(yùn)算的過(guò)程中將兩次相鄰的采樣相減,求出其增量,然后將增量的絕對(duì)值,與兩次采樣允許的最大差值A(chǔ)進(jìn)行比較。A的大小由被測(cè)對(duì)象的具體情況而定,如果小于或等于允許的最大差值,則本次采樣有效;否則取上次采樣值作為本次數(shù)據(jù)的樣本。
算法的程序代碼如下:
#define A
char data;
char filter()
{
char datanew;
datanew=get_data();
if( (datanew-data)>A||(data-datanew>A) )
else
}
說(shuō)明:限幅濾波法主要用于處理變化較為緩慢的數(shù)據(jù),如溫度、物體的位置等。使用時(shí),關(guān)鍵要選取合適的門限制A。通常這可由經(jīng)驗(yàn)數(shù)據(jù)獲得,必要時(shí)可通過(guò)實(shí)驗(yàn)得到。
(2)中值濾波算法
該運(yùn)算的過(guò)程是對(duì)某一參數(shù)連續(xù)采樣N次(N一般為奇數(shù)),然后把N次采樣的值按從小到大排列,再取中間值作為本次采樣值,整個(gè)過(guò)程實(shí)際上是一個(gè)序列排序的過(guò)程。
算法的程序代碼如下:
#define N 11
char
{
for(count=0;count
{
}
for(i=0;i
{
}
return value_buff[(N-1)/2];
}
說(shuō)明:中值濾波比較適用于去掉由偶然因素引起的波動(dòng)和采樣器不穩(wěn)定而引起的脈動(dòng)干擾。若被測(cè)量值變化比較慢,采用中值濾波法效果會(huì)比較好,但如果數(shù)據(jù)變化比較快,則不宜采用此方法。
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論