实验11 用MATLAB 设计FIR 数字滤波器一、实验目的:1、加深对窗函数法设计FIR 数字滤波器的基本原理的理解。
2、学习用MA TLAB 语言的窗函数法编写设计FIR 数字滤波器的程序。
3、了解MATLAB 语言有关窗函数法设计FIR 数字滤波器的常用函数用法。
二、实验内容及步骤2、选择合适的窗函数设计FIR 数字低通滤波器,要求: w p =0.2π,R p =0.05dB ; w s =0.3π,A s =40dB 。
描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
分析:根据设计指标要求,并查表11-1,选择汉宁窗。
程序清单如下: function hd=ideal_lp(wc,N)wp=0.2*pi;ws=0.3*pi;deltaw=ws-wp; tao=(N-1)/2; n=[0:(N-1)];m=n-tao+eps; hd=sin(wc*m)./(pi*m);function[db,mag,pha,grd,w]=freqz_m(b,a); [H,w]=freqz(b,a,1000,'whole'); H=(H(1:501))';w=(w(1:501))'; mag=abs(H);db=20*log10((mag+eps)/max(mag)); pha=angle(H); grd=grpdelay(b,a,w);wp=0.2*pi;ws=0.3*pi;deltaw=ws-wp; wc=(ws+wp)/2;课程名称:数字信号处理 实验成绩: 指导教师:实 验 报 告院系: 信息工程学院 班级: 电信二班 学号: 姓名: 日期:N0=ceil(6.6*pi/deltaw);N=N0+mod(N0+1,2)windows=(hanning(N))';hd=ideal_lp(wc,N);b=hd.*windows;[db,mag,pha,grd,w]=freqz_m(b,1);n=0:N-1;dw=2*pi/1000;Rp=-(min(db(1:wp/dw+1))) %检验通带波动As=-round(max(db(ws/dw+1:501))) %检验最小阻带衰减subplot(2,2,1);stem(n,b);axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应'); xlabel('n');ylabel('h(n)');subplot(2,2,2);stem(n,windows);axis([0,N,0,1.1]);title('窗函数特性');xlabel('n');ylabel('wd(n)');subplot(2,2,3);plot(w/pi,db);axis([0,1,-80,10]);title('幅度频率响应');xlabel('频率(单位:\pi)');ylabel('H(e^{j\omega})');set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);set(gca,'YTickMode','manual','YTick',[-50,-20,-3,0]);grid subplot(2,2,4);plot(w/pi,pha);axis([0,1,-4,4]);title('相位频率响应');xlabel('频率(单位:\pi)');ylabel('\phi(\omega)');set(gca,'XTickMode','manual','XTick',[0,wp/pi,ws/pi,1]);set(gca,'YTickMode','manual','YTick',[-3.1416,0,3.1416,4]);gridN =67Rp =0.0706As = 44204060实际脉冲响应nh (n )窗函数特性nw d (n)0.20.31-50-20-30幅度频率响应频率(单位:π)H (e j ω)0.20.31-3.14163.14164相位频率响应频率(单位:π)φ(ω)3、用凯塞窗设计一个FIR 数字高通滤波器,要求: w p =0.3π,R p =0.1dB ;w s =0.2π,A s =50dB 。
描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
程序清单如下:function hd=ideal_lp(wc,N) tao=(N-1)/2; n=[0:(N-1)]; m=n-tao+eps; hd=sin(wc*m)./(pi*m);function[db,mag,pha,grd,w]=freqz_m(b,a); [H,w]=freqz(b,a,1000,'whole'); H=(H(1:501))';w=(w(1:501))'; mag=abs(H);db=20*log10((mag+eps)/max(mag)); pha=angle(H); grd=grpdelay(b,a,w);wp=0.3*pi;ws=0.2*pi;deltaw=wp-ws;N0=ceil(6.6*pi/deltaw);N=N0+mod(N0+1,2)windows=(kaiser(N,7.865))';wc=(ws+wp)/2;hd=ideal_lp(pi,N)-ideal_lp(wc,N);b=hd.*windows;[db,mag,pha,grd,w]=freqz_m(b,1);n=0:N-1;dw=2*pi/1000;Rp=-(min(db(wp/dw+1:501))) %检验通带波动As=-round(max(db(1:ws/dw+1))) %检验最小阻带衰减subplot(2,2,1);stem(n,b);axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应'); xlabel('n');ylabel('h(n)');subplot(2,2,2);stem(n,windows);axis([0,N,0,1.1]);title('窗函数特性');xlabel('n');ylabel('wd(n)');subplot(2,2,3);plot(w/pi,db);axis([0,1,-100,2]);title('幅度频率响应');xlabel('频率(单位:\pi)');ylabel('H(e^{j\omega})'); set(gca,'XTickMode','manual','XTick',[0,ws/pi,wp/pi,1]); set(gca,'YTickMode','manual','YTick',[,-40-20,-3,0]);grid subplot(2,2,4);plot(w/pi,pha);axis([0,1,-4,4]);title('相位频率响应');xlabel('频率(单位:\pi)');ylabel('\phi(\omega)');set(gca,'XTickMode','manual','XTick',[0,ws/pi,wp/pi,1]); set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);gridN =67Rp = 0.2321As =32204060实际脉冲响应nh (n )窗函数特性nw d (n)0.20.31-60-30幅度频率响应频率(单位:π)H (e j ω)0.20.31-3.14163.1416相位频率响应频率(单位:π)φ(ω)4、选择合适的窗函数设计一个FIR 数字带通滤波器,要求:f p1=3.5kHz ,f p2=6.5kHz ,R p =0.05dB ;f s1=2.5kHz ,f s2=7.5kHz ,A s =60dB 。
滤波器采样频率Fs=20kHz 。
描绘该滤波器的脉冲响应、窗函数及滤波器的幅频响应曲线和相频响应曲线。
分析:根据设计指标应选择布莱克曼窗。
程序清单如下: function[db,mag,pha,grd,w]=freqz_m(b,a); [H,w]=freqz(b,a,1000,'whole'); H=(H(1:501))';w=(w(1:501))'; mag=abs(H);db=20*log10((mag+eps)/max(mag)); pha=angle(H); grd=grpdelay(b,a,w); fp1=3.5;fp2=6.5; fs1=2.5;fs2=7.5; Fs=20;ws1=fs1/(Fs/2)*pi;ws2=fs2/(Fs/2)*pi;wp1=fp1/(Fs/2)*pi;wp2=fp2/(Fs/2)*pi;deltaw=wp1-ws1;N0=ceil(11*pi/deltaw);N=N0+mod(N0+1,2) %为实现FIR类型1偶对称滤波器,应确保N为奇数windows=blackman(N);wc1=(ws1+wp1)/2/pi;wc2=(ws2+wp2)/2/pi;b=fir1(N-1,[wc1,wc2],windows);[db,mag,pha,grd,w]=freqz_m(b,1);n=0:N-1;dw=2*pi/1000;Rp=-(min(db(wp1/dw+1:wp2/dw+1))) %检验通带波动ws0=[1:ws1/dw+1,ws2/dw+1:501];%建立阻带频率样点数组As=-round(max(db(ws0))) %检验最小阻带衰减subplot(2,2,1);stem(n,b);axis([0,N,1.1*min(b),1.1*max(b)]);title('实际脉冲响应');xlabel('n');ylabel('h(n)');subplot(2,2,2);stem(n,windows);axis([0,N,0,1.1]);title('窗函数特性');xlabel('n');ylabel('wd(n)');subplot(2,2,3);plot(w/pi,db);axis([0,1,-150,10]);title('幅度频率响应');xlabel('频率(单位:\pi)');ylabel('H(e^{j\omega})');set(gca,'XTickMode','manual','XTick',[0,fs1,fp1,fp2,fs2,500]);set(gca,'YTickMode','manual','YTick',[-150,-40,-3,0]);gridsubplot(2,2,4);plot(w/pi,pha);axis([0,1,-4,4]);title('相位频率响应');xlabel('频率(单位:\pi)');ylabel('\phi(\omega)');set(gca,'XTickMode','manual','XTick',[0,fs1,fp1,fp2,fs2,500]);set(gca,'YTickMode','manual','YTick',[-pi,0,pi]);gridN =111Rp =0.0034As =7450100实际脉冲响应nh (n )窗函数特性nw d (n )-150-40-30幅度频率响应频率(单位:π)H (e j ω)-3.14163.1416相位频率响应频率(单位:π)φ(ω)5、选择合适的窗函数设计一个FIR 数字带阻滤波器,要求:f p1=1kHz ,f p2=4.5kHz ,R p =0.1dB ;f s1=2kHz ,f s2=3.5kHz ,A s =40dB 。