用窗函数法设计FIR 数字滤波器一、实验目的1.掌握用窗函数法设计FIR 数字滤波器的原理和方法。
2.熟悉线性相位FIR 数字滤波器特征。
3.了解各种窗函数对滤波特性的影响。
二、实验仪器微型计算机 matlab 软件三、实验原理和方法如果所希望的滤波器的理想频率响应函数为 )(ωj d eH ,则其对应的单位脉冲响应为 )(n h d =π21ωωωππd e e H j j d )(⎰- (2-1)窗函数设计法的基本原理是用有限长单位脉冲响应序列)(n h 逼近)(n h d 。
由于)(n h d 往往是无限长序列,且是非因果的,所以用窗函数)(n ω将)(n h d 截断,并进行加权处理,得到:)(n h =)(n h d )(n ω (2-2))(n h 就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数)(ωj d e H 为: )(ωj d e H =∑-=-10)(N n j e n h ω (2-3)式中,N 为所选窗函数)(n ω的长度。
由第七章可知,用窗函数法设计的滤波器性能取决于窗函数)(n ω的类型及窗口长度N 的取值。
设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。
各种类型的窗函数可达到的阻带最小衰减和过渡带宽度见第七章。
这样选定窗函数类型和长度N 后,求出单位脉冲响应)(n h =)(n h d ·)(n ω,并按式(2-3)求出)(ωj eH 。
)(ωj e H 是否满足要求,要进行验算。
一般在)(n h 尾部加零使长度满足于2的整数次幂,以便用FFT 计算)(ωj e H 。
如果要观察细节,补零点数增多即可。
如果)(ωj e H 不满足要求,则要重新选择窗函数类型和长度N ,再次验算,直至满足要求。
如果要求线性相位特性,则)(n h 还必须满足)1()(n N h n h --±= (2-4)根据上式中的正负号和长度N 的奇偶性又将线性相位FIR 滤波器分成四类。
要根据设计的滤波特性正确选择其中一类。
例如,要设计线性低通特征,可选择)1()(n N h n h --=一类,而不能选)1()(n N h n h ---=一类。
四、实验内容1.复习用窗函数法设计FIR 数字滤波器一节内容,阅读本实验原理掌握设计步骤。
2.编写程序① 编写能产生矩型窗、哈明窗、汉宁窗、莱克曼窗的窗函数子程序。
② 编写主程序。
主程序框图如图设 : [])()(n h DFT k H = (2-4) )()()(K jH k H k H I R += (2-5))()()(22k H k H k H I R += (2-6) 画图时,20lg )(k H 打印幅度特性。
第k 点对应的频率k Nk πω2=。
为使曲线包络更接近)(ωj e H 的幅度特性曲线,DFT 变换区间要选大些。
例如窗口长度N=33时,可通过在)(n h 末尾补零的方法,使长度变为64,再进行4点DFT ,则可得到更精确的幅度衰减特性曲线。
3.上机实验内容用四种窗函数设计线性相位低通FIR 数字滤波器,截止频率4πω=c rad ,N=256。
绘 制相应的幅频特性曲线,观察3dB 带宽和20dB 带宽以及阻带最小衰减,比较四种窗函数对滤波器特性的影响。
设计低通FIR 数字滤波器时,一般以理想低通滤波特性为逼近函数)(ωj d e H ,即 ⎪⎩⎪⎨⎧≤<≤=-πωωωωωαωc c j j d e e H ,0,)( 其中21-=N α (2-8) )()(sin 21)(21)(απαωωπωπωωωωαππωω--===⎰⎰---n n d e e d e e H n h c n j j n j j d d c c (2-9) 五、思考题 1.如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器写出设计步骤。
2.定性说明本实验中3dB 截止频率的理论值在什么位置是否等于理想低通的截止频率ω3.如果要求用窗函数法设计带通滤波器,且给定上、下边带截止频率为1ω和2ω,试求理想带通的单位脉冲响应)(n h 。
六、实验报告要求1.简述实验目的及原理。
2.按照实验步骤及要求,比较各种情况下的滤波性能,说明窗口长度N 和窗函数类型对滤波特性的影响。
3.总结用窗函数法设计FIR 滤波器的主要特点。
4. 简要回答思考题。
参考程序1:N=input('窗宽度N=');k=input('窗型:1.矩形窗,(升余弦窗),(改进的升余弦窗), 请选择:'); subplot(2,2,1);w=pi/5;a=(N-1)/2;n=0:(N-1);m=n-a+eps;h=sin(w*m)./(pi*m);if k==1B=bartlett(N);else if k==2B=hanning(N);else if k==3B=hamming(N);else if k==4B=blackman(N);endendendendhd=h.*(B');stem(n,hd,'.');xlabel('n');ylabel('h(n)');title('在矩形窗下的N=33时h(n)函数');subplot(2,2,2);[H,m]=freqz(hd,[1],1024);mag=abs(H);db=20*log10((mag+eps)/max(mag));plot(m/pi,db);xlabel('w/п');ylabel('20log[H(ejw)]');title('h(n)的幅频特性');grid;pha=angle(H);subplot(2,2,3);plot(m,pha);xlabel('n');ylabel('φ');title('h(n)的相频特性');subplot(2,2,4);plot(m,mag);xlabel('w');ylabel('H(ejw)');title('h(n)的幅频特性');参考程序2:b=1;close all;i=0;while(b);temp=menu('选择窗函数长度N','N=10','N=15','N=20','N=25','N=30','N=33','N=35','N=40','N=45','N=50','N=55' ,'N=60','N=64');menu1=[10,15,20,25,30,33,35,40,45,50,55,60,64];N=menu1(temp);temp=menu('选择逼近理想低通滤波器截止频率Wc','Wc=pi/4','Wc=pi/2','Wc=3*pi/4','Wc=pi','Wc=','Wc=','Wc=','Wc=','Wc=','Wc=');menu2=[pi/4,pi/2,3*pi/4,pi,,1,,2,,3];w=menu2(temp);n=[0:(N-1)];hd=ideal(w,N); %得到理想低通滤波器k=menu('请选择窗口类型:','boxcar','hamming','hanning','blackman'); if k==1B=boxcar(N);string=['Boxcar','N=',num2str(N)];else if k==2B=hamming(N);string=['Hamming','N=',num2str(N)];else if k==3B=hanning(N);string=['Hanning','N=',num2str(N)];else if k==4B=blackman(N);string=['Blackman','N=',num2str(N)];endendendendh=hd.*(B)'; %得到FIR数字滤波器[H,m]=freqz(h,[1],1024,'whole'); %求其频率响应mag=abs(H); %得到幅值db=20*log10((mag+eps)/max(mag));pha=angle(H); %得到相位i=i+1;figure(i)subplot(2,2,1);n=0:N-1;stem(n,h,'.');axis([0,N-1,,]);hold on;n=0:N-1;x=zeros(N);plot(n,x,'-');xlabel('n');ylabel('h(n)');title('实际低通滤波器的h(n)'); text(*N),,string);hold off;subplot(2,2,2);plot(m/pi,db);axis([0,1,-100,0]);xlabel('w/pi');ylabel('dB');title('衰减特性(dB)');grid;subplot(2,2,3);plot(m,pha);hold on;n=0:7;x=zeros(8);plot(n,x,'-');title('相频特性');xlabel('频率(rad)');ylabel('相位(rad)');axis([0,,-4,4]);subplot(2,2,4);plot(m,mag);title('频率特性');xlabel('频率W(rad)');ylabel('幅值');axis([0,,0,]);text,,string);b=menu('Do You want To Continue ','Yes','No'); if b==2b=0;endendtemp=menu('Close All Figure ','Yes','No');if temp==1close allend。