6.限幅平均濾波法
/*
A、名稱:限幅平均濾波法
B、方法:
相當於“限幅濾波法”+“遞推平均濾波法”;
每次采樣到的新數據先進行限幅處理,
再送入隊列進行遞推平均濾波處理。
C、優點:
融合了兩種濾波法的優點;
對於偶然出現的脈衝性干擾,可消除由於脈衝干擾所引起的采樣值偏差。
D、缺點:
比較浪費RAM。
E、整理:shenhaiyu 2013-11-01
*/
#define FILTER_N 12
int Filter_Value;
int filter_buf[FILTER_N];
void setup() {
Serial.begin(9600); // 初始化串口通信
randomSeed(analogRead(0)); // 產生隨機種子
filter_buf[FILTER_N - 2] = 300;
}
void loop() {
Filter_Value = Filter(); // 獲得濾波器輸出值
Serial.println(Filter_Value); // 串口輸出
delay(50);
}
// 用於隨機產生一個300左右的當前值
int Get_AD() {
return random(295, 305);
}
// 限幅平均濾波法
#define FILTER_A 1
int Filter() {
int i;
int filter_sum = 0;
filter_buf[FILTER_N - 1] = Get_AD();
if(((filter_buf[FILTER_N - 1] - filter_buf[FILTER_N - 2]) > FILTER_A) || ((filter_buf[FILTER_N - 2] - filter_buf[FILTER_N - 1]) > FILTER_A))
filter_buf[FILTER_N - 1] = filter_buf[FILTER_N - 2];
for(i = 0; i < FILTER_N - 1; i++) {
filter_buf[i] = filter_buf[i + 1];
filter_sum += filter_buf[i];
}
return (int)filter_sum / (FILTER_N - 1);
}