c語言 算術平均濾波法 常見的濾波演算法 C語言

2021-10-13 11:22:05 字數 1635 閱讀 4688

說明:假設從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語言 算術平均濾波法 微控制器數字濾波的演算法

微控制器主要作用是控制外圍的器件,並實現一定的通訊和資料處理。但在某些特定場合,不可避免地要用到數 算,儘管微控制器並不擅長實現演算法和進行複雜的運算。下面主要是介紹如何用微控制器實現數字濾波。在微控制器進行資料採集時,會遇到資料的隨機誤差,隨機誤差是由隨機干擾引起的,其特點是在相同條件下測量同一量...