实验六 用窗函数法设计FIR滤波器
一、实验目的
1. 掌握窗函数法设计FIR滤波器的原理和方法,观察用几种常用窗函数设计的FIR数字滤波器技术指标; 2. 掌握FIR滤波器的线性相位特性; 3. 了解各种窗函数对滤波特性的影响。 二、实验原理与方法
如果所希望的滤波器的理想频率响应函数为Hd(ejω),则其对应的单位脉冲响
1应为hd(n)?2???H(e??j?)ej?nd?,用窗函数wN(n)将hd(n)截断,并进行加权处理,
得到实际滤波器的单位脉冲响应h(n)=hd(n)wN(n),其频率响应函数为
H(e)??h(n)e?j?n。如果要求线性相位特性,则h(n)还必须满足
j?n?0N?1h(n)??h(N?1?n)。可根据具体情况选择h(n)的长度及对称性。
三、实验步骤
1. 写出理想低通滤波器的传输函数和单位脉冲响应。 2. 写出用四种窗函数设计的滤波器的单位脉冲响应。
3. 用窗函数法设计一个线性相位FIR低通滤波器,用理想低通滤波器作为逼近滤波器,截止频率ωc=π/4 rad,选择窗函数的长度N=15,33两种情况。要求在两种窗口长度下,分别求出h(n),打印出相应的幅频特性和相频特性曲线,观察3dB带宽和阻带衰减;
4 用其它窗函数(汉宁窗(升余弦窗)、哈明窗(改进的升余弦窗)、布莱克曼窗) 设计该滤波器,要求同1;比较四种窗函数对滤波器特性的影响。 四、实验用MATLAB函数
可以调用MATLAB工具箱函数fir1实现本实验所要求的线性相位FIR-DF的设计,调用一维快速傅立叶变换函数fft来计算滤波器的频率响应函数。
fir1是用窗函数法设计线性相位FIRDF的工具箱函数,调用格式如下: hn=fir1(N, wc, ‘ftype’, window)
fir1实现线性相位FIR滤波器的标准窗函数法设计。
hn=fir1(N,wc)可得到6 dB截止频率为wc的N阶(单位脉冲响应h(n)长度为
N+1)FIR低通滤波器,默认(缺省参数windows)选用hammiing窗。其单位脉冲响应h(n)满足线性相位条件:h(n)=h(N-1-n)
其中wc为对π归一化的数字频率,0≤wc≤1。 当wc=[wc1, wc2]时,得到的是带通滤波器。 hn=fir1(N,wc,’ftype’)可设计高通和带阻滤波器。 当ftype=high时,设计高通FIR滤波器; 当ftype=stop时,设计带阻FIR滤波器。
应当注意,在设计高通和带阻滤波器时,阶数N只能取偶数(h(n)长度N+1为奇数)。不过,当用户将N设置为奇数时,fir1会自动对N加1。
hn=fir1(N,wc,window)可以指定窗函数向量window。如果缺省window参数,则fir1默认为hamming窗。可用的其他窗函数有Boxcar, Hanning, Bartlett, Blackman, Kaiser和Chebwin窗。例如:
hn=fir1(N,wc,bartlett(N+1))使用Bartlett窗设计; hn=fir1(N,wc,chebwin(N+1,R))使用Chebyshev窗设计。
hn=fir1(N,wc,’ftype’,window)通过选择wc、 ftype和window参数(含义同上),
可以设计各种加窗滤波器。 五、思考题
1. 如果给定通带截止频率和阻带截止频率以及阻带最小衰减,如何用窗函数法设计线性相位低通滤波器? 写出设计步骤。
2. 如果要用窗函数法设计带通滤波器,且给定上、下边带截止频率为ω1和ω2,试求理想带通的单位脉冲响应hd(n)。 六、实验报告要求
1. 总结用窗函数法设计FIR滤波器的步骤。
2. 比较四种窗函数设计的滤波器的技术指标:阻带最小衰减和过渡带宽度。 3. 总结窗函数的形式和长度对设计滤波器的影响,及选择窗函数的依据。 附录:用窗函数法设计FIR低通滤波器程序 %用窗函数法设计FIR滤波器 clear all; N=44; Wc=pi/4;
%理想低通滤波器设计(怎样设计理想高通、带通、带阻滤波器?) alpha=(N-1)/2; n=[0:(N-1)]; m=n-alpha+eps;
hd=sin(Wc*m)./(pi*m);% hd=(sin(pi*m)-sin(Wc*m))./(pi*m);
B=boxcar(N);%矩形窗
string=['Boxcar ','N=',num2str(N)]; h=hd.*(B)'; %加窗截取 %以上过程可直接调用FIR1实现 %wc=Wc/pi;%频率归一化 %h=fir1(N-1,wc,boxcar(N));
[H,m]=freqz(h,[1],1024,'whole'); %频率响应 mag=abs(H);
db=20*log10((mag+eps)/max(mag)); pha=angle(H); subplot(2,2,1) n=0:N-1; stem(n,h,'.') axis([0 N-1 -0.1 0.3]) hold on n=0:N-1; x=zeros(N); plot(n,x,'-') hold off xlabel('n') ylabel('h(n)')
title('实际低通滤波器的h(n)') text(0.3*N,0.27,string)
subplot(2,2,2) plot(m/pi,db) axis([0 1 -100 0])
xlabel('w/pi') ylabel('dB') title('副频衰减特性') grid on
subplot(2,2,3) plot(m,pha) hold on n=0:7; x=zeros(8); plot(n,x,'-') hold off
axis([0 3.15 -4 4]) xlabel('频率(rad)') ylabel('相位(rad)') title('相频特性')
subplot(2,2,4) plot(m,mag) axis([0 3.15 0 1.5]) xlabel('频率W(rad)') ylabel('幅值') title('幅频特性') text(0.9,1.2,string) 实验要求:
1. 修改理想低通程序为理想高通、带通、带阻的程序,重新进行实验,注意高通、带阻滤波器的情况下,N的取值有何限制? 2. 直接调用FIR1函数,重新进行实验;
3. 观察不同窗函数对滤波特性即对阻带衰减的影响,另外观察窗函数的长度N对过渡带宽的影响。