数字滤波系统设计课程设计报告

上传人:san****glu 文档编号:31351456 上传时间:2018-02-07 格式:DOC 页数:20 大小:1.30MB
返回 下载 相关 举报
数字滤波系统设计课程设计报告_第1页
第1页 / 共20页
数字滤波系统设计课程设计报告_第2页
第2页 / 共20页
数字滤波系统设计课程设计报告_第3页
第3页 / 共20页
数字滤波系统设计课程设计报告_第4页
第4页 / 共20页
数字滤波系统设计课程设计报告_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《数字滤波系统设计课程设计报告》由会员分享,可在线阅读,更多相关《数字滤波系统设计课程设计报告(20页珍藏版)》请在金锄头文库上搜索。

1、北 华 航 天 工 业 学 院课程设计报告(论文)设计课题: 数字滤波系统设计 专业班级: B12222 学生姓名: 张超 李永猛 指导教师: 齐建玲 设计时间: 2015 年 7 月 1 号 北华航天工业学院AA工AA计算机控制技术课程设计任务书姓 名: 张超李永猛专 业: 自动化 班 级: B12222指导教师: 齐建玲 职 称: 教 授课程设计题目:数字滤波系统设计已知技术参数和设计要求:1利用 MATLAB 生成一个含随机扰动的正弦信号,在一个周期内采集 256 个点 ,并存在 RAM 里。也可通过 ADC 模块进行数据采集获得。2对上述信号进行数字滤波处理,可以采用下述滤波算法:(1

2、) 加权平均值滤波 (2) 中位值滤波法(3) 限幅滤波(4) 惯性滤波3用虚拟示波器现实滤波前后的波形,分析滤波算法的特点。4用单片机做控制微机;5完成设计报告所需软件和硬件器件:keil uVision 编程仿真软件,Proteus Pro7.8 仿真软件,单片机 AT89C51,AD 转换器 ADC0808,数模转换器 DAC0832,运算放大器UA741,开关,示波器,信号发生器。成果验收形式:验收结果,答辩原理,改进方案。参考文献:计算机控制技术 (机械工业出版社 于海生等编著)C 语言程序设计(第 2 版 清华大学出版社 谭浩强主编)单片机原理及应用(机械工业出版社 第二版)时间安

3、排2015 年 7 月 1 日开始2015 年 7 月 3 日验收答辩指导教师:齐建玲 教研室主任: 2015 年 7 月 3 日内 容 摘 要数据采集,又称 数据获取 ,是利用一种装置,从系统外部采集数据并输入到系统内部的一个接口 。数据采集技术广泛引用在各个领域。比如摄像头,麦克风,都是数据采集工具。被采集数据是已被转换为电讯号的各种物理量,如温度、水位、风速、压力等,可以是模拟量,也可以是数字量。在互联网行业快速发展的今天,数据采集已经被广泛应用于互联网及分布式领域,数据采集领域已经发生了重要的变化。而在数据采集中存在着各种噪声。滤除噪声的方法有很多种,既有数字滤波器,也有模拟滤波器。这

4、里我们采用了基于单片机和 C语言来设计并开发数字滤波系统。我们针对于单片机数据采集系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的 C 程序,同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。另外我们使用了 proteus 进行仿真验证这几种滤波方法。另外我们还使用了 AD 和 DA来采集及输出数据。目 录一 概 述 二 方案设计三 单元电路设计与参数计算 四 总原理图及元器件清单五 滤波算法介绍及程序六 仿真结果及分析七 结论八 心得体会九 参考文献一、概述 我们针对于单片机数据采集

5、系统中经常出现的随机干扰,通过手动输入来模拟数据采集过程,验证了几种使用较为普遍的克服随机干扰的单片机数字滤波算法,并给出了相应的 C 程序。同时也对这几种滤波算法进行了比较,并指出了每一种算法的具体适用范围和注意事项。另外我们使用了 proteus 进行仿真验证这几种滤波方法。另外我们还使用了 AD 和 DA 来采集及输出数据。二、方案设计生活中数字滤波方法有很多种,在这次设计中我们用了四种,分别为:限速滤波、中值滤波、算动平均值滤波和加权平均滤波。通过 C 语言编程实现滤波算法。硬件上我们用 51 系列单片机AT89C51,利用这个单片机进行编程,实现对输入信号的滤波,并实现控制。另外我们

6、还使用了 ADC0808 进行数据采集,这里 AD0808 是并联 AD 转换器,输入信号由时钟信号和正弦信号通过加法器合成输入到 AD 转换器。然后用 DAC0832 来进行数模转换,DAC0832 输出的是电流,要利用运算放大器转换成电压,通过示波器显示出波形。此外,我们让单片机外接四个开关,通过程序用开关控制具体使用哪种滤波方式。三、单元电路设计与参数计算1. 单片机 AT89C51我们使用了 P0 口作为接受 AD 转换的结果的端口,而 P1 口则输出数据到 DA 转换器。另外还利用了 P2 作为控制端口,P2.0-P2.2用来控制 AD 转换器,而 P2.3-P2.6 外接四个开关,

