4.滑動平均濾波法

/*

A、名稱:遞推平均濾波法(又稱滑動平均濾波法)

B、方法:

把連續取得的N個采樣值看成一個隊列,隊列的長度固定為N,

每次采樣到一個新數據放入隊尾,並扔掉原來隊首的一次數據(先進先出原則),

把隊列中的N個數據進行算術平均運算,獲得新的濾波結果。

N值的選取:流量,N=12;壓力,N=4;液面,N=4-12;溫度,N=1-4。

C、優點:

對周期性干擾有良好的抑制作用,平滑度高;

適用於高頻振蕩的系統。

D、缺點:

靈敏度低,對偶然出現的脈衝性干擾的抑制作用較差;

不易消除由於脈衝干擾所引起的采樣值偏差;

不適用於脈衝干擾比較嚴重的場合;

比較浪費RAM。

E、整理:shenhaiyu 2013-11-01

*/

int Filter_Value;

void setup() {

Serial.begin(9600); // 初始化串口通信

randomSeed(analogRead(0)); // 產生隨機種子

}

void loop() {

Filter_Value = Filter(); // 獲得濾波器輸出值

Serial.println(Filter_Value); // 串口輸出

delay(50);

}

// 用於隨機產生一個300左右的當前值

int Get_AD() {

return random(295, 305);

}

// 遞推平均濾波法(又稱滑動平均濾波法)

#define FILTER_N 12

int filter_buf[FILTER_N + 1];

int Filter() {

int i;

int filter_sum = 0;

filter_buf[FILTER_N] = Get_AD();

for(i = 0; i < FILTER_N; i++) {

filter_buf[i] = filter_buf[i + 1]; // 所有數據左移,低位仍掉

filter_sum += filter_buf[i];

}

return (int)(filter_sum / FILTER_N);

}