嵌入式開發10種常見數字濾波演算法

2022-07-17 09:51:09 字數 4089 閱讀 8744

在微控制器開發中,經常需要對輸入的資料進行過濾處理,如感測器資料輸出,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 其實一旦你對嵌入式開發整套流程熟悉以後,很多人覺得嵌入式開發跟一般的開發沒有什麼兩樣,都是體力活。其實你還只了解了皮毛,還未深入了解或者理解嵌入式開發。很多人進入這個行業,是因為這個行業薪水較高,進入以後...