资源描述:
《用MATLAB语言实现IIR滤波器的设计》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、第17卷第4期齐齐哈尔大学学报Vol.17,No.42001年12月JournalofQiqiharUniversityDec.,2001用MATLAB语言实现IIR滤波器的设计柳春锋(齐齐哈尔大学自动化系,齐齐哈尔161006)摘要本文通过对双线性变换法的分析,着重探讨了用MATLAB语言设计IIR滤波器的软件方法及应注意的问题。关键词:IIR滤波器;MATLAB语言;设计;方法+中图分类号:TN713.1;TP312文献标识码:A文章编号:1007-984X(2001)04-0051-04在信号处理中,软件实现
2、大多使用BASIC、FORTRAN和C语言,这在处理如FFT等复杂的数学问题和输出图形时有许多不便。MATALAB是一种可视化的功能强大的系统分析和仿真工具,其工具箱中丰富的函数和作图功能正是其他语言所缺乏的。本文在分析IIR滤波器设计法的基础上,用MATALAB语言实现了IIR滤波器的设计,通过修改某些参数和比较结果,提出了IIR滤波器设计中应注意的问题。1设计思想IIR滤波器是无限脉冲响应滤波器,具有非线性的特点,它的设计方法与FIR滤波器的设计有很大的不同。本文使用双线性变换法设计IIR数字滤波器的基本设计思
3、路是:首先确定相关的技术参数;其次,设计模拟滤波器(Butterworth滤波器),得到其传输函数Ha(s);第三,将模拟滤波器的Ha(s),从s平面转换到z平面,得到数字滤波器系统函数H(z);最后通过对H(z)的处理,输出幅频特性等曲线图。实例:使用双线性变换法设计一个数字低通Butterworth滤波器,设计指标是:wp=0.2π,Rp=1dB,ws=0.3π,As=15dB设计分析:1)求模拟低通的技术指标(各截止频率Ωp、Ωs和Ωc及阶数N)ΩP=(2/T)3tan(wp/2),采样周期T=1(原则上T值
4、可任取),Ωs=2/T3tan(ws/2),0.13As-(1/2N)Rp/10As/10Ωc=Ωs(10-1),N=-(lgksp/lgλsp),其中ksp=((10-1)/(10-1))λ,sp=Ωs/Ωp。2)设计Butterworth低通滤波器,得到归一化函数Ha(p),去归一化后得到实际的传输函数Ha(s)。3)用双线性变换法将Ha(s)变换为数字低通滤波器的系统函数H(z):H(z)=H-1-1a(s)
5、s=2*(1-z)/(1+z)2几个重要的函数1)buttap()函数。利用该函数,在给定阶数N后,
6、可运算出Butterworth模拟滤波器原型,其传输函数为:Ha(s)=k/((s-p(1))(s-p(2))⋯(s-p(n)))2)bilinear()函数。利用它实现双线性变换,将S域变换为Z域,其映射关系满足H(z)=H-1-1a(s)
7、s=2*(1-z)/(1+z)3)subplot()。该函数用来分割图形窗口,可在一个图形窗口中输出多幅图。其格式为subplot(m,n,I),表示图形窗口被分割成m行n列个子窗口,本子窗口是第I个。适合于有多个结果图的输出。3MATLAB语言程序1)主程序main.m收稿
8、日期:2001-06-11作者简介:柳春峰,男,1965年生,大学本科,讲师,主要从事数字信号处理研究。·52·齐齐哈尔大学学报2001年%ImpulseInvarianceTransformation%ButterworthLowpassFilterDesignwp=0.23pi;ws=0.33pi;Rp=1;As=15;T=1;Fs=1/T;%″Fs″issamplingfrequencyOmegaP=(2/T)3tan(wp/2);OmegaS=(2/T)3tan(ws/2);%Analogfilterind
9、exep=sqrt(10^(Rp/10)-1);Ripple=sqrt(1/(1+ep3ep));Attn=1/(10^(As/20));[cs,ds]=afd-butt(OmegaP,OmegaS,Rp,As);[b,a]=bilinear(cs,ds,T);%Doublelineartransform[C,B,A]=dir2cas(b,a)%plotfigure(1);[db,mag,pha,grd,w]=freqz-m(b,a);subplot(2,2,1);plot(w/pi,mag);title(′Mag
10、nitudeRresponse′)xlabel(′frequencyinpiunits′);ylabel(′
11、H
12、′);axis([0,1,0,1.1])set(gca,′XTickMode′,′manual′,′XTick′,[0,0.2,0.3,1]);set(gca,′YTickMode′,′manual′,′YTick′,[0,Attn,Ripple