第五章FIR数字滤波器设计5.2.6Matlab实现FIR窗函数设计法在Matlab信号处理工具箱中,Matlab提供了几个子程序来实现上面的窗函数,同时还提供了两个基于窗函数法的FIR数字滤波器设计函数b=fir1(n,wn,options)和b=fir2(n,f,m,options)。前者用于单带FIR滤波器,后者用于多带FIR滤波器。两者可以设计设计低通、高通、带通、带阻和通用多带FIR滤波器。Fir1具有以下多种形式:b=fir1(n,Wn)b=fir1(n,Wn,'ftype')b=fir1(n,Wn,window)b=fir1(n,Wn,'ftype',window)b=fir1(...,'noscale')返回的向量b包括n阶FIR滤波器的系数,这是一个截止频率为Wn线性相位FIR数字滤波器,Wn是从0到1之间的数,1对应着奈氏频率。对于高通滤波器,在输入参数ftype中附加‘high'字串即可。对于带通或带阻滤波器,可将Wn定义为包含通频带边带频率的一个二元素向量,对于阻带滤波器在‘ftype'中附加‘stop'字串。参量‘window'表示设计FIR滤波器所采用的窗函数类型,以列向量形式表示。向量window的长度必须为n+1,若window却省,则fir1使用汉明窗。注意因为奇数阶的II型滤波器(h(n)为偶对称,长度N为偶数)在高频段的频率响应为零,所以fir1函数在高通和带阻情况下不设计II型滤波器,因此,如果n为奇数时,fir1将阶次加1并返回I型滤波器。函数b=fir2(n,f,m)也设计加窗FIR滤波器,但它针对任意形状的分段(piece-wise)线性频率响应。向量f由从0到1的频率点组成,其中1表示奈氏频率,第一个点必须是0,最后一个点必须是1,频率点必须是递增的。m是对应于频率点f处的期望的频率幅值响应。f和m的长度必须相等。另外,在Matlab中提供了一个freqz函数,利用这个函数开发一个新的函数freqz_m,它给出了绝对的和相对的dB值幅度响应、相位响应以及群延时响应。function[db,mag,pha,grd,w]=freqz_m(b,a);%Modifiedversionoffreqzsubroutine%------------------------------------%[db,mag,pha,grd,w]=freqz_m(b,a);%db=RelativemagnitudeindBcomputedover0topiradians%mag=absolutemagnitudecomputedover0topiradians%pha=Phaseresponseinradiansover0topiradians%grd=Groupdelayover0topiradians%w=501frequencysamplesbetween0topiradians%b=numeratorpolynomialofH(z)(forFIR:b=h)%a=denominatorpolynomialofH(z)(forFIR:a=[1])%[H,w]=freqz(b,a,1000,'whole');H=(H(1:1:501))';w=(w(1:1:501))';mag=abs(H);db=20*log10((mag+eps)/max(mag));pha=angle(H);grd=grpdelay(b,a,w);例5.5根据下列技术指标,设计一个数字FIR低通滤波器wp=0.2π,Rp=0.25dBws=0.3π,As=50dB采用汉明窗,确定脉冲响应,并给出所设计的滤波器的频率响应图。解:在设计中,没有使用通带波动值Rp=0.25dB,但必须检查设计的实际波动,验证它是否确实在给定容限内。%Lowpassfilterdesign-Hammingwindowwp=0.2*pi;ws=0.3*pi;tr_width=ws-wpN=ceil(6.6*pi/tr_width)+1n=[0:1:N];wc=(ws+wp)/2h=fir1(N,wc/pi);[db,mag,pha,grd,w]=freqz_m(h,[1]);delta_w=2*pi/1000;Rp=-(min(db(1:1:wp/delta_w+1)))%PassbandRippleAs=-round(max(db(ws/delta_w+1:1:501)))%MinStopbandattenuation%plotssubplot(1,1,1)subplot(2,1,1);stem(n,h);title('ActualImpulseResponse')axis([0N-1-0.10.3]);xlabel('n');ylabel('h(n)')subplot(2,1,2);plot(w/pi,db);title('MagnitudeResponseindB');gridaxis([01-10010]);xlabel('frequencyinpiunits');ylabel('Decibels')set(gca,'XTickMode','manual','XTick',[0,0.2,0.3,1])set(gca,'YTickMode','manual','YTick',[-50,0])set(gca,'YTickLabelMode','manual','YTickLabel',['50';'0'])运行结果如下:tr_width=0.3142(过渡带宽)N=67(滤波器的阶数,长度为68)wc=0.7854(理想LPF截止频率)Rp=0.0364(实际通带波动)As=53(最小阻带衰减)从结果看,67阶Hamming窗的FIR数字滤波器的实际阻带衰减为53dB,通带波动为0.0364dB,显然满足上面所提的技术要求,其时域和频域响应曲线如下图所示。