在微控制器開發中,經常需要對輸入的資料進行過濾處理,如感測器資料輸出,ad取樣等,合適的濾波處理能達到更好效果。下面分享幾種較簡單而常用的濾波演算法:
一、限幅濾波法(又稱程式判斷濾波法)
二、中位值濾波法
三、算術平均濾波法
四、遞推平均濾波法
五、中位值平均濾波法
六、限幅平均濾波法
七、一階滯後濾波法
八、加權遞推平均濾波法
九、消抖濾波法
十、限幅消抖濾波法
toca、方法:
b、優點:
能有效克服因偶然因素引起的脈衝干擾
c、缺點:
無法抑制那種週期性的干擾
平滑度差
int filter_value;
int value;
void setup()
void loop()
// 用於隨機產生乙個300左右的當前值
int get_ad()
// 限幅濾波法(又稱程式判斷濾波法)
#define filter_a 1
int filter()
a、方法:
b、優點:
能有效克服因偶然因素引起的波動干擾
對溫度、液位的變化緩慢的被測引數有良好的濾波效果
c、缺點:
對流量、速度等快速變化的引數不宜
/* n值可根據實際情況調整排序採用冒泡法*/
#define n 11
char filter()}}
return value_buf[(n-1)/2];
}
a、方法:
n值的選取:一般流量,n=12;壓力:n=4
b、優點:
適用於對一般具有隨機干擾的訊號進行濾波
這樣訊號的特點是有乙個平均值,訊號在某一數值範圍附近上下波動
c、缺點:
對於測量速度較慢或要求資料計算速度較快的實時控制不適用
比較浪費ram
#define n 12
char filter()
return (int)(filter_sum / filter_n);
}
a、方法:
b、優點:
融合了兩種濾波法的優點
對於偶然出現的脈衝性干擾,可消除由於脈衝干擾所引起的取樣值偏差
c、缺點:
測量速度較慢,和算術平均濾波法一樣
比較浪費ram
// 中位值平均濾波法(又稱防脈衝干擾平均濾波法)(演算法1)
#define filter_n 100
int filter()
// 取樣值從小到大排列(冒泡法)
for(j = 0; j < filter_n - 1; j++)
}} // 去除最大最小極值後求平均
for(i = 1; i < filter_n - 1; i++) filter_sum += filter_buf[i];
return filter_sum / (filter_n - 2);
}// 中位值平均濾波法(又稱防脈衝干擾平均濾波法)(演算法2)
#define filter_n 100
int filter()
filter_max = filter_buf[0];
filter_min = filter_buf[0];
filter_sum = filter_buf[0];
for(i = filter_n - 1; i > 0; i--)
i = filter_n - 2;
filter_sum = filter_sum - filter_max - filter_min + i / 2; // +i/2 的目的是為了四捨五入
filter_sum = filter_sum / i;
return filter_sum;
}
a、方法:
b、優點:
融合了兩種濾波法的優點
對於偶然出現的脈衝性干擾,可消除由於脈衝干擾所引起的取樣值偏差
c、缺點:
比較浪費ram
// 限幅平均濾波法
#define filter_a 1
int filter()
return (int)filter_sum / (filter_n - 1);
}
a、方法:
b、優點:
對週期性干擾具有良好的抑制作用
適用於波動頻率較高的場合
c、缺點:
相位滯後,靈敏度低
滯後程度取決於a值大小
不能消除濾波頻率高於取樣頻率的1/2的干擾訊號
// 一階滯後濾波法
#define filter_a 0.01
int filter()
a、方法:
b、優點:
適用於有較大純滯後時間常數的物件
和取樣週期較短的系統
c、缺點:
對於純滯後時間常數較小,取樣週期較長,變化緩慢的訊號
不能迅速反應系統當前所受干擾的嚴重程度,濾波效果差
// 加權遞推平均濾波法
#define filter_n 12
int coe[filter_n] = ; // 加權係數表
int sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12; // 加權係數和
int filter_buf[filter_n + 1];
int filter()
filter_sum /= sum_coe;
return filter_sum;
}
a、方法:
b、優點:
對於變化緩慢的被測引數有較好的濾波效果,
可避免在臨界值附近控制器的反覆開/關跳動或顯示器上數值抖動
c、缺點:
對於快速變化的引數不宜
如果在計數器溢位的那一次取樣到的值恰好是干擾值,則會將干擾值當作有效值匯入系統
// 消抖濾波法
#define filter_n 12
int i = 0;
int filter()
} else
i = 0;
return value;
}
a、方法:
b、優點:
繼承了「限幅」和「消抖」的優點
改進了「消抖濾波法」中的某些缺陷,避免將干擾值匯入系統
c、缺點:
對於快速變化的引數不宜
// 限幅消抖濾波法
#define filter_a 1
#define filter_n 5
int i = 0;
int filter()
} else
i = 0;
return value;
}
嵌入式開發
經常會有人說嵌入式開發,嵌入式開發千差萬別,我總體上分為4個等級 微電子開發 rtos開發 指令碼開發 富應用開發 這一類產品行為比較固定,比如說電視遙控器,遙控汽車,電飯煲,恆溫燒水壺,溫濕度感測器,智慧型門鎖等。這些裝置行為都比較簡單,通過按鈕可以設定系統功能和行為。量不大,經常會選用flash...
初識嵌入式 嵌入式開發概述
1 什麼是嵌入式技術 1 嵌入式軟體與非嵌入式軟體的區別?答 嵌入式軟體是結合作業系統之上做的開發 非嵌入式軟體是做的裸機開發。裸機 沒有作業系統 2 嵌入式開發與微控制器開發的區別?答 區別 是否有作業系統。拓展 答 優點 解決了軟體的移植性 解決了開發人員的能力的劃分問題。提供了豐富的網路協議 ...
嵌入式開發FAQ
a 嵌入式開發難嗎?q 難者不會,會者不難。a 嵌入式開發如何入門?a 嵌入式開發如何深入?q 其實一旦你對嵌入式開發整套流程熟悉以後,很多人覺得嵌入式開發跟一般的開發沒有什麼兩樣,都是體力活。其實你還只了解了皮毛,還未深入了解或者理解嵌入式開發。很多人進入這個行業,是因為這個行業薪水較高,進入以後...