說明:假設從8位ad中讀取資料(若是更高位的ad,可將資料型別定義為int)
子程式為get_ad()
一、限幅濾波法
優點:能有效克服因偶然因素引起的脈衝干擾。
缺點:無法抑制那種週期性的干擾,且平滑度差。
1、限幅濾波
a值可根據實際情況調整
value為有效值,new_value為當前取樣值
濾波程式返回有效的實際值
#define a 10
char value
char filter(void) else ;
char sum_coe = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12;
char filter(void) {
char i = 0;
char value_buf[n];
int sum = 0;
for(i = 0; i < n; i++) {
value_buf[i] = get_ad();
delay();
for(i = 0; i < n; i++) {
sum += value_buf[i] * coe[i];
return (char)(sum / sum_coe);
九、消抖濾波法
說明:設定乙個濾波計數器,將每次取樣值與當前有效值比較:
如果取樣值=當前有效值,則計數器清零;
如果取樣值<>當前有效值,則計數器+1,並判斷計數器是否》=上限n(溢位);
如果計數器溢位,則將本次值替換當前有效值,並清計數器。
優點:對於變化緩慢的被測引數有較好的濾波效果;
可避免在臨界值附近控制器的反覆開/關跳動或顯示器上數值抖動。 缺點:
對於快速變化的引數不宜;
如果在計數器溢位的那一次取樣到的值恰好是干擾值,則會將干擾值當作有效值匯入系統。
#define n 12
char filter(void) {
char i = 0;
char new_value = 0, value = 0;
new_value = get_ad();
while(value != new_value) {
i++;
if(i > n) {
return new_value;
delay();
new_value = get_ad();
return value;
十、限幅消抖濾波法
說明:相當於「限幅濾波法」+「消抖濾波法」;
先限幅,後消抖。
優點:繼承了「限幅」和「消抖」的優點;
改進了「消抖濾波法」中的某些缺陷,避免將干擾值匯入系統。
缺點:對於快速變化的引數不宜。
10、限幅消抖濾波法
參考程式1和9
十一、低通濾波法
11、低通濾波
#define a 0.25
char value; //value 為已有值
char filter(void) {
char new_value = 0;
new_value = get_ad();
return (a * new_value + (1 - a) * value);
c語言 算術平均濾波法 算術平均濾波C程式
檔名 arithmeticfilter.c 功能描述 算術平均濾波,乙個週期內取樣 n次資料,取n 次取樣值的算術平均值做為這個週期的取樣值 include define uchar unsigned char define uint unsigned int 取樣次數 define n 4 次取樣...
c語言 算術平均濾波法 C語言十大濾波演算法
限幅濾波法 函式名稱 amplitudelimiterfilter 限幅濾波法 優點 能有效克服因偶然因素引起的脈衝干擾 缺點 無法抑制那種週期性的干擾,且平滑度差 說明 1 呼叫函式 getad 該函式用來取得當前值 2 變數說明 value 最近一次有效取樣的值,該變數為全域性變數 newval...
c語言 算術平均濾波法 微控制器數字濾波的演算法
微控制器主要作用是控制外圍的器件,並實現一定的通訊和資料處理。但在某些特定場合,不可避免地要用到數 算,儘管微控制器並不擅長實現演算法和進行複雜的運算。下面主要是介紹如何用微控制器實現數字濾波。在微控制器進行資料採集時,會遇到資料的隨機誤差,隨機誤差是由隨機干擾引起的,其特點是在相同條件下測量同一量...