7、用来实现滤波方式的选择。. 数据采集图1 ADC0808的引脚图数据采集用的是 ADC0808,引脚图如上所示。其中 IN0-IN8是八个模拟量输入端口,AD0808可以一次对八个模拟量进行模数转换,但是在这里我们只使用了其中的一个输入端 IN0,所以ADDDA、ADDB、ADDC 都应为0,所以我让它们都接地。它的八个输出端接在单片机上,CLOCK 接数据采样时钟,它可以接在单片机上由单片机控制,也可接在另外的数字时钟上,这里我选用外接别的时钟。START 为转换启动信号,在其上跳变时,所有内部寄存器清零,在其下调变时,开始进行 AD 转换。ALE 是地址锁存信号。这里我让START 和 A

8、LE 均接在单片机的同一个端口上,即 P2.1,让单片机实现程序控制 AD 的转换。OE 是输出允许信号,OE=1时,才能允许输出,这里我让它也接在单片机的端口 P2.1上,也是为了让单片机实现程序控制 AD0808的输出。EOC 是转换结束信号,EOC=1时,表示转换结束。这个信号可以用来提醒单片机 AD 已经转换完毕,程序中即可以用查询方式,也可以用中断方式,这里我使用查询方式,所以把它接在 P2.2上。VREF(+)和 VREF(-)都是参考电压信号端口,这里我 让 VREF(-)的参考电压为零,VREF(+)的参考 电压为+3V。. 数模转换输出。DAC0832的引脚图如图所示我们用了

9、 DAC0832 来进行数模转换。DAC0832 有三种数模转换方法,直通方式、单缓冲方式、双缓冲方式,因为单片机输出后可以直接进行数模转换,所以这里我采用了不需要单片机控制的最为简单的直通方式,但是 DA0832 若用于直通方式,则在接单片机的输出端口之间还要接一个缓冲器件,如 74LS373。但是我们并没有加这个锁存器,信号一直输入,导致滤波效果有些差。用于直通方式下,则 WR1、WR2、CS 和 GND 均接地,而 VCC 和 ILE 则接正电源。VREF是参考电源。IOUT1、IOUT2 是两个输出端。DA0832 输出的是电流,要利用运算放大器转换成电压。数模转换输出电路如下图所示:

10、四、总原理图及元器件清单1总原理图2元件清单元件序号 型号 主要参数 数量备注单片机 AT 89C51 1AD 转换器 ADC0808 1DA 转换器 DAC0832 1运算放大器 UA741 1开关 SWSPST 4电阻 RES10k 4示波器 1加法器 OP:ADD 1五、算法程序及总程序1.限速滤波限速滤波的基本原理是把两次相邻时刻(n 和 n-1)的采样值 Yn和 Yn-1 相减,求出其差值,以绝对值表示,然后将这个差值与两次采样允许的最大偏差值 Y 比较,如果两次采样值的差值超过了允许的最大偏差值 Y,则认为发生了随机干扰,并认为最后一次采样值 Yn 非法,应予剔除。剔除 Yn 后,

11、可用 Yn-1 代替 Yn;若未超过允许的最大偏差值范围,则认为本次采样值有效。可用如下公式表示:|Yn-Yn-1|Y;则 Yn 有效|Yn-Yn-1|Y;则 Yn-1 有效此算法的样例子程序如下:#define A 10 /A 值可根据实际情况调整uchar filter1() uchar new_value,value; /新的数据和上一次的数据value=get_data(N-2); new_value = get_data(N-1); /获得新数据if ( ( new_value - value A ) | ( value - new_value A ) )return value;

12、return new_value; 2.中值滤波中位值滤波是先对某一参数连续采样 N 次(一般 N 取奇数) ,然后把 N 次采样值按从小到大排列,取中间值为本次采样值。该滤波方法实际上是一种排序方法,我在此采用的是冒泡法排序。由于在冒泡法排序中,每出现一次前者数据大于后者数据,就要进行二者数据的交换。此算法的样例子程序如下uchar filter2()uchar value_buffN,temp; /定义存储数据的数组int count,i,j,k;for(count=0;count#include #define uchar unsigned char#define A 0.93#defi

13、ne N 30sbit con1 = P23;sbit con2 = P24;sbit con3 = P25;sbit con4 = P26;sbit OE = P20;sbit START = P21;sbit EOC = P22;uchar a;uchar bufN =0;void change()int i;for(i=0;i A ) | ( value - new_value A ) )return value; return new_value; /中值滤波uchar filter2()uchar value_buffN,temp; /定义存储数据的数组int count,i,j,k

14、;for(count=0;countN;count+) /获取数据value_buffcount=get_data(count);for(j=0;jN-1;j+) /用冒泡法对数据进行排序,当然最好用其他排序方法 k=j;for(j=i+1;jN;j+)if(value_buffjvalue_buffk) k=j;temp=value_buffk;value_buffk=value_buffi; value_buffi=temp;return value_buff(N-1)/2;/算数平均滤波uchar filter3()uchar value_buffN;int i=0;int count;

15、int sum=0;value_buffi+=get_data(count);if(i=N)i=0;for(count=0;countN;count+)sum+=value_buffcount;return (uchar)(sum/N);/加权递推平均滤波uchar filte4() uchar code coeN = 1,1,1,20,20,20,40,40,40,40,200; uchar code sum_coe = 1+1+1+20+20+20+40+40+40+40+200; uchar count; uchar value_bufN; int sum=0; for (count=0;countN;count+) value_bufcount = get_data(count); for (count=0;countN;count+) sum += value_bufcount*coecount; return (uchar)(sum/sum_coe); uchar ADC0808_READ(void)uchar res;START = 0

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 研究报告 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号