欢迎来到天天文库
浏览记录
ID:22949978
大小:78.68 KB
页数:11页
时间:2018-11-02
《数字滤波常用的软件方法代码实例》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、数字滤波常用的软件方法代码实例数字滤波常用的软件滤波方法很多,下面介绍几种常用的数字滤波方法。在微机控制系统的模拟输入信号中,一般均含有各种噪声和干扰,他们来自被测信号源本身、传感器、外界干扰等。为了进行准确测量和控制,必须消除被测信号中的噪声和干扰。噪声有2大类:一类为周期性的,其典型代表为50Hz的工频干扰,对于这类信号,采用积分时间等于20ms整倍数的双积分A/D转换器,可有效地消除其影响;另一类为非周期的不规则随机信号,对于随机干扰,可以用数字滤波方法予以削弱或滤除。所谓数字滤波,就是通过一定的
2、计算或判断程序减少干扰信号在有用信号中的比重,因此他实际上是一个程序滤波。数字滤波器克服了模拟滤波器的许多不足,他与模拟滤波器相比有以下优点:(1)数字滤波器是用软件实现的,不需要增加硬设备,因而可靠性高、稳定性好,不存在阻抗匹配问题。(2)模拟滤波器通常是各通道专用,而数字滤波器则可多通道共享,从而降低了成本。(3)数字滤波器可以对频率很低(如0.01Hz)的信号进行滤波,而模拟滤波器由于受电容容量的限制,频率不可能太低。 (4)数字滤波器可以根据信号的不同,采用不同的滤波方法或滤波参数,具有灵活
3、、方便、功能强的特点。 10种软件滤波方法的示例程序OurWay发表于2005-9-222:24:0010种软件滤波方法的示例程序(JKRL)假定从8位AD中读取数据(如果是更高位的AD可定义数据类型为int),子程序为get_ad();1、限副滤波A、方法:根据经验判断,确定两次采样允许的最大偏差值(设为A),每次检测到新值时判断:如果本次值与上次值之差<=A,则本次值有效。如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值 B、优点:能有效克服因偶然因素引起的脉冲干扰。
4、 C、缺点:无法抑制那种周期性的干扰,平滑度差。 /*A值可根据实际情况调整 value为有效值,new_value为当前采样值 滤波程序返回有效的实际值*/#defineA10charvalue;charfilter(){ charnew_value; new_value=get_ad(); if((new_value-value>A)
5、
6、(value-new_value>A) returnvalue; returnnew_value; }2、中位值滤波法A、方法
7、:连续采样N次(N取奇数),把N次采样值按大小排列,取中间值为本次有效值。 B、优点:能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果。 C、缺点:对流量、速度等快速变化的参数不宜。/*N值可根据实际情况调整 排序采用冒泡法*/#defineN11charfilter(){ charvalue_buf[N]; charcount,i,j,temp; for(count=0;count8、]=get_ad(); delay(); } for(j=0;jvalue_buf[i+1]) { temp=value_buf[i]; value_buf[i]=value_buf[i+1]; value_buf[i+1]=temp; } } } returnv9、alue_buf[(N-1)/2];} 3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算。N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4 B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。 C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM。#defineN12charfilter(){ intsum=010、; for(count=0;count
8、]=get_ad(); delay(); } for(j=0;jvalue_buf[i+1]) { temp=value_buf[i]; value_buf[i]=value_buf[i+1]; value_buf[i+1]=temp; } } } returnv
9、alue_buf[(N-1)/2];} 3、算术平均滤波法A、方法:连续取N个采样值进行算术平均运算。N值较大时:信号平滑度较高,但灵敏度较低;N值较小时:信号平滑度较低,但灵敏度较高。N值的选取:一般流量,N=12;压力:N=4 B、优点:适用于对一般具有随机干扰的信号进行滤波,这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动。 C、缺点:对于测量速度较慢或要求数据计算速度较快的实时控制不适用,比较浪费RAM。#defineN12charfilter(){ intsum=0
10、; for(count=0;count
此文档下载收益归作者所有