單片機(jī)數(shù)字濾波算法如何實現(xiàn)?(附代碼)

ID:技術(shù)讓夢想更偉大
整理:李肖遙
采用數(shù)字濾波算法克服隨機(jī)干擾的誤差具有以下優(yōu)點(diǎn):數(shù)字濾波無需其他的硬件成本,只用一個計算過程,可靠性高,不存在阻抗匹配問題。尤其是數(shù)字濾波可以對頻率很低的信號進(jìn)行濾波,這是模擬濾波器做不到的。
數(shù)字濾波使用軟件算法實現(xiàn),多輸入通道可共用一個濾波程序,降低系統(tǒng)開支。
只要適當(dāng)改變?yōu)V波器的濾波程序或運(yùn)算,就能方便地改變其濾波特性,這對于濾除低頻干擾和隨機(jī)信號會有較大的效果。
在單片機(jī)系統(tǒng)中常用的濾波算法有限幅濾波法、中值濾波法、算術(shù)平均濾波法、加權(quán)平均濾波法、滑動平均濾波等。
限幅濾波算法
1#define A //允許的最大差值
2
3char data; //上一次的數(shù)據(jù)
4
5char filter()
6
7{
8
9 char datanew; //新數(shù)據(jù)變量
10
11 datanew=get_data(); //獲得新數(shù)據(jù)變量
12
13 if((datanew-data)>A||(data-datanew>A))
14
15 return data;
16
17 else
18
19 return datanew;
20
21}
中值濾波算法
1#define N 11 //定義獲得的數(shù)據(jù)個數(shù) 2 3char filter()
4
5{
6 7 char value_buff[N]; //定義存儲數(shù)據(jù)的數(shù)組 8 9 char count,i,j,temp;
1011 for(count=0;count<N;count++)
1213 {
1415 value_buf[count]=get_data();
1617 delay(); //如果采集數(shù)據(jù)比較慢,那么就需要延時或中斷1819 }
2021 for(j=0;j<N;j++)
2223 {
2425 if(value_buff[i]>value_buff[i+1])
2627 {
2829 temp=value_buff[i];
3031 value_buff[i]=value_buff[i+1];
3233 value_buff[i+1]=temp;
3435 }
3637 }
3839return value_buff[(N-1)/2];
4041}
算術(shù)平均濾波算法
1char filter()
2
3{
4
5 int sum=0;
6
7 for(count=0;count<N;count++)
8
9 {
10
11 sum+=get_data();
12
13 delay():
14
15 }
16
17 return (char)(sum/N);
18
19}
加權(quán)平均濾波算法
1char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code數(shù)組為加權(quán)系數(shù)表,存在程序存儲區(qū)
2
3char codesum_jq=1+2+3+4+5+6+7+8+9+10+11+12;
4
5char filter()
6
7{
8
9 char count;
10
11 char value_buff[N];
12
13 int sum=0;
14
15 for(count=0;count<N;count++)
16
17 {
18
19 value_buff[count]=get_data();
20
21 delay();
22
23 }
24
25 for(count=0;count<N;count++)
26
27 sum+=value_buff[count]*jq[count];
28
29 return (char)(sum/sum_jq);
30
31}
滑動平均濾波算法
1char value_buff[N];
2
3char i=0;
4
5char filter()
6
7{
8
9 char count;
10
11 int sum=0;
12
13 value_buff[i++]=get_data();
14
15 if(i==N)
16
17 i=0;
18
19 for(count=0;count<N;count++)
20
21 sum=value_buff[count];
22
23 return (char)(sum/N);
24
25}
低通濾波
1Yn=a* Xn+(1-a) *Yn-1
2
3式中 Xn——本次采樣值
4
5Yn-1——上次的濾波輸出值;
6
7a——濾波系數(shù),其值通常遠(yuǎn)小于1;
8
9Yn——本次濾波的輸出值。
1fL=a/2Pit pi為圓周率3.14…
2
3式中 a——濾波系數(shù);
4
5t——采樣間隔時間;
6
7例如:當(dāng)t=0.5s(即每秒2次),a=1/32時;
8
9fL=(1/32)/(2*3.14*0.5)=0.01Hz

往期好文閱讀
點(diǎn)擊閱讀??

評論
圖片
表情
