防脉冲干扰移动平均值法数字滤波器算法及其程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

皖西学院1皖西学院课程设计报告书系别:机电系专业:电气技术与自动化学生姓名:孙星月学号:2008010782课程设计题目:防脉冲干扰移动平均值法数字滤波器算法及其程序设计起迄日期:6月12日~6月25日课程设计地点:计算机房指导教师:杜成涛设计任务完成日期:2011年6月23日皖西学院2皖西学院课程设计任务2010-2011学年第2学期专业电气工程及其自动化班级0802课程名称微型计算机原理与接口技术课程类别必修设计时间2011年6月13日——2011年6月26日一、课程题目:防脉冲干扰移动平均值法数字滤波器算法及其程序设计二、课程设计目的:微机应用课程设计电气工程及其制动化专业本科生重要的实践环节,在学习了与修课程的基础上,综合运用各种所学的软件,通过学生独立进行某一课题的设计和调试,理解和掌握相关软件的使用方法,运用软件的理论和方法,初步掌握汇编程序以及其他使用软件的设计方法和步骤,培养独立思考,深入研究,分析问题,解决问题的能力。熟悉所采用汇编语言基础知识,基本编程方法和技巧,设计出课题所要求的算法并编程实现。三、设计任务概述:1.熟悉设计任务,查找资料熟悉相关设计的方法2.选择最佳的设计方案3.程序编写及调试4.撰写设计报告,调试报告,设计心得体会四、设计计划与时间安排:防脉冲干扰移动平均值法数字滤波器算法及其程序设计主要内容包括:理论设计、调试或仿真、撰写设计报告等。其中理论设计又包括选择总体方案、软件系统设、计算参数等;软件设计包括模块化层次结构图,程序流程图。程序设计是课程设计的关键环节,通过调试进一步完善程序设计,使之达到课题所要求的指标。课程设计的最后要求是写出设计总结报告,把理论设计内容,调试的过程及性能指标的测试结果进行全面的总结,把实践内容上升到理论高度。皖西学院3目录一、课程任务............................................................................................................................2二、摘要....................................................................................................................................4三、算法设计............................................................................................................................4四、软件编程............................................................................................................................5五、程序调试..........................................................................................................................11六、设计心得..........................................................................................................................12七、参考文献..........................................................................................................................14防脉冲干扰移动平均值法数字滤波器算法及其程序设计皖西学院4摘要数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛引用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生了重要的变化。而在数据采集中存在着各种干扰。滤除干扰的方法有很多种,既有数字滤波器,也有模拟滤波器。我们针对数据采集系统中经常出现的随机干扰,这里我们采用了C语言来设计并开发数字滤波系统。关键词:C语言、数字滤波。算法设计在许多的数据采集系统中,现场的强电设备较多,不可避免地会产生尖脉冲干扰,这种干扰一般持续时间短,峰值大,对这样的数据进行数字滤波处理时,仅仅采用算术平均或移动平均滤波时,尽管对脉冲干扰进行了1/n的处理,但,其剩余值仍然较大。这种场合最好的策略是:将被认为受干扰的信号数据去掉,这就是防脉冲干扰平均值滤波法的原理。算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。算术平均滤波法是要按输入的N个采样数据,寻找这样一个Y,使得Y与各个采样值之间的偏差的平方和最小。具体实现此算法的程序如下:#defineN12charfilter(){intcount;intsum=0;皖西学院5for(count=0;countN;count++){sum+=get_ad();delay();对连续的n个数据进行排序,去掉其中最大和最小的2个数据,将剩余数据示平均值。在一般8051单片机的应用中为了加快数据处理速度,n可以取值6。而对于具有较快速度的处理器,则n值可以适当取大一些。但最好是n=2^k+2,k为整数,因为这样在求平均值average=SUM/(n-2)=SUM/2^k时可以写成average=SUMk,用移位的方法,可以加快处理速度。上述算法显然还存在一个不足之处,就是每采集一个数据就要进行一次排序,这样会大量占用系统宝贵的时间。这可以通过存储当前数据中的最大值和最小值来改进。具体做法是:系统中用两个变量来存储当前n个数据的最大值和最小值在这个数组中的偏移量(也就是数组下标,存储数组下标而直接不存储数据本身是因为:在一般的系统中,n不会超无符号短整形的表示范围,因此用一个char形变量就可以存储而如果直接存储数据本身,则许多情况下要用int形变量,甚至更长的类型)。这样只要在当前输入的数据将要覆盖的数据正好是当前的最大值或最小值时才在下个组中查找最大值或最小值,而其他情况下则只要将输入的数据与最大值和最小值比较就可以修改下最大值和最小值了,而且不用进行数据排序。这个算法很简单,下面是对应的C语言代码实现,可以很方便的应用的具体的51单片机,或其他处理器上,只须做少量的修改。软件编程皖西学院61、软件设计步骤皖西学院72、程序流程图皖西学院82、软件程序#includestdio.h#definedtypeunsignedint//采集数据的数据类型#defineLEN6//移动算术平均的个数+2=SHIFT2+2#defineSHIFT2//2^SHIFTcharpdata;//移动指针charpmax,pmin;//记录数据表中最大值和最小值的位置,dtypedatas[LEN];//在一般的数据采集系统中,数据的长度=8,因此用指针记录而不是直接记录最大值和最值dtypeszlb(dtype_data)/****************************//*在调用此子程序前必须对*//*pdata,datas[]数组,*//*pmax,pmin进行初始化*//****************************/{chari;dtypeaverage=0;//清零,用来计算平均值pdata=(pdata+1)%LEN;//指针下标在到LEN-1上滑动datas[pdata]=_data;//采样所得数据存入数据表中皖西学院9for(i=0;iLEN;i++)average+=datas[i];//求所有数据总和/*******去除被认为是脉冲的数据******/if(_datadatas[pmax])pmax=pdata;//得到最大值的指针elseif(_datadatas[pmin])pmin=pdata;//得到最小值的指针if(pdata==pmax)//如果当前输入值将存入当前最大值的位置时{//由以上方法将不可行,必须从其他位置中查找极值for(i=0;iLEN;i++)if(datas[i]datas[pmax])pmax=i;}elseif(pdata==pmin)//如果当前输入值将存入当前最小值的位置时{//由以上方法将不可行,必须从其他位置中查找极值for(i=0;iLEN;i++)if(datas[i]datas[pmin])//减去脉冲pmin=i;}average=average-datas[pmax]-datas[pmin];return(averageSHIFT);//求算术平均值}voidmain(){chari;dtype_data;pdata=0;pmax=0;皖西学院10pmin=0;for(i=0;iLEN;i++)datas[i]=0;printf(数据:最大最小\n);while(1){scanf(%u,&_data);szlb(_data);for(i=0;iLEN;i++)printf(%-3u,datas[i]);printf(%-3u%-3u,datas[pmax],datas[pmin]);printf(\n);}}程序调试皖西学院11皖西学院12设计心得这次整个课程设计通过了软件调试。我想这对于自己以后的学习和工作都会有很大的帮助。在这次设计中遇到了很多实际性的问题,在实际设计中才发现,书本上理论性的东西与在实际运用中的还是有一定的出入的,所以有些问题不但要深入地理解,而且要不断地更正以前的错误思维。一切问题必须要靠自己一点一滴的解决,而在解决的过程当中你会发现自己在飞速的提升。对于防脉冲干扰移动平均值法数字滤波器算法及其程序设计,其程序不是很难的,主要是解决程序设计中的问题,而程序设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力,它才是一个设计的灵魂所在。因此在整个设计过程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样衔接各个子程序才是关键的问题所在,这需要对系统的结构很熟悉。因此可以说系统的设计是软件和硬件的结合,二者是密不可分的。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。这也激发了我今后努力学习的兴趣,我想这将对我以后的学习产生积极的影响。其次,这次课程设计让我充分认识到要学会借鉴别人的思想的重要性,很多时候你做的东西别人也许已经做出来了,我们可以直接拿来用。虽然这不好,又偷懒的嫌疑,但是这却加快了效率,而且,以后再研究中也要实时关注新的东西,如果你花了很多时间和精力做的东西,已经早有人做了,这就很得不偿失了。俗话说“三人行必有我师”嘛,更何况是这么多人的思想,这也是一种学习的方法。另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名电气工程专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功