1
MATLAB与数字信号处理实验
1.8.2 5.2 FIR滤波器的设计

5.2 FIR滤波器的设计

目前常用的FIR滤波器设计方法主要有两种,即窗函数设计法和频率采样法。两种方法分别从时域和频域上进行处理,从而得到想要的冲激响应。

5.2.1 窗函数设计法

1.设计原理

窗函数设计法的原理一般是先给出所要求的理想滤波器频率响应Hd(e),要求设计一个FIR数字滤波器频率响应H(e)来逼近Hd(e)。先对Hd(e)作傅里叶反变换,得到理想滤波器的冲激响应hd(n)。我们知道,理想滤波器的冲激响应必定是无限长的,且是非因果的,而所要设计滤波器的冲激响应又是有限长的。因此,就要用一个有限长的h(n)来逼近无限长的hd(n)。一个有效办法是用有限长的窗口序列w(n)对这个无限长序列hd(n)进行截断,将其变成有限长的序列,即

img414

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

img415

作其IDFT,有

img416

选用窗口函数为矩形窗口函数:

w(n)= RN(n).

但是按照线性相位的约束,h(n)必须是偶对称的,对称中心应为长度的一半img417,因而必须有img418,所以

img419

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

img420

此时,就一定满足线性相位特性的条件了。如果对窗函数进行进一步的讨论(参见[15] ,第311~315页),不难发现,一般希望窗函数应满足两项要求:

(1)窗谱主瓣尽可能地窄,以获得较陡的过渡带。

(2)尽量减少窗谱最大旁瓣的相对幅度,也就是使能量尽量集中于主瓣,这样可增大主瓣的衰减。

2.常用的几种窗口

(1)矩形窗

矩形窗的函数表达式为

img421

其图形如图5-3所示。

img422

图5-3 矩形窗

(2)三角形窗

三角形窗的函数表达式为

img423

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

img425

图5-4 三角形窗

(3)汉宁(Hanning)窗

汉宁窗又称升余弦窗,其函数表达式为

img426

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

img428

图5-5 汉宁(Hanning)窗

(4)海明(Hamming)窗

对升余弦加以改进,可得到旁瓣更小的效果。海明窗又称改进的升余弦窗,其函数表达式为

img429

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

img431

图5-6 汉明(Hamming)窗

(5)布拉克曼(Blacdman)窗

布拉克曼窗又称二阶升余弦窗,它对旁瓣进行了进一步的抑制,其函数表达式为

img432

其图形如图5-7所示。

(6)凯泽窗(Kaiser)

凯泽窗是一种适应性较强的窗,其函数的表示式为

img433

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

img434

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

img435

β是一个可以自由选择的参数,可以同时调整主瓣宽度和旁瓣电平,β越大,则窗口越窄,旁瓣越小,但是主瓣宽度就会相应地增加。其图形如图5-8所示。

对于凯泽窗函数的设计,遵循以下几个步骤:

(1)给定所要求的频率响应函数Hd(e)Hd(e)。

img436

图5-8 凯泽(Kaiser)窗

(2)求hd(n)= IDTFT(Hd(e))。

(3)由过渡带宽及阻带最小带宽的要求,选定窗口的形状及n的大小。

(4)求得所设计的滤波器的单位样值响应h(n)= w(n)hd(n),n = 0,1, …, N-1。

(5)求Hd(e)= 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窗口的生成函数

img437

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

img438

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

MATLAB程序如下:

%用矩形窗设计

img439

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

img440

图5-9 例5.1设计的低通FIR滤波器(矩形窗)

b为单位样值响应。

img441

img442

如果用海明窗进行设计,只需将上述程序第三行变为

Win = hamming(N+1)

即可,就不再赘述。

对于Kaiser窗口比较特别,有专门的函数kaiserord来估计滤波器的一些参数,下面给出用Kaier窗函数设计滤波器的通用程序。

例5.2 用Kaier窗函数设计滤波器的通用程序:

img443

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

img444

图5-10 例5.2用Kaier窗函数设计的滤波器

b即为此fir滤波器的系数向量。

img445

程序中fpts是指从左到右的通带或阻带的截止频率,mag是指滤波器的幅度响应的范围,通常是一个二维向量,一般是[0, 1] ,dev是对应通带或阻带的最大衰减或最小衰减。

N是Kaiser窗口的长度,Wn是对应通带或阻带的截止频率,beta是Kaiser窗中适合的β值,ftype是指此滤波器所属的类型。

5.2.2 频率采样法

窗函数是从时域出发,把理想的hd(n)用一定开关的窗函数截取成有限长的h(n),以此来近似逼近理想的hd(n)。这样得到的频率响应H(e)逼近于所要求的理想的频率响应Hd(e)。

频率抽样法是从频域出发,把给定的理想频率响应Hd(e)加以等间隔抽样,即

img446

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

img447

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

img448

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

img449

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

img450

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

img451

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

img452

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

img453

对Hd(e)进行频率抽样,在z平面单位圆上的N个等间隔点上抽取频率响应值。有两种方法,第一种是第一抽样点在ω = 0处,第二种是第一抽样点

在ω =img454处,每种情况又可以分为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程序如下:

img455

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

img456

图5-11 例5.3用频率抽样法设计的FIR滤波器

b1, b2就是两种情况下的单位样值响应。

img457

img458

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

img459

MATLAB程序如下:

img460

img461

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

img462

图5-12 例5.4用频率采样法设计的FIR滤波器

b是抽样点为11个的结果,b为所求得的单位样值响应。

img463

img464

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程序如下:

img465

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

img466

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

img467

img468

(2)最小平方法设计线性相位FIR滤波器

格式:b = firls(N, F, A, W)

说明:该函数用最小平方法设计线性相位FIR滤波器。b为返回的单位样值,N是阶数,F, A的含义与fipmord中的f, a相同,W为权向量。

例5.6 用最小平方法设计FIR滤波器。

通用MATLAB程序如下:

img469

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

b为滤波器的系数向量。

img470

img471

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

img472

img473

例5.7 设计一个60阶的滤波器,要求设计的滤波器从0到img474的幅度为1,从img475img476的幅度为img477,从img478img479的幅度响应为img480,从img481img482的幅度响应为img483,从img484到π的幅度响应为img485。画出理想滤波器和设计得到的滤波器的幅度频率响应并进行比较。

MATLAB程序如下:

img486

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

img487

图5-15 例5.7设计的FIR滤波器

b为其滤波器Z变换的系数向量。

img488

img489

窗函数法和频率采样法都是FIR最基本的方法,此外MATLAB中还有最小平方误差法设计FIR滤波器,其函数为firls;带约束的最小平方误差FIR设计法,其函数为fircls;等等。这些方法比较复杂,在此就不再赘述,具体函数用法可以查阅MATLAB相关文档。

习题

5.1 用矩形窗、三角形窗、海宁窗、海明窗、布莱克曼窗和凯塞-贝塞尔窗设计满足线性相位的FIR低通滤波器。设窗口长度N =11,3 dB截止频率是ωc=0.2π rad/s。

5.2 用矩形窗设计一个线性相位高通滤波器,逼近滤波器的频率响应Hd(e)为

img490

(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)画出数字滤波器的幅频响应曲线。