10種軟體濾波方法的樣本程式

來源:互聯網
上載者:User

標籤:

 

 

 

 

 

1、限幅濾波法(又稱程式判斷濾波法)

 

#define A 10 

char value; 

char filter() 

char new_value; 

new_value = get_ad(); 

if ( ( new_value - value > A ) || ( value - new_value > A ) 

return value; 

return new_value; 

}

  A、方法: 

根據經驗判斷,確定兩次採樣允許的最大偏差值(設為A) 

每次檢測到新值時判斷: 

如果本次值與上次值之差<=A,則本次值有效 

如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值 

B、優點: 

能有效克服因偶然因素引起的脈衝幹擾 

C、缺點 

無法抑制那種周期性的幹擾 

平滑度差

2、中位值濾波法

 

#define N 11 

 

char filter() 

char value_buf[N]; 

char count,i,j,temp; 

for ( count=0;count<N;count++) 

value_buf[count] = get_ad(); 

delay(); 

for (j=0;j<N-1;j++) 

for (i=0;i<N-j;i++) 

if ( value_buf[i]>value_buf[i+1] ) 

temp = value_buf[i]; 

value_buf[i] = value_buf[i+1]; 

value_buf[i+1] = temp; 

return value_buf[(N-1)/2]; 

}

A、方法: 

連續採樣N次(N取奇數) 

把N次採樣值按大小排列 

取中間值為本次有效值 

B、優點: 

能有效克服因偶然因素引起的波動幹擾 

對溫度、液位的變化緩慢的被測參數有良好的濾波效果 

C、缺點: 

對流量、速度等快速變化的參數不宜

3、算術平均濾波法

#define N 12 

char filter() 

int sum = 0; 

for ( count=0;count<N;count++) 

sum + = get_ad(); 

delay();  

return (char)(sum/N); 

}

A、方法: 

連續取N個採樣值進行算術平均運算 

N值較大時:訊號平滑度較高,但靈敏度較低 

N值較小時:訊號平滑度較低,但靈敏度較高 

N值的選取:一般流量,N=12;壓力:N=4 

B、優點: 

適用於對一般具有隨機幹擾的訊號進行濾波 

這樣訊號的特點是有一個平均值,訊號在某一數值範圍附近上下波動 

C、缺點: 

對於測量速度較慢或要求資料計算速度較快的即時控制不適用 

比較浪費RAM

4、遞推平均濾波法(又稱滑動平均濾波法)

#define N 12 

 

char value_buf[N]; 

char i=0; 

 

char filter() 

char count; 

int sum=0; 

value_buf[i++] = get_ad(); 

if ( i == N ) i = 0; 

for ( count=0;count<N,count++) 

sum = value_buf[count]; 

return (char)(sum/N); 

}

A、方法: 

把連續取N個採樣值看成一個隊列 

隊列的長度固定為N 

每次採樣到一個新資料放入隊尾,並扔掉原來隊首的一次資料.(先進先出原則) 

把隊列中的N個資料進行算術平均運算,就可獲得新的濾波結果 

N值的選取:流量,N=12;壓力:N=4;液面,N=4~12;溫度,N=1~4 

B、優點: 

對周期性幹擾有良好的抑製作用,平滑度高 

適用於高頻振蕩的系統 

C、缺點: 

靈敏度低 

對偶然出現的脈衝性幹擾的抑製作用較差 

不易消除由於脈衝幹擾所引起的採樣值偏差 

不適用於脈衝幹擾比較嚴重的場合 

比較浪費RAM 

 

5、中位值平均濾波法(又稱防脈衝幹擾平均濾波法)

#define N 12 

 

char filter() 

char count,i,j; 

char value_buf[N]; 

int sum=0; 

for (count=0;count<N;count++) 

value_buf[count] = get_ad(); 

delay(); 

for (j=0;j<N-1;j++) 

for (i=0;i<N-j;i++) 

if ( value_buf[i]>value_buf[i+1] ) 

temp = value_buf[i]; 

value_buf[i] = value_buf[i+1]; 

