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

}