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