单片机数据采集系统中数字滤波算法研究_第1页
单片机数据采集系统中数字滤波算法研究_第2页
单片机数据采集系统中数字滤波算法研究_第3页
单片机数据采集系统中数字滤波算法研究_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

1、单片机数据采集系统中数字滤波算法研究摘 要: 针对单片机数据采集系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的c程序,尤其对中位值滤波和中位值平均滤波算法程序进行了改进。同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。关键词: 单片机;数据采集系统;随机干扰;数字滤波;算法 study of digital filtering algorithm in microcontroller data acquisition systemabstract: aiming at the ra

2、ndom interruptions that usually appears in microcontroller data acquisition system, this article verified several algorithms of digital filter and c program to inhibit the random interruptions by manual input to simulate data collection process, especially improved the algorithm program of the avera

3、ge center-position values and middle value filter. comparison among the several algorithms and application field were also mentioned.key words:mcu;data acquisition system;random interruption;digital filter;algorithm0 引言在单片机的数据采集系统中,测量通道串入随机干扰是难免的,从而使a/d转换送入单片机的数据存在误差,这种因随机干扰产生的误差称为随机误差。随机误差虽然无法预测,但多

4、次测量结果是符合统计规律的。为克服随机干扰产生的误差,可以采用硬件抗干扰的方法,也可以采用按统计规律用软件方法实现,即采用数字滤波的方法来抑制有效信号中的干扰成分,从而消除随机误差。1 常用的数字滤波算法及实现在单片机的数据采集系统中,常用的数字滤波算法有限幅滤波、中位值滤波、算术平均滤波、移动平均滤波、加权平均滤波、低通滤波、中位值平均滤波等。以下就分别介绍其原理及滤波程序。1.1 限幅滤波限幅滤波的基本原理是把两次相邻时刻(n和n-1)的采样值yn和yn-1相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值y比较,如果两次采样值的差值超过了允许的最大偏差值y,则认为发

5、生了随机干扰,并认为最后一次采样值yn非法,应予剔除。剔除yn后,可用yn-1代替yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。可用如下公式表示:|yn-yn-1|y;则yn有效|yn-yn-1|y;则yn-1有效此算法的样例子程序如下:#define a 10 /a值可根据实际情况调整char data; /上一次的数据char filter_1()char datanew; /新数据变量datanew=get_data(); /获得新数据/滤波算法if (datanew-dataa)|(data-datanewa) return data;return datanew; 该算法

6、主要用于处理变化比较缓慢的数据,如温度、物体的位置等。使用时关键在于最大偏差值的y的选择,通常可根据经验获得,也可按照输出参数可能的最大变化速度vmax及采样周期t来决定y的值1,即y=vmaxt。1.2 中位值滤波中位值滤波是先对某一参数连续采样n次(一般n取奇数),然后把n次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,文献2,7,9采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换,效率很低,故在验证时改用选择排序法。该算法的样例子程序如下:#define n 11 /n值可根据实际情况调整char filter_

7、2()char value_buf;char count,i,j,k,temp;for(count=0;countn;count+) /获取数据value_bufcount=get_data();delay();for(i=0;in-1;i+) /选择排序 k=i; for(j=i+1;jn;j+) if(value_bufjvalue_bufk) k=j; temp=value_bufk; value_bufk=value_bufi; value_bufi=temp; return value_buf(n-1)/2;中位值滤波能有效地克服偶然因素引起的波动或采样器不稳定引起的误码等脉冲干扰。

8、对温度、液位等缓慢变化的被测参数采用此算法能收到良好的滤波效果,但对于流量、压力等快速变化的数据,不宜采用中位值滤波。1.3 算术平均滤波算术平均滤波法是要按输入的n个采样数据xi(i从1到n),寻找这样一个y,使y与各采样值之间的偏差的平方和最小,即 (1)由一元函数求极值的原理,可得 (2)此即为算术平均滤波的基本算式。具体实现此算法的子程序如下:#define n 12char filter_3()int count;int sum=0;for(count=0;countn;count+) sum+=get_ad(); delay(); return (char)(sum/n);算术平均

9、滤波适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近做上下波动,在这种情况下仅取一个采样值做依据显然是不准确的。算术平均滤波对信号的平滑程序完全取决于n,当n较大时,平滑度高,但灵敏度低;当n较小时,平滑度低,但灵敏度高,应视具体情况选取n,以便既少占用计算时间,又达到最好的效果。1.4 移动平均滤波算术平均滤波需要连续采样若干次后,才能进行运算而获得一个有效的数据,因而速度较慢。为了克服这一缺点,可采用移动平均滤波。即先在ram中建立一个数据缓冲区,按顺序存放n次采样数据,然后每采进一个新数据,就将最早采集的数据去掉,最后再求出当前ram缓冲区中的

10、n个数据的算术平均值。这样,每进行一次采样,就可计算出一个新的平均值,即测量数据取一丢一3,测量一次便计算一次平均值,大大加快了数据处理的能力。具体的滤波程序如下:#define n 12char value_bufn;char i=0;char filter_4()char count;int sum=0;value_bufi+=get_ad();if (i=n) i=0;for (count=0;countn;count+)sum=value_bufcount;return(char)(sum/n);移动平均滤波对周期性干扰有良好的抑制作用,平滑度高,灵敏度低,但对偶然出现的脉冲性干扰抑制

