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);
}