2.中位值濾波法

/*

A、名稱:中位值濾波法

B、方法:

連續采樣N次(N取奇數),把N次采樣值按大小排列,

取中間值為本次有效值。

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 101

int Filter() {

int filter_buf[FILTER_N];

int i, j;

int filter_temp;

for(i = 0; i < FILTER_N; i++) {

filter_buf[i] = Get_AD();

delay(1);

}

// 采樣值從小到大排列(冒泡法)

for(j = 0; j < FILTER_N - 1; j++) {

for(i = 0; i < FILTER_N - 1 - j; i++) {

if(filter_buf[i] > filter_buf[i + 1]) {

filter_temp = filter_buf[i];

filter_buf[i] = filter_buf[i + 1];

filter_buf[i + 1] = filter_temp;

}

}

}

return filter_buf[(FILTER_N - 1) / 2];

}