1课程设计2一需求分析当前的社会处于数字化时代,无论在军事还是民用方面,对于数字信号处理的实时性、快速性的要求越来越高。越来越多的电子系统的实现都不可缺少的采用可数字滤波。数字滤波是数字信号分析中最重要的组成部分之一,数字滤波与模拟滤波相比,具有精度和稳定性高、系统函数容易改变、灵活性高、不存在阻抗匹配问题、便于大规模集成、可实现多维滤波等优点。数字滤波器的作用是利用离散时间系统的特性对输入信号波形(或频谱)进行加工处理,或者说利用数字方法按预定的要求对信号进行变换。把输入序列x(n)变换成一定的输出序列y(n)从而达到改变信号频谱的目的。从广义讲,数字滤波是由计算机程序来实现的,是具有某种算法的数字处理过程。滤波器在数值信号处理中有广泛的应用,为此我们将滤波器作简单介绍,达到抛砖引玉的作用。若滤波器的输入、输出都是离散时间信号,那么,该滤波器的冲击响应(或滤波因子)也必然是离散的,我们称这样的滤波器为数字滤波器。当用硬件实现一个数字滤波器时,所需的元件是延迟器、乘法器和加法器。当在计算机上用软件实现时,它就是一段线性褶积(或卷积)的程序。我们知道,模拟滤波器只能用硬件来实现。因此,数字滤波器的实现要比模拟滤波器容易的多,而且易获得较为理想的效果。实现数字化是控制系统的重要发展方向,而数字信号处理已在通信、语音、图像、自动控制、雷达、军事、航空航天等领域广泛应用。数字信号处理方法通常涉及变换、滤波、频谱分析、编码解码等处理。数字滤波是重要环节,它能满足滤波器对幅度和相位特性的严格要求,克服模拟滤波器所无法解决的电压和温度漂移以及噪声等问题。而有限冲激响应FIR滤波器在设计任意幅频特性的同时能够保证严格的线性相位特性。结合MATLAB工具软件的辅助设计,使得FIR滤波器具有快速、灵活、适用性强,硬件资源耗费少等特点。二设计内容用巴特莱特窗函数法设计一个数字FIR低通滤波器,要求通带边界频率为3400Hz,阻带边界频率为500Hz,通带最大衰减1dB,阻带最小衰减40dB,抽样频率为2000Hz,用MATLAB画出幅频特性,画出并分析滤波器传输函数的零极点;信号)2sin()2sin()()()(2121tftftxtxtx经过该滤波器,其中1f300Hz,2f600Hz,滤波器的输出)(ty是什么?用Matlab验证你的结论并给出)(),(),(),(21tytxtxtx的图形。三设计要求1.掌握用巴特莱特窗函数法设计数字FIR低通滤波器的原理和设计方法。2.掌握用Kaiser方程估计FIR数字滤波器长度的方法。3.求出所设计滤波器的Z变换。4.用MATLAB画出幅频特性图并验证所设计的滤波器。四设计概要1.设计FIR数字滤波器的基本方法:FIR数字滤波器的系统函数无分母,为1100()()NNiniiiHZbzhnz,系统频率响应可写成:10()()NjwjwnnHehne,令()jwHe=()()jwHwe,H(w)为幅度函数,()w称为相位函数。这与模和辐角的表示方法不同,H(w)为可为正可为负的实数,这是为了表达上的方便。如某系统频率响应()jwHe=sin4w3jwe,如果采用模和幅角的表示方法,sin4w的变号相当于在相位上加上(因-1=je),从而造成相位曲线的不连贯和表达不方便,用()()jwHwe则连贯而方便。窗函数法又称傅里叶级数法,其设计是在时域进行的。函数一般是无限长且非因果的,设计时需用一个合适的窗函数把它截成有限长的因果序列,使对应的频率响应(的傅里叶变换)尽可能好地逼近理想频率响应。窗函数法的主要缺点是:一、不容易设计预先给定截止频率的滤波器;二、满足同样设计指标的情况下所设计出的4滤波器的阶数通常偏大。2.FIR数字滤波器设计的基本步骤如下:(1)确定技术指标在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。在很多实际应用中,数字滤波器常被用来实现选频操作。因此,指标的形式一般在频域中给出幅度和相位响应。幅度指标主要以2种方式给出。第一种是绝对指标。他提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。第二种指标是相对指标。他以分贝值的形式给出要求。本文中滤波器的设计就以线性相位FIR滤波器的设计为例。(2)逼近确定了技术指标后,就可以建立一个目标的数字滤波器模型(通常采用理想的数字滤波器模型)。之后,利用数字滤波器的设计方法(窗函数法、频率采样法等),设计出一个实际滤波器模型来逼近给定的目标。(3)性能分析和计算机仿真上两步的结果是得到以差分或系统函数或冲激响应描述的滤波器。根据这个描述就可以分析其频率特性和相位特性,以验证设计结果是否满足指标要求;或者利用计算机仿真实现设计的滤波器,再分析滤波结果来判断。3.程序流程图开始↓读入窗口长度↓计算hd(n)(↓5调用窗函数子程序找w(n)↓计算h(n)=hd(n)w(n)↓调用子程序计算H(k)=DFT[h(n)]↓↓4.运行环境装MATLAB软件的PC机一台5.开发工具和编程语言MATLAB语言五源程序%实验设计程序如下:clc;fp=500;%通带截止频率fs=400;%阻带截止频率Fs=2000;%抽样频率Rp=1;%通带最大衰减Rs=40;%阻带最小衰减wp=2*pi*fp/Fs;%通带截止角频率ws=2*pi*fs/Fs;%阻带截止角频率i=1-10^(-Rp/20);%j=10^(-Rs/20);%N=kaiord(0.1087,0.0100,500,400,2000)n=-20*log(sqrt(i*j))-13;N=n/14.6/(wp-ws)*2*pifloor(N);N=76;wn=(wp+ws)/2/pi;调用绘图子程序绘制H(k)幅度相位曲线结束6b=fir1(N,wn,bartlett(N+1));figure(1)[h,w]=freqz(b,1,512,2000);g=20*log10(abs(h));plot(w,g);gridon;axis([01000-503]);xlabel('频率,Hz');ylabel('增益,dB')title('bartlettlowpassFilter');figure(2)zplane(b,1);xlabel('b');ylabel('a');title('传输零极点');f1=300;f2=600;n=0:600;t=n/10000;x1=sin(2*pi*f1*t);x2=sin(2*pi*f2*t);x=x1+x2;figure(3)subplot(2,1,1);plot(x1);gridon;axis([0,50*pi,-3,3]);xlabel('t');ylabel('x1');title('x1的波形');subplot(2,1,2);plot(x2);gridon;axis([0,50*pi,-3,3]);xlabel('t');ylabel('x2');title('x2的波形');figure(4)subplot(2,1,1);plot(x);gridon;axis([0,50*pi,-3,3]);xlabel('t');ylabel('x');title('输入x的波形');y=filter(b,1,x);subplot(2,1,2)plot(y);gridon;axis([0,50*pi,-5,5]);xlabel('t');ylabel('y');title('滤波器输出y的波形');7六运行结果01002003004005006007008009001000-50-45-40-35-30-25-20-15-10-50频率,Hz增益,dBbartlettlowpassFilter图1:巴特莱特窗函数法设计的数字FIR低通滤波器仿真图-1.5-1-0.500.51-1-0.500.5175ba传输零极点8图2:传输函数的零极点仿真图050100150-202tx1x1的波形050100150-202tx2x2的波形图3:x1、x2的波形9050100150-202tx输入x的波形050100150-505ty滤波器输出y的波形图4:输入输出波形七程序调试与分析通过翻书查资料编好程序后,运行的过程还是不尽人心出现很多问题。但通过请教老师和同学,最终还是将程序调试好。虽然程序调试的过程中也出现了许多的错误,特别是不同函数的运用,不过经过耐心的学习,最终还是得到了满意的结果。程序的运行结果如上图所示,通过图形我们可以清楚的看出滤波器的特性和功能。另外通过滤波器的零极点,我们还可以知道滤波器的传输特性。本次实验结果较好地反映出了用巴特莱特窗函数法设计数字FIR低通滤波器的特性,也基本上达到了课程设计的要求和初衷。八心得体会过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获龋最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后10在同学老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!另外,在学术知识方面。通过本次对FIR数字滤波器的设计,深刻的感知到MATLAB的强大,很多领域都可以用之作为仿真工具。这样的好工具应该好好利用起来,多掌握一些相关的知识,在以后的学习工作中兴许用得到。同时也加深了对数字滤波器的了解,对其的设计方法及各种性能指标都有一定的了解。复习了MATLAB编程语言的基本概念、语法、语义和数据类型的使用特点,加深了对课堂所学理论知识的理解,掌握了运用结构化程序设计的基本思想和方法,更重要的是培养了自己的自学能力。对于数字信号处理实际应用方面有了初步的认识,但是在编程方面任然不熟练,需要倚仗大量的资料和老师同学的帮助,以后应加强练习。在实验中遇到很多调试中的问题,大多是因为对MATLAB软件不熟悉,很多学过的东西都忘记了,通过此次课程设计,使我更加扎实的掌握了有关数字信号处理方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。这次课程设计让我看到自己这么多的不足,发现很多有价值的东西,培养了我如何去学习和掌握新知识的能力,这对以后的学习和工作都有很大的帮助。也使我认识到学到的课本知识要与实践相结合还是需要下功夫练习的。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。11九参考文献1、程佩青著,《数字信号处理教程》,清华大学出版社,20012、SanjitK.Mitra著,孙洪,余翔宇译,《数字信号处理实验指导书(MATLAB版)》,电子工业出版社,2005年1月3、郭仕剑等,《MATLAB7.x数字信号处理》,人民邮电出版社,2006年4、胡广书,《数字信号处理理论算法与实现》,清华大学出版社,2003年5、张平主编,《MATLAB基础与应用》.北京:北京航空出版社,20076、刘泉,阙大顺主编.《数字信号处理原理与应用》.西安电子工业出版社,2005