5.2 FIR滤波器的设计
目前常用的FIR滤波器设计方法主要有两种,即窗函数设计法和频率采样法。两种方法分别从时域和频域上进行处理,从而得到想要的冲激响应。
5.2.1 窗函数设计法
1.设计原理
窗函数设计法的原理一般是先给出所要求的理想滤波器频率响应Hd(ejω),要求设计一个FIR数字滤波器频率响应H(ejω)来逼近Hd(ejω)。先对Hd(ejω)作傅里叶反变换,得到理想滤波器的冲激响应hd(n)。我们知道,理想滤波器的冲激响应必定是无限长的,且是非因果的,而所要设计滤波器的冲激响应又是有限长的。因此,就要用一个有限长的h(n)来逼近无限长的hd(n)。一个有效办法是用有限长的窗口序列w(n)对这个无限长序列hd(n)进行截断,将其变成有限长的序列,即

因而窗函数序列的形状及长度的选择十分关键。我们以一个截止频率为ωc,具有线性相位理想矩形幅度特性的低通滤波器为例来加以讨论。设低通特性的群延时为α,即

作其IDFT,有

选用窗口函数为矩形窗口函数:
w(n)= RN(n).
但是按照线性相位的约束,h(n)必须是偶对称的,对称中心应为长度的一半
,因而必须有
,所以

将(5.6)代入(5.7),可以得到

此时,就一定满足线性相位特性的条件了。如果对窗函数进行进一步的讨论(参见[15] ,第311~315页),不难发现,一般希望窗函数应满足两项要求:
(1)窗谱主瓣尽可能地窄,以获得较陡的过渡带。
(2)尽量减少窗谱最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,这样可增大主瓣的衰减。
2.常用的几种窗口
(1)矩形窗
矩形窗的函数表达式为

其图形如图5-3所示。

图5-3 矩形窗
(2)三角形窗
三角形窗的函数表达式为

其图形如图5-4所示。主瓣宽度为
。

图5-4 三角形窗
(3)汉宁(Hanning)窗
汉宁窗又称升余弦窗,其函数表达式为

其图形如图5-5所示。主瓣宽度为
。

图5-5 汉宁(Hanning)窗
(4)海明(Hamming)窗
对升余弦加以改进,可得到旁瓣更小的效果。海明窗又称改进的升余弦窗,其函数表达式为

其图形如图5-6所示。主瓣宽度仍为
,但是旁瓣宽度更小,旁瓣小于主瓣峰值的1%。

图5-6 汉明(Hamming)窗
(5)布拉克曼(Blacdman)窗
布拉克曼窗又称二阶升余弦窗,它对旁瓣进行了进一步的抑制,其函数表达式为

其图形如图5-7所示。
(6)凯泽窗(Kaiser)
凯泽窗是一种适应性较强的窗,其函数的表示式为

其中I0(μ)是第一类变形零阶贝塞尔(Bessel)函数,可以表示成幂级数的形式:

图5-7 布拉克曼(Blacdman)窗

β是一个可以自由选择的参数,可以同时调整主瓣宽度和旁瓣电平,β越大,则窗口越窄,旁瓣越小,但是主瓣宽度就会相应地增加。其图形如图5-8所示。
对于凯泽窗函数的设计,遵循以下几个步骤:
(1)给定所要求的频率响应函数Hd(eiω)Hd(eiω)。

图5-8 凯泽(Kaiser)窗
(2)求hd(n)= IDTFT(Hd(eiω))。
(3)由过渡带宽及阻带最小带宽的要求,选定窗口的形状及n的大小。
(4)求得所设计的滤波器的单位样值响应h(n)= w(n)hd(n),n = 0,1, …, N-1。
(5)求Hd(eiω)= DTFT(h(n)),检验是否满足系统要求,如果不满足,则需要重新设计。
下面介绍几个相关的MATLAB函数:
b = fir1(N, Wn)
说明:MATLAB中用窗函数法来设计fir低通滤波器的函数,其中b为返回的单位样值响应,其长度为N,Wn为通带截止频率。
b = fir1(N, Wn, ’ high’)
说明:关键字’ high’表明设计的是高通滤波器,Wn为阻带截止频率。
当Wn为二维向量,并带上关键字’ bandpass’时,表示设计的是带通滤波器,当关键字为’ stop’时,表示设计的是带阻滤波器。
b = fir1(N, Wn, Win)
说明:该函数表示用向量Win作为窗函数设计滤波器。
表5-1列举了在MATLAB中以上窗口函数的生成函数。
表5-1 MATLAB窗口的生成函数

例5.1 给定一理想低通FIR滤波器的频率特性:

分别用矩形窗和海明窗设计该滤波器,要求具有线性相位,系数长度为29,即N =29。
MATLAB程序如下:
%用矩形窗设计

其滤波器如图5-9所示。

图5-9 例5.1设计的低通FIR滤波器(矩形窗)
b为单位样值响应。


如果用海明窗进行设计,只需将上述程序第三行变为
Win = hamming(N+1)
即可,就不再赘述。
对于Kaiser窗口比较特别,有专门的函数kaiserord来估计滤波器的一些参数,下面给出用Kaier窗函数设计滤波器的通用程序。
例5.2 用Kaier窗函数设计滤波器的通用程序:

输入:fpts =[0.3, 0.7] , mag =[1, 0] , dev =[0.01, 0.1] ,可以得到滤波器如图5-10所示。

图5-10 例5.2用Kaier窗函数设计的滤波器
b即为此fir滤波器的系数向量。

