实验报告实验题目:用窗函数法设计FIR滤波器所属课程:数字信号处理班级:姓名:学号:实验目的(1)掌握用窗函数法设计FIR数字滤波器的原理与方法。(2)熟悉线性相位FIR数字滤波器的特性。(3)了解各种窗函数对滤波特性的影响。一.实验内容和要求(1)复习用窗函数法设计FIR数字滤波器一节内容,阅读本实验原理,掌握设计步骤。(2)用升余弦窗设计一线性相位低通FIR数字滤波器,截止频率radc4。窗口长度N=15,33。要求在两种窗口长度情况下,分别求出nh,打印出相应的幅频特性和相频特性曲线,观察3dB带宽和20dB带宽。总结窗口长度N对滤波器特性的影响。设计低通FIR数字滤波器时,一般以理想低通滤波特性为逼近函数jeH,即ccjjd,,eeH0其中21NanandeedeeHnhcjjjjddccsin2121(3)33N,4c,用四种窗函数设计线性相位低通滤波器,绘制相应的幅频特性曲线,观察3dB带宽和20dB带宽以及阻带最小衰减,比较四种窗函数对滤波器特性的影响。二.实验方法、步骤及结果测试如果所希望的滤波器的理想的频率响应函数为jdeH,则其对应的单位脉冲响应为deeHnhjjdd21(4.1)窗函数设计法的基本原理是用有限长单位脉冲响应序列nh逼近nhd。由于nhd往往是无限长序列,而且是非因果的,所以用窗函数n将nhd截断,并进行加权处理,得到:nnhnhd(4.2)nh就作为实际设计的FIR数字滤波器的单位脉冲响应序列,其频率响应函数jeH为njNnjenheH10(4.3)式中,N为所选窗函数n的长度。如果要求线性相位特性,则nh还必须满足nNhnh1根据上式中的正、负号和长度N的奇偶性又将线性相位FIR滤波器分成四类。要根据所设计的滤波特性正确选择其中一类,例如,要设计线性相位低通特性,可以选择nNhnh1这一类,而不能选择nNhnh1这一类。主程序框图如图4.1所示。其中幅度特性要求用dB表示。设)()()()()()()]([)(22kHkHkHkjHkHkHnhDFTkHIRIR画图时,用)(lg20kH打印幅度特性。第k点对应的频率kNk2。为使曲线包络更接近jeH的幅度特性曲线,DFT变换区间要选大些。例如窗口长度N=33时,可通过在nh末尾补零的方法,使长度变为64,再进行64点DFT,则可以得到更精确的幅度衰减特性曲线。程序菜单b=1;%b赋值为1,保证while语句能死循环closeall;%清屏i=0;i%赋值为0,while(b);%while语句开始读入窗口长度N计算hd(n)调用窗函数子程序求w(n)调用子程序(函数)计算H(k)=DFT[h(n)]调用绘图子程序(函数)绘制H(k)幅度相位曲线结束图6-1主程序框图计算h(n)=hd(n)w(n)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');%窗函数长度N菜单选项menu1=[10,15,20,25,30,33,35,40,45,50,55,60,64];%菜单1的取值N=menu1(temp);%选择的值赋值给Ntemp=menu('选择逼近理想低通滤波器截止频率Wc','Wc=pi/4','Wc=pi/2','Wc=3*pi/4','Wc=pi','Wc=0.5','Wc=1.0','Wc=1.5','Wc=2.0','Wc=2.5','Wc=3.0');%截止频率菜单选项menu2=[pi/4,pi/2,3*pi/4,pi,0.5,1,1.5,2,2.5,3];%菜单2的取值w=menu2(temp);%把选取的值赋值给wn=[0:(N-1)];%n的长度hd=ideal(w,N);%得到理想低通滤波器k=menu('请选择窗口类型:','boxcar','hamming','hanning','blackman');%选择窗口类型值赋值给kifk==1%选择矩形窗B=boxcar(N);%调用矩形窗函数string=['Boxcar','N=',num2str(N)];%数组elseifk==2%选择哈明窗B=hamming(N);%调用哈明窗函数string=['Hamming','N=',num2str(N)];%数组elseifk==3%选择汉宁窗B=hanning(N);%调用汉宁窗函数string=['Hanning','N=',num2str(N)];%数组elseifk==4%选择布莱克曼窗B=blackman(N);%调用布莱克曼函数string=['Blackman','N=',num2str(N)];%数组end%结束ifend%结束ifend%结束ifend%结束while循环语句h=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;%i自加1figure(i)%窗口名为figureisubplot(2,2,1);%两行两列,下图显示在第一个位置n=0:N-1;%n的取值范围0到N-1stem(n,h,'.');%画出haxis([0,N-1,-0.1,0.3]);%横轴的范围是0到N-1,纵轴的范围是-0.1到0.3holdon;%开功能n=0:N-1;%n的取值范围0到N-1x=zeros(N);%x为N长度的值全部幅值0plot(n,x,'-');%画出xxlabel('n');%横轴ylabel('h(n)');%纵轴title('实际低通滤波器的h(n)');%名称text((0.3*N),0.27,string);%指定位置显示数holdoff;%结束subplot(2,2,2);%第二个位置显示下图plot(m/pi,db);%画出dbaxis([0,1,-100,0]);%横轴0到1。纵轴-100到0xlabel('w/pi');%横轴ylabel('dB');%纵轴title('衰减特性(dB)');%名称grid;%开网格subplot(2,2,3);%下图显示在第三个位置plot(m,pha);%画出pha的曲线holdon;%开启一张图显示多组数据功能n=0:7;%n的取值范围x=zeros(8);%所有值全部赋值为0plot(n,x,'-');%画出xtitle('相频特性');%名称xlabel('频率(rad)');%横轴ylabel('相位(rad)');%纵轴axis([0,3.15,-4,4]);%横轴范围0—3.15,纵轴范围-4—4subplot(2,2,4);%下图显示在第四个位置plot(m,mag);%画出magtitle('频率特性');%名称xlabel('频率W(rad)');%横轴ylabel('幅值');%纵轴axis([0,3.15,0,1.5]);%横轴范围0—3.15,纵轴范围0—1.5text(0.9,1.2,string);%特定位置显示stringb=menu('DoYouwantToContinue?','Yes','No');%菜单选择值赋给bifb==2%判断b是否等于2b=0;%b赋值为0end%结束ifend%结束while循环temp=menu('CloseAllFigure?','Yes','No');%菜单选择值赋给tempiftemp==1%判断temp是否等于1closeall%关闭菜单end%结束if%实验中的子函数:产生理想低通滤波器单位脉冲响应hd(n)functionhd=ideal(w,N);%函数hd子程序alpha=(N-1)/2;%把(N-1)/2赋给alphan=[0:(N-1)];%n的取值范围m=n-alpha+eps;%得到m的值hd=sin(w*m)./(pi*m);%求出hd程序运行结果:运行程序,根据实验内容要求和程序提示选择你要进行的实验参数。三个实验参数选定后,程序运行输出用所选窗函数设计的实际FIR低通数字滤波器的单位脉冲响应h(n)、幅频衰减特性(20lg|H(ejw)|)、相频特性及幅频特性|H(ejw)|的波形,h(n)和|H(ejw)|图中标出了所选窗函数类型及其长度N值。对四种窗函数(N=15和N=33)的程序运行结果如图4-2到图4-9所示,由图可以看出用各种窗函数设计的FIR滤波器的阻带最小衰减及过渡带均与教材中一致。在通带内均为严格相位特性。图6-2矩形窗(N=15)图6-3矩形窗(N=33)图6-4哈明窗(N=15)图6-5哈明窗(N=33)图6-6汉宁窗(N=15)图6-7汉宁窗(N=33)图6-8布莱克曼窗(N=15)图6-9布莱克曼窗(N=33)