微机控制系统的数字滤波算法_第1页
微机控制系统的数字滤波算法_第2页
微机控制系统的数字滤波算法_第3页
微机控制系统的数字滤波算法_第4页
微机控制系统的数字滤波算法_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、微机控制系统的数字滤波算法字体: 小 中 大 | 打印 发布: 2007-7-24 17:25    作者: 网络转载    来源: 网络    查看: 11次摘 要:分析了采用数字滤波消除随机干扰的优点,详细论述了微机控制系统中常用的8种数字滤波算法,并讨论了各种数字滤波算法的适用范围。    关键词:数字滤波;控制系统;随机干扰;数字滤波算法 1引言在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪声和干

2、扰。噪声有2大类:一类为周期性的,其典型代表为50 Hz的工频干扰,对于这类信号,采用积分时间等于20 ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。(3)数字滤波器可以对

3、频率很低(如0.01 Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。   (4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活、方便、功能强的特点。2常用数字滤波算法数字滤波器是将一组输入数字序列进行一定的运算而转换成另一组输出数字序列的装置。设数字滤波器的输入为X(n),输出为Y(n),则输入序列和输出序列之间的关系可用差分方程式表示为:其中:输入信号X(n)可以是模拟信号经采样和A/D变换后得到的数字序列,也可以是计算机的输出信号。具有上述关系的数字滤波器的当前输出与现在的和过去的输入、过去的输出有关。由这样的差

4、分方程式组成的滤波器称为递归型数字滤波器。如果将上述差分方程式中bK取0,则可得:说明输出只和现在的输入和过去的输入有关。这种类型的滤波器称为非递归型数字滤波器。参数aK、bK的选择不同,可以实现低通、高通、带通、带阻等不同的数字滤波器。2.1算术平均值滤波算术平均值滤波是要寻找一个Y,使该值与各采样值X(K)(K=1N)之间误差的平方和为最小,即:这时,可满足式(3)。式(4)便是算术平均值滤波的算法。设第二次测量的测量值包含信号成分Si和噪声成分Ci,则进行N次测量的信号成分之和为:   噪声的强度是用均方根来衡量的,当噪声为随机信号时,进行N次测量的噪声强度

5、之和为:式(5)和式(6)中,S、C分别表示进行N次测量后信号和噪声的平均幅度。这样对N次测量进行算术平均后的信噪比为:其中,SC是求算术平均值前的信噪比。因此采用算术平均值后,使信噪比提高了倍。算术平均值法适用于对一般具有随机干扰的信号进行滤波,这种信号的特点是有一个平均值,信号在某一数值范围附近作上下波动,此时仅取一个采样值作依据显然是不准确的,如压力、流量、液平面等信号的测量。但对脉冲性干扰的平滑作用尚不理想,因此他不适用于脉冲性干扰比较严重的场合。由式(7)可知,算术平均值法对信号的平滑滤波程度完全取决于N。当N较大时,平滑度高,但灵敏度低,即外界信号的变化对测量计算结果Y的影响小;当

6、N较小时,平滑度低,但灵敏度高。应视具体情况选取N,以便既少占用计算时间,又达到最好的效果,如对一般流量测量,可取N=816,对压力等测量,可取N=4。2.2加权平均值滤波算术平均值法对每次采样值给出相同的加权系数,即1N。但有些场合为了改进滤波效果,提高系统对当前所受干扰的灵敏度,需要增加新采样值在平均值中的比重,即将各采样值取不同的比例,然后再相加,此方法称为加权平均值法。一个N项加权平均式为:   常数C1,C2,CN的选取是多种多样的,其中常用的是加权系数法,即:加权平均值法适用于系统纯滞后时间常数较大、采样周期较短的过程,他给不同的相对采样时间得到的采样

7、值以不同的权系数,以便能迅速反应系统当前所受干扰的严重程度。但采用加权平均值法需要测试不同过程的纯滞后时间,同时要不断计算各权系数,增加了计算量,降低了控制速度,因而他的实际应用不如算术平均值法广泛。2.3滑动平均值滤波以上平均滤波算法有一个共同点,即每计算1次有效采样值必须连续采样N次。对于采样速度较慢或要求数据计算速率较高的实时系统,这些方法是无法使用的。例如AD数据,数据采样速率为每秒10次,而要求每秒输入4次数据时,则N不能大于2。滑动平均值法只采样1次,将本次采样值和以前的N1次采样值一起求平均,得到当前的有效采样值。滑动平均值法把N个采样数据看成一个队列,对列的长度固定为N,每进行

8、一次新的采样,把采样结果放入队尾,而扔掉原来队首的一个数据,这样在队列中始终有N个“最新”的数据。计算滤波值时,只要把队列中的N个数据进行平均,就可得到新的滤波值。滑动平均值法对周期性干扰有良好的抑制作用,平滑度高,灵敏度低;但对偶然出现的脉冲性干扰的抑制作用差,不易消除由于脉冲干扰引起的采样值的偏差。因此他不适用于脉冲干扰比较严重的场合,而适用于高频振荡系统。通过观察不同N值下滑动平均的输出响应来选取N值,以便既少占用时间,又能达到最好的滤波效果。其工程经验值为:流量N取12,压力N取4,液面N取412,温度N取14。2.4中值滤波中值滤波是对某一被测参数连续采样N次(一般N取奇数),然后把

9、N次采样值从小到大,或从大到小排队,再取其中间值作为本次采样值。中值滤波对于去掉偶然因素引起的波动或采样器不稳定而造成的误差所引起的脉冲干扰比较有效,对温度、液位等变化缓慢的被测参数采用此法能收到良好的滤波效果,但对流量、速度等快速变化的参数一般不易采用。2.5防脉冲干扰平均值滤波在脉冲干扰比较严重的场合,若采用一般的平均值法,则干扰将“平均”到计算结果中去,故平均值法不易消除由于脉冲干扰而引起的采样值偏差。防脉冲干扰平均值法先对N个数据进行比较,去掉其中的最大值和最小值,然后计算余下的N-2个数据的算术平均值。即:在实际应用中,N可取任何值,但为了加快测量计算速度,N一般不能太大,常取为4,

10、即为四取二再取平均值法。他具有计算方便、速度快、存储量小等特点,故得到了广泛应用。 2.6程序判断滤波工程实践表明,许多物理量的变化都需要一定的时间,相邻两次采样值之间的变化有一定的限度。程序判断滤波就是根据实践经验确定出相邻两次采样信号之间可能出现的最大偏差Y,若超出此偏差值,则表明该输入信号是干扰信号,应该去掉;若小于此偏差值,可将信号作为本次采样值。当采样信号由于随机干扰,如大功率用电设备的启动或停止,造成电流的尖峰干扰或误检测,以及变送器不稳定而引起的严重失真等,可采用程序判断法进行滤波。程序判断滤波根据滤波方法的不同,可分为限幅滤波和限速滤波2种。2.6.1 限幅滤波限幅滤波把两次相

11、邻的采样值相减,求出其增量(以绝对值表示),然后与两次采样允许的最大差值(由被控对象的实际情况决定)Y进行比较,若小于或等于Y,则取本次采样值;若大于Y,则仍取上次采样值作为本次采样值。即:   限幅滤波主要用于变化比较缓慢的参数,如温度、物理位置等测量系统。具体应用时,关键的问题是最大允差Y的选取,Y太大,各种干扰信号将“乘虚而入”,使系统误差增大;Y太小,又会使某些有用信号被“拒之门外”,使计算机采样效率变低。因此,门限值Y的选取是非常重要的。通常可根据经验数据获得,必要时也可由实验得出。2.6.2限速滤波限速滤波最多可用3次采样值来决定采样结果,设顺序采样时

12、刻t1,t2,t3的采样值分别为Y(1),Y(2),Y(3),则限速滤波较为折中,既照顾了采样的实时性,又顾及了采样值变化的连续性。但这种方法也有明显的缺点:    (1)Y的确定不够灵活,必须根据现场的情况不断更换新值;     (2)不能反映采样点数N3时各采样值受干扰的情况,因而其应用受到一定的限制。具体应用时,可用(|Y(1)-Y(2)|+|Y(2)-Y(3)|)/2作为Y,这样也可基本保持限速滤波的特性,虽增加计算量,但灵活性提高了。2.7低通滤波将普通硬件RC低通滤波器的微分方程用差分方程来表示,便可以用软件算法来模拟硬件

13、滤波的功能。经推导,低通滤波算法如下:其中,X(K)为本次采样值;Y(K-1)为上次的滤波输出值;为滤波系数,其值通常远小于1;Y(K)为本次滤波的输出值。由式(13)可以看出,本次滤波的输出值主要取决于上次滤波的输出值(注意不是上次的采样值,这和加权平均滤波是有本质区别的),本次采样值对滤波输出的影响是比较小的,但多少有些修正作用。这种算法模拟了具有较大惯性的低通滤波功能,当目标参数为变化很慢的物理量时,效果很好,但他不能滤除高于12采样频率的干扰信号。除低通滤波外,同样可用软件来模拟高通滤波和带通滤波。2.8复合数字滤波为了进一步提高滤波效果,有时可以把2种或2种以上不同滤波功能的数字滤波

14、器组合起来,组成复合数字滤波器,或称多级数字滤波器。例如防脉冲干扰平均值滤波就是一种应用实例,由于这种滤波方法兼顾了中值滤波和算术平均值滤波的优点,所以无论对缓慢变化的信号,还是对快速变化的信号,都能获得较好的滤波效果。此外,也可采用双重滤波的方法,即把采样值经过低通滤波后,再经过一次高通滤波。这样,结果更接近理想值,这实际上相当于多级RC滤波器。3结语本文讨论了8种数字滤波算法,每种滤波算法都有其各自的特点,在实际应用中,究竟选取哪一种数字滤波算法,应根据具体的测量参数合理的选用。不适当地应用数字滤波,不仅达不到滤波效果,反而会降低控制品质,甚至失控,这点必须予以注意。 /在许多的数据采集系

15、统中,现场的强电设备较多,不可避免  地会产生尖脉冲干扰,这种干扰一般持续时间短,峰值大,对这样  的数据进行数字滤波处理时,仅仅采用算术平均或移动平均滤波  时,尽管对脉冲干扰进行了1/n的处理,但,其剩余值仍然较大。  这种场合最好的策略是:将被认为是受干扰的信号数据去掉,这  就是防脉冲干扰平均值滤波法的原理。   防脉冲干扰平均值滤波法的算法是:对连续的n个数据进行排序,  去掉其中最大和最小的2个数据,将剩余数据示平均值。   在一般8051单片机的应用中为了加快数据处理速度,n可以取

16、值6。  而对于具有较快速度的处理器,则n值可以适当取大一些。但最好是  n=2k+2,  k为整数,因为这样在求平均值average=SUM/(n-2)=SUM/2k时,  可以写成average=SUM>>k,用移位的方法,可以加快处理速度。      上述算法显然还存在一个不足之处,就是每采集一个数据就要进行一次排序,  这样会大量占用系统宝贵的时间。这可以通过存储当前数据中的最大值和最小值来改进。具体做法是:    系统中用两个变量来存储当前n个数据的最大

17、值和最小值在这个数组中的  偏移量(也就是数组下标,存储数组下标而直接不存储数据本身是因为:在一般的系统中,n不会超无符号短整形的表示范围,因此用一个char形变量就可以存储了,而如果直接存储数据本身,则许多情况下要用int形变量,甚至更长的类型)。这样只要在当前输入的数据将要覆盖的数据正好是当前的最大值或最小值时才在下个数组中查找最大值或最小值,而其他情况下则只要将输入的数据与最大值和最小值比较就可以修改下最大值和最小值了,而且不用进行数据排序。  这个算法很简单,下面是对应的C语言代码实现,可以很方便的应用的具体的51单片机,或其他处理器上,只须做少量的修改。i ncl

18、ude"stdio.h"#define dtype unsigned int / 采集数据的数据类型#define uint8 char#define LEN  6   /移动算术平均的个数+2=SHIFT<<2+2#define SHIFT 2   /2SHIFTuint8 pdata;    /移动指针uint8 pmax,pmin;   /记录数据表中最大值和

19、最小值的位置,       /在一般的数据采集系统中,数据的长度>=8,       /因此用指针记录而不是直接记录最大值和最小值dtype datasLEN;dtype szlb(dtype _data)  /*/* 在调用此子程序前必须对 */* pdata,datas数组,  */* pmax,pmin进行初始化  */*/ uint8 i;&#

20、160;dtype average=0;  /清零,用来计算平均值 pdata=(pdata+1)%LEN; /指针下标在0到LEN-1上滑动 dataspdata=_data;  /采样所得数据存入数据表中 for(i=0;i<LEN;i+)         average+=datasi; /求所有数据总和/*去除被认为是脉冲的数据*/ if(_data>dataspmax)   

21、   pmax=pdata;   /得到最大值的指针 else if(_data<dataspmin)      pmin=pdata;   /得到最小值的指针 if(pdata=pmax)   /如果当前输入值将存入当前最大值的位置时       /由以上方法将不可行,必须从其他位置中查找极值    

22、  for(i=0;i<LEN;i+)          if(datasi>dataspmax)          pmax=i;  else if(pdata=pmin)/如果当前输入值将存入当前最大值的位置时       /由以上方法将不可行,必须从其他位置中查找极值    

23、60;for(i=0;i<LEN;i+)          if(datasi<dataspmin)           pmin=i;  average=average-dataspmax-dataspmin;/减去脉冲 return (average>>SHIFT);    /求算术平均值/*以下是在VC6.0环境下运行

24、的测试程序*/*通过手动输入来模拟数据采集过程*/void main() uint8 i; dtype _data; pdata=0; pmax=0; pmin=0; for(i=0;i<LEN;i+)   datasi=0; printf("数据:                    &#

25、160;     最大       最小n"); while(1)       scanf("%u",&_data);      szlb(_data);      for(i=0;i<LEN;i+)      printf("

26、;%-3u  ",datasi);      printf("    %-3u      %-3u",dataspmax,dataspmin);      printf("n");   uchar ReadADCVal()  /   static uchar num=0;   s

27、tatic uchar cVin7=0,0,0,0,0,0,0;/220,220,220,220,220,220,220;/设输入电压缓冲区    /uchar i,j,v,t;   uchar i,j,v,t;   if(bAdcVOk)     iVtmp=iAdcVal;/从ADC中读出数据       iVtmp/=(5000/220);      if(iVtmp>255) v=2

28、55;      else v=(char)iVtmp;              for(i=0;i<7;i+)        if(v<=cVini)            break;            if(i<=3) /小于中值   

温馨提示

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

评论

0/150

提交评论