一、遞推平均濾波法(又稱滑動平均濾波法)
(1)方法: 把連續(xù)取得的N個采樣值看成一個隊列,隊列的長度固定為N, 每次采樣到一個新數(shù)據(jù)放入隊尾,并扔掉原來隊首的一次數(shù)據(jù)(先進先出原則), 把隊列中的N個數(shù)據(jù)進行算術(shù)平均運算,獲得新的濾波結(jié)果。 N值的選?。毫髁浚琋=12;壓力,N=4;液面,N=4-12;溫度,N=1-4。 (2)優(yōu)點: 對周期性干擾有良好的抑制作用,平滑度高; 適用于高頻振蕩的系統(tǒng)。 (3)缺點: 靈敏度低,對偶然出現(xiàn)的脈沖性干擾的抑制作用較差; 不易消除由于脈沖干擾所引起的采樣值偏差; 不適用于脈沖干擾比較嚴重的場合; 比較浪費RAM。 (4)程序例程 //test for Recursion average filtering method #include int Filter(); int main() { int foo; while(1) { foo = Filter(); printf("the Filter is %d\n",foo); } return 0; } int Get_AD(void) { int foo; scanf("%d",&foo); return foo; } // 遞推平均濾波法(又稱滑動平均濾波法) #define FILTER_N 12 int filter_buf[FILTER_N + 1]; int Filter() { int i; int filter_sum = 0; filter_buf[FILTER_N] = Get_AD(); //AD轉(zhuǎn)換的值賦給數(shù)組最后一個值 for(i = 0; i < FILTER_N; i++) { filter_buf[i] = filter_buf[i + 1]; // 所有數(shù)據(jù)左移,低位仍掉 filter_sum += filter_buf[i]; } return (int)(filter_sum / FILTER_N); } |
|
來自: haishukongmu > 《C》