8.加權遞推平均濾波法

/*

A、名稱:加權遞推平均濾波法

B、方法:

是對遞推平均濾波法的改進,即不同時刻的數據加以不同的權;

通常是,越接近現時刻的數據,權取得越大。

給予新采樣值的權系數越大,則靈敏度越高,但信號平滑度越低。

C、優點:

適用於有較大純滯後時間常數的對像,和采樣周期較短的系統。

D、缺點:

對於純滯後時間常數較小、采樣周期較長、變化緩慢的信號;

不能迅速反應系統當前所受干擾的嚴重程度,濾波效果差。

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 coe[FILTER_N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; // 加權系數表

int sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 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] * coe[i];

}

filter_sum /= sum_coe;

return filter_sum;

}