单片机数字滤波算法如何实现?(附代码)
嵌入式Linux
共 5791字,需浏览 12分钟
· 2021-04-13
![](https://filescdn.proginn.com/73663846717ea9f748b8a078cea7683d/d2c7bbafd0238722ae12cd2b5b34d8ae.webp)
ID:技术让梦想更伟大
整理:李肖遥
![](https://filescdn.proginn.com/73663846717ea9f748b8a078cea7683d/d2c7bbafd0238722ae12cd2b5b34d8ae.webp)
![](https://filescdn.proginn.com/a2bb21e68061d1fcf6e6f63ca79d8099/b15b2d2a49f730ee1bccac94459ce5ca.webp)
数字滤波无需其他的硬件成本,只用一个计算过程,可靠性高,不存在阻抗匹配问题。尤其是数字滤波可以对频率很低的信号进行滤波,这是模拟滤波器做不到的。
数字滤波使用软件算法实现,多输入通道可共用一个滤波程序,降低系统开支。
只要适当改变滤波器的滤波程序或运算,就能方便地改变其滤波特性,这对于滤除低频干扰和随机信号会有较大的效果。
在单片机系统中常用的滤波算法有限幅滤波法、中值滤波法、算术平均滤波法、加权平均滤波法、滑动平均滤波等。
限幅滤波算法
1#define A //允许的最大差值
2
3char data; //上一次的数据
4
5char filter()
6
7{
8
9 char datanew; //新数据变量
10
11 datanew=get_data(); //获得新数据变量
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 //定义获得的数据个数 2 3char filter()
4
5{
6 7 char value_buff[N]; //定义存储数据的数组 8 9 char count,i,j,temp;
1011 for(count=0;count<N;count++)
1213 {
1415 value_buf[count]=get_data();
1617 delay(); //如果采集数据比较慢,那么就需要延时或中断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}
算术平均滤波算法
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}
加权平均滤波算法
1char codejq[N]={1,2,3,4,5,6,7,8,9,10,11,12}; //code数组为加权系数表,存在程序存储区
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——滤波系数,其值通常远小于1;
8
9Yn——本次滤波的输出值。
1fL=a/2Pit pi为圆周率3.14…
2
3式中 a——滤波系数;
4
5t——采样间隔时间;
6
7例如:当t=0.5s(即每秒2次),a=1/32时;
8
9fL=(1/32)/(2*3.14*0.5)=0.01Hz
评论
太阳鸟
国内大型的工作服和防护用品生产企业,旗下产品涵盖工装制服、大衣、反光马甲、西装、防护雨衣、劳保用品、工作鞋等多个类别,得到了广大客户的信赖与支持日照市太阳鸟贸易有限公司是一家集职业装、防护服、安全鞋为
太阳鸟
0
桂林启迪中英文幼稚园
桂林启迪中英文幼稚园,地址:桂林平乐县。拥有一支素质良好乐于奉献的教师队伍。现有教职员工多人,教师学历达标率100%。幼儿园非常重视校园文化建设,认真贯彻落实教师职业道德规范,注重培养教职工的服务意识
桂林启迪中英文幼稚园
0
桂林博爱中英文幼稚园
桂林博爱中英文幼稚园,地址:广西阳朔县阳朔镇抗战路,电话:0773-8821047。办一所品质卓越、特色鲜明、书香浓郁的精品示范幼儿园。我们的园风:明礼、乐学、创新、和谐;我们的教风:仁爱、好学、乐思
桂林博爱中英文幼稚园
0