9.消抖濾波法
/*
A、名稱:消抖濾波法
B、方法:
設置一個濾波計數器,將每次采樣值與當前有效值比較:
如果采樣值=當前有效值,則計數器清零;
如果采樣值<>當前有效值,則計數器+1,並判斷計數器是否>=上限N(溢出);
如果計數器溢出,則將本次值替換當前有效值,並清計數器。
C、優點:
對於變化緩慢的被測參數有較好的濾波效果;
可避免在臨界值附近控制器的反復開/關跳動或顯示器上數值抖動。
D、缺點:
對於快速變化的參數不宜;
如果在計數器溢出的那一次采樣到的值恰好是干擾值,則會將干擾值當作有效值導入系統。
E、整理:shenhaiyu 2013-11-01
*/
int Filter_Value;
int Value;
void setup() {
Serial.begin(9600); // 初始化串口通信
randomSeed(analogRead(0)); // 產生隨機種子
Value = 300;
}
void loop() {
Filter_Value = Filter(); // 獲得濾波器輸出值
Serial.println(Filter_Value); // 串口輸出
delay(50);
}
// 用於隨機產生一個300左右的當前值
int Get_AD() {
return random(295, 305);
}
// 消抖濾波法
#define FILTER_N 12
int i = 0;
int Filter() {
int new_value;
new_value = Get_AD();
if(Value != new_value) {
i++;
if(i > FILTER_N) {
i = 0;
Value = new_value;
}
}
else
i = 0;
return Value;
}