Arduino濾波算法及應(yīng)用探究
限幅濾波法(程序判斷濾波法)限幅濾波法是一種經(jīng)典的濾波算法,通過設(shè)定最大偏差值,判斷新值與上次值之差來確定采樣的有效性。該方法能有效消除因偶然因素引起的脈沖干擾,但無法抑制周期性干擾,且平滑度較差。
限幅濾波法(程序判斷濾波法)
限幅濾波法是一種經(jīng)典的濾波算法,通過設(shè)定最大偏差值,判斷新值與上次值之差來確定采樣的有效性。該方法能有效消除因偶然因素引起的脈沖干擾,但無法抑制周期性干擾,且平滑度較差。在Arduino中實(shí)現(xiàn)這一算法時(shí),需要設(shè)置全局變量和相應(yīng)的處理邏輯。
```cpp
define FILTER_A 1
int Filter() {
int NewValue;
NewValue Get_AD();
if ((NewValue - Value > FILTER_A) || (Value - NewValue > FILTER_A))
return Value;
else
return NewValue;
}
```
中位值濾波法
中位值濾波法是一種基于中間值的濾波算法,通過連續(xù)采樣N次,取排序后的中間值作為本次有效值。這種方法能有效克服因偶然因素引起的波動干擾,對溫度、液位等變化緩慢的參數(shù)有良好的濾波效果。在Arduino中實(shí)現(xiàn)中位值濾波法時(shí),需要考慮數(shù)組存儲采樣值和排序邏輯。
```cpp
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];
}
```
算術(shù)平均濾波法
算術(shù)平均濾波法是一種簡單直觀的濾波算法,通過對N個(gè)采樣值進(jìn)行算術(shù)平均運(yùn)算來達(dá)到平滑信號的目的。在選擇N值時(shí),需要根據(jù)信號的特性進(jìn)行調(diào)整,以平衡平滑度和靈敏度。該算法適用于一般具有隨機(jī)干擾的信號濾波,在Arduino中實(shí)現(xiàn)需要考慮求和和平均邏輯。
```cpp
define FILTER_N 12
int Filter() {
int i;
int filter_sum 0;
for (i 0; i < FILTER_N; i ) {
filter_sum Get_AD();
delay(1);
}
return (int)(filter_sum / FILTER_N);
}
```
遞推平均濾波法(滑動平均濾波法)
遞推平均濾波法又稱為滑動平均濾波法,將連續(xù)取得的N個(gè)采樣值組成一個(gè)隊(duì)列,并對隊(duì)列中的數(shù)據(jù)進(jìn)行算術(shù)平均運(yùn)算。通過設(shè)置不同的N值和權(quán)重系數(shù),可以實(shí)現(xiàn)對高頻振蕩系統(tǒng)的平滑處理。在Arduino中實(shí)現(xiàn)該算法需要考慮隊(duì)列的處理和加權(quán)邏輯。
```cpp
define FILTER_N 12
int Filter() {
int i;
int filter_sum 0;
int filter_buf[FILTER_N];
for (i 0; i < FILTER_N; i ) {
filter_buf[i] Get_AD();
delay(1);
}
// 計(jì)算加權(quán)和
for (i 0; i < FILTER_N; i ) {
filter_sum filter_buf[i] * coe[i];
}
filter_sum / sum_coe;
return filter_sum;
}
```
以上是幾種常用的Arduino濾波算法及其實(shí)現(xiàn)方式,每種算法都有各自的優(yōu)缺點(diǎn)和適用場景,程序員可以根據(jù)具體需求選擇合適的算法來實(shí)現(xiàn)濾波功能。