11、作用差,因此它不适用于脉冲干扰比较严重的场合,而适用于高频振荡的系统。通过观察不同n值下移动平均的输出响应来选取n值,以便既少占用单片机的时间,又能达到最好的滤波效果。1.5 加权平均滤波在算术平均滤波和移动平均滤波中,n次采样值在输出结果中的权重是均等的,取1/n。用这样的滤波算法,对于时变信号会引入滞后,n值越大,滞后越严重1,4。为了增加新采样数据在移动平均中的权重,以提高系统对当前采样值中所受干扰的灵敏度,可采用加权平均滤波,它是移动平均滤波算法的改进。加权平均滤波是对连续n次采样值分别乘上不同的加权系统之后再求累加和,加权系统一般先小后大,以突出后面若干采样的效果,加强系统对参数变化

12、趋势的辨识。各个加权系统均为小于1的小数,且满足总和等于1的约束条件。这样,加权运算之后的累加和即为有效采样值。为方便计算,可取各加权系数均为整数,且总和为256,加权运算后的累加和除以256,即舍去低字节后便是有效采样值。具体的样例子程序如下:/code数组为加权系统表,存在rom区。#define n 12char code jqn=1,2,3,4,5,6,7,8,9,10,11,12; char code sum_jp=1+2+3+4+5+6+7+8+9+10+11+12;char filter_5()char count;char value_bufn;int sum=0;for(co

13、unt=0;countn;count+)value_bufcount=get_data();delay();for(count=0;countn;count+)sum+=value_bufcount*jqcount;return (char)(sum/sum_jq);1.6 中位值平均滤波该算法的基本原理是,对连续的n个数据进行排序,去掉其中最大和最小的2个数据,将剩余数据求平均值。为了加快数据处理速度,n可以取值6,而对于具有较快速度的处理器,n值可以适当取大一些。但最好是n=2k+25,k为整数,因为这样可以在求平均值时用移位的方法,加快处理速度。上述算法存在的一个不足之处就是每采集一个数

14、据就要进行一次排序,这样会大量占用系统宝贵的时间,文献8的算法程序即是如此。可以通过存储当前数据中的最大值和最小值来改进,具体做法是:系统中用两个变量来存储当前n个数据中最大值和最小值在数组中的偏移量。这样只有在当前输入的数据将要覆盖的数据正好是当前的最大值或最小值时,才在下个数组中查找最大值或最小值,而其他情况下,则只要将输入的数据与最大值和最小值比较就可以修改最大值和最小值了,而且不用进行数据排序。改进后的算法程序如下:#define dtype unsigned int #define uint8 char#define len 6 #define shift 2uint8 pdata;

15、uint8 pmax,pmin; dtype dataslen;dtype szlb(dtype _data) uint8 i;dtype average=0;pdata=(pdata+1)%len; dataspdata=_data; for(i=0;idataspmax)pmax=pdata;else if(_datadataspmin)pmin=pdata; if(pdata=pmax) for(i=0;idataspmax) pmax=i; else if(pdata=pmin) for(i=0;ilen;i+) if(datasishift); 这种滤波方法兼容了移动平均滤波算法和中

16、位值滤波算法的优点,所以无论对缓慢变化的信号,还是对快速变化的信号,都能取得较好的滤波效果。1.7低通滤波将描述模拟rc低通滤波特性的微分方程用差分方程来表示,便可以用软件算法来实现模拟滤波的功能4。最简单的一阶rc低通滤波器描述其输入x(t)与输出y(t)的微分方程为 (3)以采样周期t对x(t)、y(t)进行采样得yn=y(nt)xn=x(nt)如果trc,则由微分方程可得差分方程 (4)令 (5)可得yn=axn+(1-a)yn-1,其中:xn:当前的数据yn-1:上次的滤波输出值a:滤波系统yn:本次的滤波输出值由上式可以看出,本次滤波的输出值主要取决于上次滤波的输出值,这和加权平均滤

17、波是有本质区别的,本次采样值对滤波输出的贡献是比较小的,但多少有些修正作用,这种算法便模拟了具有较大惯性6的低能滤波功能。当目标参数为变化很慢的物理量时,这是很有效的。低通滤算法程序和加权平均滤波相似,但加权系统只有两个:a和1-a,因为只有两项,a和1-a均以立即数的形式编入程序中,不另设表格。虽然采样值为单元字节,为保证运算精度,滤波输出值用双字节表示,其中一字节整数,一字节小数,否则有可能因为每次舍去尾数而使输出不会变化。低通滤波的程序如下:/为加快程序处理速度,假定基数为100,/a=0100#define a 50char value;char filter_6()char new_

18、value;new_value=get_data();return(100-a)*value+a*new_value;一阶低通滤波算法对周期性干扰具有良好的抑制作用,适用于波动频繁的参数滤波,其不足之处是带来了相位滞后,灵敏度低。滞后的程度取决于a值的大小。同时,它不能滤除频率高于采样频率1/2(奈奎斯特频率)的干扰信号7,对于高于奈奎斯特频率的干扰信号,应该采用模拟滤波器。2 结束语以上介绍了几种使用较普遍的克服随机干扰的软件算法及实现的程序,同时对这几种算法也进行了比较,并指出了每一种算法的具体适用范围和注意事项。在一个具体的单片机应用系统中,究竟使用哪种滤波算法,取决于其使用场合及过程中所含有的随机干扰情况。参考文献1 李玉梅.基于mcs-51系列单片机原理的应用设计m北京:国防工业出版社,2006. 104-112.2 求是科技.8051单片机c程序设计完全手册m. 北京:人民邮电出版社,2006. 544-548. 3 薛弘晔.微型计算机控件技术m西安:西安电子科技大学出版社,2003.4 黄文梅,杨勇.系统仿真分析与设计m长沙:国防科技大

温馨提示

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

评论

0/150

提交评论