资源描述:
《基于matlab的iir和fir滤波器仿真》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于MatLab的IIR和FIR滤波器仿真专业:学号:姓名:2016年12月一、设计原理数字滤波器在数字信号处理中起着非常重要的作用,用于信号的过滤、检测与参数估计等方面,是使用最为广泛的一种现行系统。实现数字滤波器的方法有两种,一是采用计算机软件进行,就是把所要完成的工作通过程序让计算机来实现;二是设计专用的数字处理硬件。这个地方主要用到的就是第一种方法。即是用Matlab提供的信号处理工具箱来实现数字滤波器。Matlab信号处理工具箱提供了丰富的设计方法,可以使得繁琐的程序设计简化成函数的调用,只要以正确的指标参数调用函数,就可以正确快捷地得到设计结果。二、设计方案1、利
2、用双线性变换设计IIR滤波器(只介绍巴特沃斯数字低通滤波器的设计),首先要设计出满足指标要求的模拟滤波器的传递函数,然后由通过双线性变换可得所要设计的IIR滤波器的系统函数。对于IIR数字滤波器的设计具体步骤如下: (1)按照一定的规则将给出的数字滤波器的技术指标转换为模拟低通滤波器的技术指标。 (2)根据转换后的技术指标设计模拟低通滤波器(Hα(s)(Hα(s)是低通滤波器的传递函数)。 (3)再按照一定的规则将Hα(s)转换成H(z)(H(z)是数字滤波器的传递函数)。若设计的数字滤波器是低通的,上述的过程可以结束,若设计的是高通、带通或者是带阻滤波器,那么还需要下
3、面的步骤:将高通、带通或带阻数字滤波器的技术指标转换为低通模拟滤波器的技术指标,然后设计出低通Hα(s),再将Hα(s))转换为H(z)。具体的变换是:首先将给定的数字滤波器的指标转换成模拟滤波器的技术指标,这里主要是边界频率Wp和Ws的转换,对αp和αs指标不作变化。边界频率的转换关系为。接着,按照模拟低通滤波器的技术指标根据相应设计公式求出滤波器的阶数N和3dB截止频率ΩC;根据阶数N查巴特沃斯归一化低通滤波器参数表,得到归一化传输函数Hα(p);最后,将代入Hα(p)去归一,得到实际的模拟滤波器传输函数Hα(s)。之后,通过双线性变换法转换公式,得到所要设计的IIR滤波
4、器的系统函数H(z)。2、对于用窗函数法设计FIR滤波器的设计具体步骤如下:如果所希望的滤波器的理想频率响应函数为,则其对应的单位脉冲响应为窗函数设计法的基本原理是用有限长单位脉冲响应逼近。由于往往是无限长序列,且是非因果的,所以用窗函数将截断,并进行加权处理,得到:就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数为式中,N为所选窗函数的长度。用窗函数法设计的滤波器性能取决于窗函数的类型及窗口长度的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度。设待求滤波器的过渡带用表示,它近似等于窗函数主瓣宽度。因过渡带近似与窗口长
5、度成反比,,决定于窗口形式。例如,矩形窗A=4π,海明窗A=8π等。按照过渡带及阻带衰减情况,选择窗函数形式。原则是在保证阻带衰减满足要求的情况下,尽量选择主瓣窄的窗函数。这样选定窗函数类型和窗口长度后,求出单位脉冲响应,再求出。是否满足要求,要进行验算。一般在的尾部加零使长度满足2的整数次幂,以便用FFT计算。如果要观察细节,补零点数增多即可。如果不满足要求,则要重新选择窗函数类型和长度,再次验算,直至满足要求。如果要求线性相位特性,则还必须满足:根据上式中的正、负号和长度的奇偶性又将线性相位FIR滤波器分成四类。要根据所设计的滤波特性正确选择其中一类。例如,要设计线性相位
6、低通特性,可选择一类,而不能选一类。三、仿真结果及分析1、IIR滤波器(1)用双线性变换法去设计一个巴特沃斯IIR低通数字滤波器。设计指标参数为:在通带内频率低于0.2π时,最大衰减小于1dB,在阻带内[0.3π,π]频率区间上,最小衰减大于15dB。(2)以0.02π为采样间隔,绘制出数字滤波器在频率区间[0,π/2]上的幅频响应特性曲线。(3)程序及图形程序及实验结果如下:rp=1;rs=15;wp=.2*pi;ws=.3*pi;wap=tan(wp/2);was=tan(ws/2);[n,wn]=buttord(wap,was,rp,rs,'s');[z,p,k]=bu
7、ttap(n);[bp,ap]=zp2tf(z,p,k);[bs,as]=lp2lp(bp,ap,wap);[bz,az]=bilinear(bs,as,.5);[h,f]=freqz(bz,az,256,1);plot(f,abs(h));title('双线性z变换法获得数字低通滤波器,归一化频率轴');xlabel('omega/2pi');ylabel('低通滤波器的幅频相应');grid;figure;[h,f]=freqz(bz,az,256,100);ff=2*pi*f/100;absh