资源描述:
《数字信号处理实验——用窗函数设计fir滤波器》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验四用窗函数设计FIR滤波器一、实验目的1、熟悉FIR滤波器设计的基本方法。2、掌握用窗函数设计FIR数字滤波器的原理及方法,熟悉相应的计算机高级语言编程。3、熟悉线性相位FIR滤波器的幅频特性和相位特性。4、了解各种不同窗函数对滤波器性能的响应。二、实验原理和方法窗函数法设计的任务在于寻找一个可实现有限长单位脉冲响应的传递函数H(ejw)=h(n)e-jwn去逼近hd(n)=1/2Hd(ejw)ejwndw即h(n)=hd(n)w(n)(一)几种常用的窗函数1、矩形窗w(n)=RN(n)2、Hanning窗w(n)=0.5[1-cos(2πn/N-1)]RN(n
2、)3、Hamming窗w(n)=[0.54-0.46cos(2πn/N-1)]RN(n)4、Blackman窗w(n)=[0.42-0.5cos(2πn/N-1)+0.08cos(4πn/N-1)]RN(n)5、Kaiser窗w(n)=I0(β(1-[(2n/(N-1))-1]2)½)/I0(β)(二)窗函数法设计线性相位FIR滤波器的步骤1、确定数字滤波器的性能要求。确定各临界频率{wk}和滤波器单位脉冲响应长度N。2、根据性能要求和N值,合理地选择单位脉冲响应h(n)有奇偶对称性,从而确定理想频率响应hd(ejw)的幅频特性和相位特性。3、用傅里叶反变换公式求得
3、理想单位脉冲响应hd(n)。4、选择适当的窗函数W(n),求得所设计的FIR滤波器单位脉冲响应。5、用傅里叶变换求得其频率响应H(ejw),分析它的幅频特性,若不满足要求,可适当改变窗函数形式或长度N,重复上述过程,直至得到满意的结果。三、实验内容和步骤1、分别用矩形窗、Hanning窗、Hamming窗、Blackman窗、Kaiser窗(β=8.5)设计一个长度N=8的线性相位FIR滤波器。>>Window=boxcar(8);>>b=fir1(7,0.4,Window)b=Columns1through7-0.08830.00000.20610.38220.3
4、8220.20610.0000Column8-0.0883>>Window=hanning(8);>>b=fir1(7,0.4,Window)b=Columns1through7-0.01000.00000.15010.35990.35990.15010.0000Column8-0.0100>>Window=hamming(8);>>b=fir1(7,0.4,Window)b=Columns1through6-0.00720.00000.13510.37210.37210.1351Columns7through80.0000-0.0072>>Window=black
5、man(8);>>b=fir1(7,0.4,Window)b=Columns1through60.00000.00000.10600.39400.39400.1060Columns7through80.00000.0000>>Window=kaiser(8,8.5);>>b=fir1(7,0.4,Window)b=Columns1through6-0.00010.00000.10680.39330.39330.1068Columns7through80.0000-0.00012、用Hanning窗设计一个线性相位带通滤波器>>Window=hanning(16);>
6、>b=fir1(15,[0.30.5],Window);freqz(b,1)>>Window=hanning(46);>>b=fir1(45,[0.30.5],Window);freqz(b,1)分析实验结果:由图可看出当N由15变为45时,主瓣宽度和过渡带宽度都变窄了。3、改用矩形窗和Blackman窗设计带通滤波器>>Window=boxcar(16);>>b=fir1(15,[0.30.5],Window);freqz(b,1)>>Window=boxcar(46);>>b=fir1(45,[0.30.5],Window);freqz(b,1)>>Window
7、=blackman(16);>>b=fir1(15,[0.30.5],Window);freqz(b,1)>>Window=blackman(46);>>b=fir1(45,[0.30.5],Window);freqz(b,1)比较Hanning窗、矩形窗和Blackman窗这三种窗函数的特点:用矩形窗设计时的主瓣宽度最小,用Blackman窗设计时旁瓣峰值衰减较大且旁瓣衰减的速度也很快但主瓣宽度较宽。1、用Kaiser窗设计一个专用的线性相位滤波器。(1)β=4时>>Window=kaiser(41,4);>>b=fir1(40,[0.20.40.60.8],