您好,欢迎访问三七文档
北华航天工业学院课程设计报告(论文)设计课题:数字滤波系统设计专业班级:B12222学生姓名:张超李永猛指导教师:齐建玲设计时间:2015年7月1号北华航天工业学院电子工程系计算机控制技术课程设计任务书姓名:张超李永猛专业:自动化班级:B12222指导教师:齐建玲职称:教授课程设计题目:数字滤波系统设计已知技术参数和设计要求:1.利用MATLAB生成一个含随机扰动的正弦信号,在一个周期内采集256个点,并存在RAM里。也可通过ADC模块进行数据采集获得。2.对上述信号进行数字滤波处理,可以采用下述滤波算法:(1)加权平均值滤波(2)中位值滤波法(3)限幅滤波(4)惯性滤波3.用虚拟示波器现实滤波前后的波形,分析滤波算法的特点。4.用单片机做控制微机;5.完成设计报告所需软件和硬件器件:keiluVision编程仿真软件,ProteusPro7.8仿真软件,单片机AT89C51,AD转换器ADC0808,数模转换器DAC0832,运算放大器UA741,开关,示波器,信号发生器。成果验收形式:验收结果,答辩原理,改进方案。参考文献:计算机控制技术(机械工业出版社于海生等编著)C语言程序设计(第2版清华大学出版社谭浩强主编)单片机原理及应用(机械工业出版社第二版)时间安排2015年7月1日开始2015年7月3日验收答辩指导教师:齐建玲教研室主任:2015年7月3日内容摘要数据采集,又称数据获取,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口。数据采集技术广泛引用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生了重要的变化。而在数据采集中存在着各种噪声。滤除噪声的方法有很多种,既有数字滤波器,也有模拟滤波器。这里我们采用了基于单片机和C语言来设计并开发数字滤波系统。我们针对于单片机数据采集系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的C程序,同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。另外我们使用了proteus进行仿真验证这几种滤波方法。另外我们还使用了AD和DA来采集及输出数据。目录一概述二方案设计三单元电路设计与参数计算四总原理图及元器件清单五滤波算法介绍及程序六仿真结果及分析七结论八心得体会九参考文献一、概述我们针对于单片机数据采集系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的C程序。同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。另外我们使用了proteus进行仿真验证这几种滤波方法。另外我们还使用了AD和DA来采集及输出数据。二、方案设计生活中数字滤波方法有很多种,在这次设计中我们用了四种,分别为:限速滤波、中值滤波、算动平均值滤波和加权平均滤波。通过C语言编程实现滤波算法。硬件上我们用51系列单片机——AT89C51,利用这个单片机进行编程,实现对输入信号的滤波,并实现控制。另外我们还使用了ADC0808进行数据采集,这里AD0808是并联AD转换器,输入信号由时钟信号和正弦信号通过加法器合成输入到AD转换器。然后用DAC0832来进行数模转换,DAC0832输出的是电流,要利用运算放大器转换成电压,通过示波器显示出波形。此外,我们让单片机外接四个开关,通过程序用开关控制具体使用哪种滤波方式。三、单元电路设计与参数计算1.单片机AT89C51我们使用了P0口作为接受AD转换的结果的端口,而P1口则输出数据到DA转换器。另外还利用了P2作为控制端口,P2.0-P2.2用来控制AD转换器,而P2.3-P2.6外接四个开关,用来实现滤波方式的选择。2.数据采集图1ADC0808的引脚图数据采集用的是ADC0808,引脚图如上所示。其中IN0-IN8是八个模拟量输入端口,AD0808可以一次对八个模拟量进行模数转换,但是在这里我们只使用了其中的一个输入端IN0,所以ADDDA、ADDB、ADDC都应为0,所以我让它们都接地。它的八个输出端接在单片机上,CLOCK接数据采样时钟,它可以接在单片机上由单片机控制,也可接在另外的数字时钟上,这里我选用外接别的时钟。START为转换启动信号,在其上跳变时,所有内部寄存器清零,在其下调变时,开始进行AD转换。ALE是地址锁存信号。这里我让START和ALE均接在单片机的同一个端口上,即P2.1,让单片机实现程序控制AD的转换。OE是输出允许信号,OE=1时,才能允许输出,这里我让它也接在单片机的端口P2.1上,也是为了让单片机实现程序控制AD0808的输出。EOC是转换结束信号,EOC=1时,表示转换结束。这个信号可以用来提醒单片机AD已经转换完毕,程序中即可以用查询方式,也可以用中断方式,这里我使用查询方式,所以把它接在P2.2上。VREF(+)和VREF(-)都是参考电压信号端口,这里我让VREF(-)的参考电压为零,VREF(+)的参考电压为+3V。3.数模转换输出。DAC0832的引脚图如图所示我们用了DAC0832来进行数模转换。DAC0832有三种数模转换方法,直通方式、单缓冲方式、双缓冲方式,因为单片机输出后可以直接进行数模转换,所以这里我采用了不需要单片机控制的最为简单的直通方式,但是DA0832若用于直通方式,则在接单片机的输出端口之间还要接一个缓冲器件,如74LS373。但是我们并没有加这个锁存器,信号一直输入,导致滤波效果有些差。用于直通方式下,则WR1、WR2、CS和GND均接地,而VCC和ILE则接正电源。VREF是参考电源。IOUT1、IOUT2是两个输出端。DA0832输出的是电流,要利用运算放大器转换成电压。数模转换输出电路如下图所示:四、总原理图及元器件清单1.总原理图2.元件清单元件序号型号主要参数数量备注单片机AT89C511AD转换器ADC08081DA转换器DAC08321运算放大器UA7411开关SW—SPST4电阻RES10k4示波器1加法器OP:ADD1五、算法程序及总程序1.限速滤波限速滤波的基本原理是把两次相邻时刻(n和n-1)的采样值Yn和Yn-1相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值ΔY比较,如果两次采样值的差值超过了允许的最大偏差值ΔY,则认为发生了随机干扰,并认为最后一次采样值Yn非法,应予剔除。剔除Yn后,可用Yn-1代替Yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。可用如下公式表示:|Yn-Yn-1|≤ΔY;则Yn有效|Yn-Yn-1|>ΔY;则Yn-1有效此算法的样例子程序如下:#defineA10//A值可根据实际情况调整ucharfilter1(){ucharnew_value,value;//新的数据和上一次的数据value=get_data(N-2);new_value=get_data(N-1);//获得新数据if((new_value-valueA)||(value-new_valueA))returnvalue;returnnew_value;}2.中值滤波中位值滤波是先对某一参数连续采样N次(一般N取奇数),然后把N次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换。此算法的样例子程序如下ucharfilter2(){ucharvalue_buff[N],temp;//定义存储数据的数组intcount,i,j,k;for(count=0;countN;count++)//获取数据{value_buff[count]=get_data(count);}for(j=0;jN-1;j++)//用冒泡法对数据进行排序,当然最好用其他排序方法{k=j;for(j=i+1;jN;j++)if(value_buff[j]value_buff[k])k=j;{temp=value_buff[k];value_buff[k]=value_buff[i];value_buff[i]=temp;}}returnvalue_buff[(N-1)/2];}3.算数平均值滤波算术平均滤波法适用于对一般的具有随机干扰的信号进行滤波。这种信号的特点是信号本身在某一数值范围附近上下波动,如测量流量、液位时经常遇到这种情况。算术平均滤波法是要按输入的N个采样数据,寻找这样一个Y,使得Y与各个采样值之间的偏差的平方和最小。具体实现此算法的子程序如下:ucharfilter3(){ucharvalue_buff[N];inti=0;intcount;intsum=0;value_buff[i++]=get_data(count);if(i==N)i=0;for(count=0;countN;count++)sum+=value_buff[count];return(uchar)(sum/N);}return(uchar)(sum/N);}算术平均滤波适用于对一般具有随机干扰的信号进行滤波。这种信号的特点是有一个平均值,信号在某一数值范围附近做上下波动,在这种情况下仅取一个采样值做依据显然是不准确的。算术平均滤波对信号的平滑程序完全取决于N,当N较大时,平滑度高,但灵敏度低;当N较小时,平滑度低,但灵敏度高,应视具体情况选取N,以便既少占用计算时间,又达到最好的效果。总程序及流程图如下:#includereg51.h#includeabsacc.h#defineucharunsignedchar#defineA0.93#defineN30sbitcon1=P2^3;sbitcon2=P2^4;sbitcon3=P2^5;sbitcon4=P2^6;sbitOE=P2^0;sbitSTART=P2^1;sbitEOC=P2^2;uchara;ucharbuf[N]={0};voidchange(){inti;for(i=0;iN-1;i++)buf[i]=buf[i+1];buf[N-1]=a;}ucharget_data(n){change();returnbuf[n];}//限速滤波ucharfilter1(){ucharnew_value,value;value=get_data(N-2);new_value=get_data(N-1);if((new_value-valueA)||(value-new_valueA))returnvalue;returnnew_value;}//中值滤波ucharfilter2(){ucharvalue_buff[N],temp;//定义存储数据的数组intcount,i,j,k;for(count=0;countN;count++)//获取数据{value_buff[count]=get_data(count);}for(j=0;jN-1;j++)//用冒泡法对数据进行排序,当然最好用其他排序方法{k=j;for(j=i+1;jN;j++)if(value_buff[j]value_buff[k])k=j;{temp=value_buff[k];value_buff[k]=value_buff[i];value_buff[i]=temp;}}returnvalue_buff[(N-1)/2];}//算数平均滤波ucharfilter3(){ucharvalue_buff[N];inti=0;intcount;intsum=0;value_buff[i++]=get_data(count);if(i==N)i=0;for(count=0;countN;
本文标题:数字滤波系统设计
链接地址:https://www.777doc.com/doc-5839839 .html