程序中fpts是指从左到右的通带或阻带的截止频率,mag是指滤波器的幅度响应的范围,通常是一个二维向量,一般是[0, 1] ,dev是对应通带或阻带的最大衰减或最小衰减。
N是Kaiser窗口的长度,Wn是对应通带或阻带的截止频率,beta是Kaiser窗中适合的β值,ftype是指此滤波器所属的类型。
5.2.2 频率采样法
窗函数是从时域出发,把理想的hd(n)用一定开关的窗函数截取成有限长的h(n),以此来近似逼近理想的hd(n)。这样得到的频率响应H(eiω)逼近于所要求的理想的频率响应Hd(eiω)。
频率抽样法是从频域出发,把给定的理想频率响应Hd(eiω)加以等间隔抽样,即

以此作为实际滤波器的频率特性的抽样值,即令

知道H(k)后,由DFT定义,可以用频域的这N个抽样值H(k)来唯一确定一个有限长序列h(n)。同样利用这N个抽样值可以得出这个序列的Z变换H(z)及其频率响应H(eiω)。当h(n)是偶对称的,N为奇数时,可以将此频率响应函数写成(参见[16] ,p.155~157):

若理想函数是线性相位的,可以得到(参见[16] ,p.159~161):

将抽样值用Hk(标量)和θk表示:

由(5.19)可知,有关系式:

对于第二类线性相位FIR滤波器,即h(n)偶对称,N为偶数时,其幅度函数是奇对称的,即

这时Hk也满足奇对称要求,即

对Hd(eiω)进行频率抽样,在z平面单位圆上的N个等间隔点上抽取频率响应值。有两种方法,第一种是第一抽样点在ω = 0处,第二种是第一抽样点
在ω =
处,每种情况又可以分为N为奇数和N为偶数两种。
下面介绍MATLAB中频率采样法所对应的函数:
b = fir2(N, F, A);
说明:N为采样的点数,F, A分别为频率采样法所采样的频率值和对应的幅值。
例5.3 设抽样的频率和对应的幅值为f =[0 0.4 0.4 1] ,m =[1 1 0 0] ,用频率抽样法设计FIR滤波器。
MATLAB程序如下:

得到的滤波器如图5-11所示。

图5-11 例5.3用频率抽样法设计的FIR滤波器
b1, b2就是两种情况下的单位样值响应。


例5.4 用频率采样法设计FIR滤波器:

MATLAB程序如下:


得到的滤波器的图形如图5-12所示。

图5-12 例5.4用频率采样法设计的FIR滤波器
b是抽样点为11个的结果,b为所求得的单位样值响应。


MATLAB中的设计FIR滤波器的一些其他方法:
(1)Chebyshev最佳一致逼近设计FIR滤波器
格式:[N, Fo, Ao, W]= firpmord(f, a, dev, Fs)
说明:该函数设计FIR滤波器的一些参数估计。f是指通带或阻带的频率(Hz),a是其对应的理想幅度值,dev是对应的衰减(dB),Fs是抽样频率。N是序列长度,Fo和Ao是适合该FIR滤波器的频率和幅度向量,长度与f, a相等。
例5.5 用Chebyshev最佳一致逼近方法设计FIR滤波器。
通用MATLAB程序如下:

输入:fedge =[1500, 2000] ,mval =[1, 0] ,dev =[0.01, 0.1] ,FT = 8000,得到的滤波器如图5-13所示。

图5-13 例5.5用Chebyshev最佳一致逼近设计的滤波器


(2)最小平方法设计线性相位FIR滤波器
格式:b = firls(N, F, A, W)
说明:该函数用最小平方法设计线性相位FIR滤波器。b为返回的单位样值,N是阶数,F, A的含义与fipmord中的f, a相同,W为权向量。
例5.6 用最小平方法设计FIR滤波器。
通用MATLAB程序如下:

输入:N =50,fpts =[0.3, 0.7] ,mag =[1, 0] ,wt =1,得到的滤波器如图5-14所示。
b为滤波器的系数向量。


图5-14 例5.6最小平方法设计的线性相位FIR滤波器


例5.7 设计一个60阶的滤波器,要求设计的滤波器从0到
的幅度为1,从
到
的幅度为
,从
到
的幅度响应为
,从
到
的幅度响应为
,从
到π的幅度响应为
。画出理想滤波器和设计得到的滤波器的幅度频率响应并进行比较。
MATLAB程序如下:

得到的滤波器如图5-15所示。

图5-15 例5.7设计的FIR滤波器
b为其滤波器Z变换的系数向量。


窗函数法和频率采样法都是FIR最基本的方法,此外MATLAB中还有最小平方误差法设计FIR滤波器,其函数为firls;带约束的最小平方误差FIR设计法,其函数为fircls;等等。这些方法比较复杂,在此就不再赘述,具体函数用法可以查阅MATLAB相关文档。
习题
5.1 用矩形窗、三角形窗、海宁窗、海明窗、布莱克曼窗和凯塞-贝塞尔窗设计满足线性相位的FIR低通滤波器。设窗口长度N =11,3 dB截止频率是ωc=0.2π rad/s。
5.2 用矩形窗设计一个线性相位高通滤波器,逼近滤波器的频率响应Hd(ejω)为

(1)求出该理想高通滤波器的单位抽样响应hd(n)。
(2)写出矩形窗设计方法的h(n)的表达式,确定τ和N的关系。
(3)N的取值有什么限制?为什么?
5.3 分别用矩形窗、三角形窗、海宁窗、海明窗设计线性相位FIR数字低通滤波器,技术指标要求为
ωp=0.6π, αp=0.25 dB, ωs=0.4π, αs=40 dB.
(1)编写MATLAB程序。
(2)画出数字滤波器的幅频响应曲线。