数字滤波技术在单片机应用系统中的实现_第1页
数字滤波技术在单片机应用系统中的实现_第2页
数字滤波技术在单片机应用系统中的实现_第3页
数字滤波技术在单片机应用系统中的实现_第4页
数字滤波技术在单片机应用系统中的实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字滤波技术在单片机应用系统中的实现

在单用空间通信系统中,通常需要滤波输入信号,以防止随机干扰信号对控制系统的影响。对信号的滤波处理可通过硬件和软件2种方式实现,其中软件采用滤波算法来实现数字滤波,主要通过程序设计或判断来减少随机干扰在有用信号中的比重。数字滤波具有精度高、可靠性和稳定性高、灵活性好的特点,并能克服模拟滤波器的诸多缺陷,因此在单片机测控系统中的数字滤波技术得到了广泛的应用。1滤波方法法数字滤波常用算法有算术平均值滤波法、滑动平均值滤波法、加权平均值滤波法、防脉冲干扰平均值滤波法、限幅滤波法、中值滤波法和低通滤波法等。1.1血压测量算法对于具有随机干扰,且本身在某一值范围附近上下波动的信号,如测量流量、液位等信号,可采用算术平均值滤波法进行滤波。该算法通过对信号进行连续采样,然后求其算术平均值作为有效采样值,即Y=1N∑i=1NXiY=1Ν∑i=1ΝXi式中:Xi为第i次采样的输入信号;N为采样次数;Y为N个采样值的平均输出值。采样次数N越大,平滑效果越好,但系统灵敏度将下降;同时N越大,将使系统的存储空间及运算量增大,为此需合理选择N值。一般情况,对压力的测量,取N=4;对流量的测量,取N=8~16。算术平均值滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineN//依实际情况设定采样次数Nintsuan_shu_filter(){intx[N];//采样数组inti,y;longintsum=0;for(i=0;i<N;i++)//连续读入N个采样值,并累加{x[i]=get_data();sum+=x[i];}y=sum/N;returny;}1.2滑动平均值滤波上述的算术平均值滤波法,每计算1次数据,需采样N次。对于测量速度较慢或要求数据计算速率较高的实时系统,该方法将无法使用。而滑动平均值滤波法只采样1次,通过队长固定为N的环形队列来得到最近的N个采样值,即每新采集到1个数据,放入队列中的队尾,同时丢掉队首最老的数据,始终保持队列中N个数据为最近的数据。计算平均时,只要把队列中N个数据进行算术平均,即可得新的算术平均值。滑动平均值滤波对周期性干扰有良好的抑制作用,平滑度高;但对偶然出现的脉冲性干扰的抑制作用差,不适用于脉冲干扰比较严重的场合。滑动平均值滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineN//依实际情况设定队列长度N的大小inti=0;intx[N];//采样数组inthua_dong_filter(){intj,y;longintsum=0;x[i++]=get_data();//读入采样值if(i==N)i=0;for(j=0;j<N;j++)//累加队列中N个采样值sum+=x[j];y=sum/N;returny;}1.3加权平均值滤波法cs计算采样值在算术平均值滤波和滑动平均值滤波中,N次采样值在输出结果中的比重是相等的,对于时变信号采用以上2种方法会引入滞后,N越大滞后越严重。为此,对连续N次采样值分别乘以不同的加权系数之后再求累加和。采样次数越靠后,权取得越大,以增加新采样数据在滤波中的比重,提高系统对采样值的灵敏度。各加权均为小于1的小数,且满足总和等于1的约束条件。加权运算后的累加和即为有效采样值。为便于计算,可取各加权系数均为整数,且总和为256,加权运算后的累加和除以256(即舍弃低字节)后便是有效采样值。加权平均值滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineN//依实际情况设定采样次数Nintcodequan[N]={?,,…};//设定加权系数表intcodesum_quan=256;intjia_quan_filter(){intx[N];//采样数组inti,y;intsum=0;for(i=0;i<N;i++){x[i]=get_data();}for(i=0;i<N;i++)//累加采样值和加权系数的乘积{sum+=x[i]*quan[i];}y=sum/sum_quan;returny;}1.4中值滤波法cs中值滤波主要是对被测参数连续采样N次(N一般为奇数),然后把N次采样值按大小顺序排列,取其中间值作为本次采样值。该方法能有效滤除一些由偶然因素引起的波动或采样器不稳定引起的脉冲干扰,对于温度、液位等缓慢变化的被测参数可起到较好的滤波效果。中值滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineN//依实际情况设定采样次数N(N为奇数)intzhong_zhi_filter(){intx[N];//采样数组inti,j,k,temp,y;intsum=0;for(i=0;i<N;i++){x[i]=get_data();}for(j=0;j<N-1;j++)//N个采样值排序{for(k=0;k<N-j;k++){if(x[k]>x[k+1]){temp=x[k];x[k]=x[k+1];x[k+1]=temp;}}}y=x[(N-1)/2];//返回N个采样值的中间值returny;}1.5防脉冲干扰平均滤波法cs在工业控制等应用场合中,经常会遇到尖脉冲干扰信号,这些干扰信号会随同采样信号一同进入系统,对系统造成影响。为有效滤除尖脉冲干扰信号,可采取先对平均值法的N个数据进行比较,并按大小顺序排队后,丢掉队列中的最大值和最小值,然后计算余下N-2个数据的算术平均值。防脉冲干扰平均值滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineN//依实际情况设定采样次数Nintgan_rao_filter(){intx[N];//采样数组inti,j,k,temp,y;intsum=0;for(i=0;i<N;i++)//连续读入N个采样值{x[i]=get_data();}for(j=0;j<N-1;j++)//N个采样值排序{for(k=0;k<N-j;k++){if(x[k]>x[k+1]){temp=x[k];x[k]=x[k+1];x[k+1]=temp;}}}for(i=1;i<N-1;i++)//累加队列中间N-2个采样值{sum+=x[i];}y=sum/(N-2);//返回中间N-2个采样值的平均值returny;}1.6生成符合采样值成果限幅滤波主要滤除系统中可能存在的随机脉冲干扰信号。其基本思想是比较相邻2个采样值Xi和Xi-1,然后根据被控对象实际情况设定允许的最大偏差ΔX;若2次采样的增量值(以绝对值表示)小于或等于ΔX,则取本次采样值Xi;若增量值大于ΔX,则认为存在随机脉冲干扰,应删除Xi,并用上次采样值Xi-1替代Xi。限幅滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#defineM//依实际情况设定最大偏差值Mintx1;//上次采样值intxian_fu_filter(){intx2;x2=get_data();//读入本次采样值if((x2-x1>M)||(x1-x2>M))returnx1;returnx2;}1.7周期滤波效果低通滤波用软件来实现硬件RC滤波器的功能,以抑制干扰信号。低通滤波算法为Yn=a⋅Xn+(1−a)⋅Yn−1Yn=a⋅Xn+(1-a)⋅Yn-1式中:Xn为当前滤波器输入值;Yn-1为上次滤波器输出值;Yn为本次滤波器输出值;a为滤波系数,由滤波时间和采样周期确定,其值通常远小于1。为便于计算,a取整数,(1-a)用(256-a)来替代,计算结果舍弃最低字节即可。低通滤波对周期性干扰具有很好的抑制作用,适用于波动频率较高参数的滤波。低通滤波法的C语言程序如下:/*get_data()为获取采样值的子函数*/#definea//依实际情况设定滤波系数a(a为整数)inty1;//上次滤波器输出值intdi_tong_filter(){inty2;//本次滤波器输出值intx;//当前滤波器

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论