1、第一章 概述 1.1 FIR、IIR概述数字滤波器是指输入输出均为数字信号,通过一定的运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分的器件。数字滤波器与模拟滤波器相比数字滤波器具有精度高、稳定、体积小、重量小、灵活等特点。主要分为两种:有限脉冲响应FIR和无限脉冲响应IIR。设计滤波器的主要要求有两种,一是幅频特性,一是相频特性。一般的滤波器主要是对幅频特性作出要求,如果对输出相频特性也有要求,就需要用到线性相位滤波器。IIR滤波器的设计主要有两类,一是借助于模拟滤波器设计进行,二是直接在频域或时域中进行设计。FIR滤波器的设计不能借助于模拟滤波器,也有两类设计方法,一是窗函数
2、法,二是频率采样法。还有一种比较有效的方法是切比雪夫等波纹逼近法,需通过计算机辅助进行。1.2题目要求设计一个工作流程如图所示的信号滤波演示系统: 图2 滤波演示图 信号发生器根据信号选择分为两大类: 静态型:直接输入(或从文件读取)测试信号序列; 动态型:输入由多个不同频率正弦信号叠加组合而成的模拟信号公式采样频率(Hz)以及采样点数,动态生成该信号的采样序列,作为测试信号。 DFT 频谱分析使用DFT 对产生的测试信号进行频谱分析并展示其幅频、相频特性,指定需要滤除或保留的频带,通过选择滤波器类型(IIR/FIR),确定对应的滤波器(低通、高通、带通、带阻)技术指标。 滤波器设计根据IIR
3、/FIR 数字滤波器技术指标设计滤波器,生成相应的滤波器系数,并展示对应的滤波器幅频(衰减)、相频特性。 IIR DF 设计:使用双线性变换法,可选择滤波器基型(巴特沃斯或切比雪夫型); FIR DF 设计:使用窗口法,可选择窗口类型。 数字滤波根据设计的滤波器系数,对测试信号进行滤波。 IIR DF:要求通过差分方程迭代实现滤波,未知初值置零处理; FIR DF:要求通过快速卷积实现滤波。可以选择使用重叠相加或重叠保留法进行卷积运算,并动态展示卷积运算的详细过程。 输出信号分析展示滤波后信号的幅频与相频特性,分析是否满足滤波要求。对同一滤波要求,根据输出信号频谱,对比分析各类滤波器的差异。为
4、便于分析,对(2)(5)中所涉及的频率均做对折叠频率的归一化处理。将一段语音作为测试信号,通过频谱展示和语音播放,对比分析滤波前后语音信号的变化,进一步加深对数字信号处理的理解。第二章 设计分析2.1算法分析此题目的实现可分为三个某块的设计实现:输入信号模块,设计滤波器模块,滤波模块。首先明确各模块间的数据依赖关系:在输入信号模块得到信号后,对信号进行频域分析,从而确定滤波器的相关技术指标,根据滤波器的技术指标与类型,在滤波器设计模块完成滤波器的设计,然后将滤波器的设计结果传递给滤波模块,滤波模块同时接收输入信号,从而通过运算,实现信号的滤波处理。从数据传递关系上分析,滤波模块的实现依赖于其他
5、模块的数据输出,因此放在最后设计。先设计输入模块。因为此设计相对复杂,分模块设计,通过参数传递和接口实现分模块设计即检验,提高程序的稳定性与健壮性。输入的实现可以有两种方式:静态输入和动态输入。静态输入选择从文本输入数据,将信号取样值以矩阵的形式存放在文本中。采用文件的读取就可以实现,比较容易。动态输入,即输入由一系列频率的正弦信号相加的组成的信号,需要经过采样的,注意在设置采样频率时一定要符合奈奎斯特准则,提高采样点数,增加频谱分辨率。最后输出一采样信号向量,传递给其余两模块。滤波器的设计,通过输入信号的频谱分析,设置滤波器的参数,然后才可以设计滤波器。第一步需要总结设计滤波器需要哪些参数,
6、通过学习可以总结,所有滤波器的参数有四个:通带截止频率、阻带截止频率、通带最大衰减、阻带最小衰减。对滤波器的设计分两类:FIR和IIR,二则所需的函数及设计方法不同。IIR采用借助于模拟滤波器的方式,包括巴特沃斯滤波器和切比雪夫滤波器两种类型。FIR采用窗函数方式,有矩形窗、三角窗、汉明窗、汉宁窗、布莱克曼和凯塞窗。通过调用不同的函数来实现滤波器的设计。特别在实现窗函数滤波器时,各个函数的主要区别是不同的频率采样,可以通过选择结构实现,简化程序。通过滤波器的设计最后可以得到滤波器的系统函数的系数。分析滤波器的幅频特性和相频特性,如果不符合要求重新设定滤波器参数或者换成其他滤波器类型。如果性能符
7、合要求,则将系数传递给滤波模块。滤波模块不调用滤波函数,实现滤波功能根据滤波器类型的不同,有两种方式可以选择,一种是通过差分方程运算,一种是通过线性卷积运算。前者适合对IIR滤波器进行滤波,后者适合对FIR滤波器进行滤波。且线性卷积为实现对长序列的卷积运算,采用重叠相加法,采用动态变化展示运算过程。2.2 在matlab中实现的分析输入模块通过读取文件和直接输入数据运算可以很容易实现。在输入信号确定后,要对其进行频谱分析,从而确定滤波器的参数和类型(低通、高通、带通、带阻),此模块作用也就完成,将数据分别用全局变量传递给下面的模块。滤波器的设计,巴特沃斯和切比雪夫的滤波函数调用为:N,Wc=b
8、uttord(wp,ws,rp,rs); N,Wc=cheb1ord(wp,ws,rp,rs);B,A=butter(N,Wc,property); B,A=cheby1(N,rp,Wc,property);property对于低通和高通为,带通high,带阻stop;窗函数滤波器设计的调用函数:求窗函数的阶数:N=ceil(h*pi)/wdel);%wdel为窗函数的过渡带宽,h对应不同窗函数的值wn=boxcar(N+1); wn=triang(N+1); wn=hanning(N+1);wn=hamming(N+1); wn=blackman(N+1);wn=kaiser(N+1,bet
9、a);%bata为kaiser的a参数B=fir1(N,ws,property,wn);需要注意的是,窗函数对滤波参数的使用,需要通过运算得到一窗函数阶数,对通带最大衰减无使用。需要注意FIR和IIR对参数的不同利用。滤波模块:运用差分方程运算的滤波函数,可以用循环调用简单实现。动态展示线性卷积的重叠相加法可以用流程图来说明: 图5 重叠相加法流程图第三章 MATLAB程序实现3.1 程序主体介绍此程序界面也是采用GUI,不过是采用图形用户界面开发环境。和第一个对比,布局更加容易,很容易调整界面。但是在一些函数操作行会受一些限制,比如函数参数的传递,目前来说还是采用全局变量才能完成。pushb
10、utton1_Callback(hObject, eventdata, handles)%获得输入信号uipanel11_SelectionChangeFcn(hObject, eventdata, handles)%获取滤波器的设计参数uipanel15_SelectionChangeFcn(hObject, eventdata, handles)%设计滤波器pushbutton4_Callback(hObject, eventdata, handles)%进行滤波以上是一些功能控件,需要注意的是他们的view ballcak属性,对于groupbutton一组按钮,需要选用Selectio
11、nChangeFcn,其余选择callback属性即可。另外,handles函数作用为传递的句柄,是一结构体,调用时注意此处。其余和直接用函数创建GUI界面无太大区别。图14 信号滤波演示的界面3.2 子程序k=select2(ha1,ha2,ha3,ha4,ha5,ha6,ha7,ha8)%识别不同的按键ws wp rp rs=renum(ha1,ha2,ha3,ha4,ha5,ha6)%获取输入信号B A=hbutter(wp,ws,rp,rs,t1,fs)%butter滤波器设计B A=hcheby(wp,ws,rp,rs,t1,fs)%cheby滤波器设计B,A=hwindow(wp,
12、ws,rp,rs,t2,t1,fs)%6种窗函数滤波器的设计 y=overplus(ory,B,Np,ha1)%重叠相加法y=proy(ory,B,A)%查分方程滤波3.3 程序调试1、在选择使用groupbutton时,需要使用SelectionChangeFcn才能正确,否则会有错误提示。2、进行滤波器调用时,参数的调用需要特别注意3、进行重叠相加法时,图形的保留与暂停的顺序要保证。3.4 程序运行 巴特沃斯滤波特性 切比雪夫滤波特性矩形窗 三角窗汉宁窗 哈明窗布莱克曼窗 凯塞窗图16 运行后的函数对照第四章 结束语本次课程设计可以称为matlab和数字信号处理的综合设计,因为这次有一半的
13、时间在研究matlab,有一半的时间在思考数字信号问题的解决。几天下来收获是很多的,对数字信号处理有了一次全面的回顾,而且也看到了matlab的神秘面容。只要是自己真正的努力去做了,就绝对不会后悔在课程设计上花费的时间。现在发现自己确实会的太少,而这次又学了太多,对自己以后的学习还是有鞭策意义的。这次课程设计也使我认识到了matlab的强大,或者进一步说工具软件有着你意想不到的功效,能节省你的时间,同时又能够让你从实践上更深层次的认识到所学知识的奇妙,而且可以同时明白了学习与实践的相辅相成。对课程设计也是一直保持很高兴趣的,虽然有时为它焦头烂额,但是也会因此有柳暗花明的喜悦,任何事情都折射着一
14、个普通的道理付出才有回报。浅显的道理,却是需要我们用毅力来坚持见证的。具体来说,通过本次课程设计,我掌握了MATLAB的基本运用,尤其是其中GUI可视化图形用户界面的设计,包括函数调用与在图形用户界面开发环境下的调用。函数的调用与参数的传递是两个简单却很容易出错的地方,自由细心才可以保证程序的健壮性。对数字信号本身内容的理解来说,全书的内容确实是可以融合在这两个课程设计题目中的,一个是DFT运用,另一个是滤波器的设计和利用。对全书的内容可以做出最好的概括。其中滤波器的设计中,调用了许多滤波函数,这是本次实验有点欠缺的地方,但是仍然从整体上把握了整个滤波器的设计过程。对于课程设计中出现的问题,解
15、决的方式有两种,一是自己解决。可以上网,查阅图书和matlab的本身的帮助文件,不断尝试,自己修改错误,可以更好的反省。二是与同学相商。一加一不是等于二那么简单的,相互交流才是进步的最好方式。其中解决问题最重要的应该是坚持不懈,在遇到问题时,不放弃才有可能称为最后的胜利者。每次课程设计都收获颇多,而且每次都对自己的学习态度做一次调整,这个的作用确实是很大的,希望以后更加珍惜的课程设计的时间。参考文献1丁玉美等.数字信号处理 M.西安:西安电子科技大学出版社,20022 程佩青.数字信号处理教程,第二版M.北京:清华大学出版社,20013 赵树杰等.数字信号处理M.西安:西安电子科技大学出版社,
16、1997 4 陈怀琛等.MATLAB 及在电子信息课程中的应用M,北京:电子工业出版社出版,20025余成波.数字信号处理及MATLAB实现,第一版M.北京:清华大学出版社,20087维纳.k.恩格尔等.数字信号处理使用MATLABM.西安:西安交通大学出版社程序源代码清单%巴特沃斯滤波器设计function B A=hbutter(wp,ws,rp,rs,t1,fs)wp=2*wp/fs;ws=2*ws/fs;if t1=1 B,A=butter(N,Wc);elseif t1=2 B,A=butter(N,Wc,high);elseif t1=3 elseif t1=4stopelse A
17、=; B=;end%切比雪夫滤波器设计function B A=hcheby(wp,ws,rp,rs,t1,fs)if t1=1 B,A=cheby1(N,rp,Wc);elseif t1=2 B,A=cheby1(N,rp,Wc,elseif t1=3end %窗函数设计function B,A=hwindow(wp,ws,rp,rs,t2,t1,fs)wp=2*pi*wp/fs;ws=2*pi*ws/fs;A=1;wdel2=abs(ws-wp);if t1=4 | t1=3 wdel=wdel2(1); wdel=wdel2;beta=0.112*(rs-8.7);N=ceil(rs-8
18、)/wdel);ws=(wp+ws)/2/pi;if t2=3 wn=boxcar(N+1);elseif t2=4elseif t2=5elseif t2=6 wn=hamming(N+1);elseif t2=7elseif t2=8 wn=kaiser(N+1,beta); B=fir1(N,ws,wn); B=fir1(N,ws,function y=proy(ory,B,A)y=;M=length(B);N=length(A);nx=length(ory);for ni=1:nx s1=0; s2=0; m1=min(ni M); for j=1:m1 s1=s1+B(j)*ory(ni-j+1); end m2=min(ni N); for j2=2:m2 s2=s2+A(j2)*y(ni-j2+1); y(ni)=s1-s2;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1