value_buf[i+1] = temp; 

for(count=1;count<N-1;count++) 

sum += value[count]; 

return (char)(sum/(N-2)); 

 

A、方法: 

相當於“中位值濾波法”+“算術平均濾波法” 

連續採樣N個資料,去掉一個最大值和一個最小值 

然後計算N-2個資料的算術平均值 

N值的選取:3~14 

B、優點: 

融合了兩種濾波法的優點 

對於偶然出現的脈衝性幹擾,可消除由於脈衝幹擾所引起的採樣值偏差 

C、缺點: 

測量速度較慢,和算術平均濾波法一樣 

比較浪費RAM

6、限幅平均濾波法

 

 

略 參考子程式1、3 

 

A、方法: 

相當於“限幅濾波法”+“遞推平均濾波法” 

每次採樣到的新資料先進行限幅處理, 

再送入隊列進行遞推平均濾波處理 

B、優點: 

融合了兩種濾波法的優點 

對於偶然出現的脈衝性幹擾,可消除由於脈衝幹擾所引起的採樣值偏差 

C、缺點: 

比較浪費RAM 

 

7、一階滯後濾波法

 

 

#define a 50 

 

char value; 

 

char filter() 

char new_value; 

new_value = get_ad(); 

return (100-a)*value + a*new_value; 

}

A、方法: 

取a=0~1 

本次濾波結果=(1-a)*本次採樣值+a*上次濾波結果 

B、優點: 

對周期性幹擾具有良好的抑製作用 

適用于波動頻率較高的場合 

C、缺點: 

相位滯後,靈敏度低 

滯後程度取決於a值大小 

不能消除濾波頻率高於採樣頻率的1/2的幹擾訊號 

 

8、加權遞推平均濾波法

  

 

#define N 12 

 

char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12}; 

char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12; 

 

char filter() 

char count; 

char value_buf[N]; 

int sum=0; 

for (count=0,count<N;count++) 

value_buf[count] = get_ad(); 

delay(); 

for (count=0,count<N;count++) 

sum += value_buf[count]*coe[count]; 

return (char)(sum/sum_coe); 

}

A、方法: 

是對遞推平均濾波法的改進,即不同時刻的資料加以不同的權 

通常是,越接近現時刻的資料,權取得越大。 

給予新採樣值的權係數越大,則靈敏度越高,但訊號平滑度越低 

B、優點: 

適用於有較大純延隔時間常數的對象 

和採樣周期較短的系統 

C、缺點: 

對於純延隔時間常數較小,採樣周期較長,變化緩慢的訊號 

不能迅速反應系統當前所受幹擾的嚴重程度,濾波效果差

9、消抖濾波法

#define N 12 

 

char filter() 

char count=0; 

char new_value; 

new_value = get_ad(); 

while (value !=new_value); 

count++; 

if (count>=N) return new_value; 

delay(); 

new_value = get_ad(); 

return value; 

}

A、方法: 

設定一個濾波計數器 

將每次採樣值與當前有效值比較: 

如果採樣值=當前有效值,則計數器清零 

如果採樣值<>當前有效值,則計數器+1,並判斷計數器是否>=上限N(溢出) 

如果計數器溢出,則將本次值替換當前有效值,並清計數器 

B、優點: 

對於變化緩慢的被測參數有較好的濾波效果, 

可避免在臨界值附近控制器的反覆開/關跳動或顯示器上數值抖動 

C、缺點: 

對於快速變化的參數不宜 

如果在計數器溢出的那一次採樣到的值恰好是幹擾值,則會將幹擾值當作有效值導 

入系統 

 

10、限幅消抖濾波法

 

 

略 參考子程式1、9 

 

A、方法: 

相當於“限幅濾波法”+“消抖濾波法” 

先限幅,後消抖 

B、優點: 

繼承了“限幅”和“消抖”的優點 

改進了“消抖濾波法”中的某些缺陷,避免將幹擾值匯入系統 

C、缺點: 

對於快速變化的參數不宜

10種軟體濾波方法的樣本程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.