IIR滤波器设计

1. 简介

IIR滤波器(无限冲激响应滤波器)相比FIR(有限冲激响应滤波器),是一种在运算效率方面非常高效的滤波器,相比于FIR滤波器,在实现同等的滤波效果时,IIR滤波器所需的阶数要比FIR滤波器低很多。FIR滤波器的阶数一方面取决于通带与阻带之间的增益(低阶滤波器应用高增益,会导致吉布斯效应),一方面取决于滤波精度(FIR滤波器的精度为 F s / N F_s / N Fs/N F s F_s Fs为采样率, N N N为滤波器阶数)。而IIR滤波器阶数一方面也是由通带和阻带之间的增益差决影响的,一方面则是由通带与阻带之间的频率的比值决定。但是IIR滤波器有两个缺点:相位响应不是线性的;阶数过高时难以稳定。

通常,定义一个线性时不变系统的传输函数如下:

y [ n ] + a [ 1 ] y [ n − 1 ] + a [ 2 ] y [ n − 2 ] + ⋯ + a [ M ] y [ n − M ] = b [ 0 ] x [ n ] + b [ 1 ] x [ n − 1 ] + ⋯ + b [ N ] x [ n − N ] (1) y[n] + a[1]y[n-1] + a[2] y[n - 2] + \dots + a[M]y[n-M] \\ = b[0]x[n] + b[1]x[n-1] + \dots + b[N]x[n - N] \tag{1} y[n]+a[1]y[n1]+a[2]y[n2]++a[M]y[nM]=b[0]x[n]+b[1]x[n1]++b[N]x[nN](1)

对于FIR滤波器来说,输出只与输入有关,即 a [ n ] = 0 a[n] = 0 a[n]=0,而IIR滤波器的输出不仅与输入有关,还与过去的输出有关,即 a [ n ] a[n] a[n]不总是为0。

2. 设计步骤简明

IIR滤波器设计相比于FIR滤波器,所需的计算和步骤都更为复杂,很多书上开始讲这一点都从艰深的步骤开始,而对于我这样的数学不好的新手来说则是一头雾水。实际上在一开始掌握IIR滤波器设计的大体流程对于实用学习来说是非常有益的。接下来我就从工程实用的角度来大概说明IIR滤波器设计的几个重要方法和步骤。

  1. 与FIR滤波器可以直接从频域设计频率响应然后通过傅里叶变换得到时域滤波器不同,IIR滤波器无法从时域直接设计响应,而是通过经典模拟滤波器转换而来。几种经典模拟滤波器分别是巴特沃兹滤波器、切比雪夫I型和II型滤波器、椭圆滤波器。而这几种滤波器都是有参考表的,可以根据滤波器阶数直接确定模拟滤波器系数。
  2. 以上所得的模拟滤波器都是低通形式的,因此要采用一些方法将其转换为带通、带阻和高通滤波器。
  3. 将上述转换后的不同形式的模拟滤波器转换成数字滤波器。转换的方法有冲激不变法、双线性变换法。最常用的是双线性变换法,这也是这篇博客所讲的方法。
  4. 若要像FIR滤波器那样,针对不同频段有不同的增益,那么就需要将IIR滤波器进行串联或并联,后面我会讲一篇音频EQ的例子,它就是使用了IIR滤波器并联。

以上基本就是IIR滤波器的总结,其中出现了几个大家会在教材里经常见到的关键字。不过IIR滤波器和模拟滤波器相关,因此接下来首先要对拉普拉斯变换和Z变换有一个大概的认识。

3. 拉普拉斯变换和Z变换

这里只是简单让大家对这两种变换有个印象,不会具体讲理论。需要的同学可以查看其他教材。

3.1 拉普拉斯变换

定义拉普拉斯变换如下:

X ( s ) = ∫ − ∞ + ∞ x ( t ) e − s t (2) X(s) = \int_{-\infty}^{+\infty}x(t)e^{-st} \tag{2} X(s)=+x(t)est(2)

其中, s = σ + j Ω s = \sigma + j\Omega s=σ+jΩ

拉普拉斯变换是描述模拟域的。如果将 σ \sigma σ w w w分别作为平面坐标系的x轴和y轴,这个平面就是我们定义的s平面。

在这里插入图片描述

可以看到,拉普拉斯变换实际上就是为将信号幅值增益为原来的 e σ e^\sigma eσ倍。如果 σ = 0 \sigma = 0 σ=0,则特化为连续信号的傅里叶变换,落在s平面上就是虚轴。

一个信号的拉普拉斯变换是有收敛域的。如果x(t)的拉普拉斯变换是有理的,如果x(t)是右边信号,那么其收敛域ROC就位于s平面上最右边极点的右边。如果x(t)是左边信号,那么其收敛域就位于s平面上最左边极点的左边。 我们实际处理的信号都是有理的且为右边信号,因此适用于第一种情况。
关于更详细的拉普拉斯变换的知识,可以参考奥本海默的《信号与系统》。

3.2 Z变换

定义Z变换为

X [ z ] = ∑ n = − ∞ + ∞ x [ n ] z − n (3) X[z] = \sum^{+\infty}_{n = -\infty}x[n]z^{-n} \tag{3} X[z]=n=+x[n]zn(3)

其中, z = r e j w z = re^{jw} z=rejw
若将 r r r看作 z z z的幅值, w w w看作 z z z的相角,则两者的关系可看作是一个极坐标表示的平面,称为z平面。
在这里插入图片描述
和拉普拉斯变换一致,可以看作是将信号 x [ n ] x[n] x[n]的幅值增大到 r r r倍。如果 r = 0 r=0 r=0,那么就特化离散信号的傅里叶变换,落在z平面的单位圆上。

基于Z变换,我们可以将数字域LTI系统的转换方程用两个多项式的比来表示。
首先,基于以下推导:

Z ( x [ n − k ] ) = ∑ n = − ∞ + ∞ x [ n − k ] z − n = ∑ n = − ∞ + ∞ x [ n − k ] z − ( n − k ) z − k = z − k ∑ n = − ∞ + ∞ x [ n − k ] z − ( n − k ) = z − k X [ z ] Z(x[n - k]) = \sum^{+\infty}_{n = -\infty}x[n - k]z^{-n} = \sum^{+\infty}_{n = -\infty}x[n - k]z^{-(n - k)}z^{-k}\\ =z^{-k}\sum^{+\infty}_{n = -\infty}x[n - k]z^{-(n - k)} = z^{-k}X[z] Z(x[nk])=n=+x[nk]zn=n=+x[nk]z(nk)zk=zkn=+x[nk]z(nk)=zkX[z]

应用到式1

y [ n ] + a [ 1 ] y [ n − 1 ] + a [ 2 ] y [ n − 2 ] + ⋯ + a [ M ] y [ n − M ] = b [ 0 ] x [ n ] + b [ 1 ] x [ n − 1 ] + ⋯ + b [ N ] x [ n − N ] ⇓ Y [ z ] + a [ 1 ] Y [ Z ] z − 1 + a [ 2 ] Y [ z ] z − 2 + ⋯ + a [ M ] Y [ z ] z − M = b [ 0 ] X [ z ] + b [ 1 ] X [ Z ] z − 1 + ⋯ + b [ N ] X [ z ] z − N y[n] + a[1]y[n-1] + a[2] y[n - 2] + \dots + a[M]y[n-M] \\ = b[0]x[n] + b[1]x[n-1] + \dots + b[N]x[n - N] \\ \Downarrow\\ Y[z] + a[1]Y[Z]z^{-1} + a[2]Y[z]z^{-2} + \dots + a[M]Y[z]z^{-M}\\ = b[0]X[z] + b[1]X[Z]z^{-1} + \dots + b[N]X[z]z^{-N} y[n]+a[1]y[n1]+a[2]y[n2]++a[M]y[nM]=b[0]x[n]+b[1]x[n1]++b[N]x[nN]Y[z]+a[1]Y[Z]z1+a[2]Y[z]z2++a[M]Y[z]zM=b[0]X[z]+b[1]X[Z]z1++b[N]X[z]zN

H [ z ] = Y [ z ] X [ z ] = ∑ k = 0 N b [ k ] z − k 1 + ∑ k = 1 M a [ k ] z − k (4) H[z] = \frac{Y[z]}{X[z]} = \frac{\sum_{k = 0}^{N} b[k]z^{-k}}{1 + \sum_{k = 1}^{M}a[k]z^{-k}} \tag{4} H[z]=X[z]Y[z]=1+k=1Ma[k]zkk=0Nb[k]zk(4)

为LTI系统的转换方程。
也可以写成

H [ z ] = Y [ z ] X [ z ] = ∑ k = 0 N b [ k ] z − k ∑ k = 0 M a [ k ] z − k H[z] = \frac{Y[z]}{X[z]} = \frac{\sum_{k = 0}^{N} b[k]z^{-k}}{\sum_{k = 0}^{M}a[k]z^{-k}} H[z]=X[z]Y[z]=k=0Ma[k]zkk=0Nb[k]zk

此时 a [ 0 ] = 1 a[0] = 1 a[0]=1

可以将其变换为:

H [ z ] = g ( z − z 0 ) ( z − z 1 ) … ( z − z N ) ( z − p 0 ) ( z − p 1 ) … ( z − z M ) (5) H[z] = g\frac{(z - z_0)(z - z_1)\dots(z-z_N)}{(z - p_0)(z-p_1)\dots(z-z_M)} \tag{5} H[z]=g(zp0)(zp1)(zzM)(zz0)(zz1)(zzN)(5)

其中, z k z_k zk为零点, p k p_k pk为极点。同拉普拉斯变换一样,Z变换也是有收敛域的。如果x[n]是右边序列,且x[n]的Z变换X[z]是有理的,那么其收敛域就位于模最大的极点的外边。

4. 双线性变换法

4.1 模拟域与数字域的映射

不论是冲激响应不变法还是双线性变换法,都是为了将模拟域滤波器转换到数字域滤波器。冲激响应不变法使用了一种较为直观的方式,直接对模拟滤波器的冲激响应进行采样,按照上一节讲的,直观地使 z = e s T z = e^{sT} z=esT T T T为采样周期。但是这样一来就会引入频谱混叠,因为这样的转换关系使得s平面的 j Ω j\Omega jΩ轴每隔 2 π T \frac{2\pi}{T} T2π便会映射到z平面上的单位圆一周。 因此冲激响应不变法不宜构造高通滤波器。

因此,要使用另一种变换关系,这种关系应保证:

  1. s平面的整个 j Ω j\Omega jΩ轴映射到z平面上的单位圆一周。
  2. G ( s ) G(s) G(s)是稳定的,那么 H [ z ] H[z] H[z]也是稳定的。
  3. 这种映射是可逆的,既能由 G ( s ) G(s) G(s)得到 H [ z ] H[z] H[z],也能由 H [ z ] H[z] H[z]得到 G ( s ) G(s) G(s)
  4. 如果 G ( j 0 ) = 1 G(j0) = 1 G(j0)=1,那么 H [ e j 0 ] H[e^{j0}] H[ej0]也应等于1。

双线性变换便是满足上面四个条件的一种变换形式:

s = 2 T z − 1 z + 1 (6) s = \frac{2}{T}\frac{z - 1}{z + 1} \tag{6} s=T2z+1z1(6)

其反向转换为:

z = 1 + T 2 s 1 − T 2 s (7) z = \frac{1 + \frac{T}{2}s}{1 - \frac{T}{2}s} \tag{7} z=12Ts1+2Ts(7)

对于s平面特定的一点 s = α 0 + j Ω 0 s = \alpha_0 + j\Omega_0 s=α0+jΩ0,根据式7得:

z = ( 1 + T 2 α 0 ) + j T 2 Ω 0 ( 1 − T 2 α 0 ) − j T 2 Ω 0 z = \frac{(1 + \frac{T}{2}\alpha_0) + j\frac{T}{2}\Omega_0}{(1 - \frac{T}{2}\alpha_0) - j\frac{T}{2}\Omega_0} z=(12Tα0)j2TΩ0(1+2Tα0)+j2TΩ0

其模为

∣ z ∣ 2 = ( 1 + T 2 α 0 ) 2 + ( T 2 Ω 0 ) 2 ( 1 − T 2 α 0 ) 2 + ( T 2 Ω 0 ) 2 |z|^2 = \frac{(1 + \frac{T}{2}\alpha_0)^2 + (\frac{T}{2}\Omega_0)^2}{(1 - \frac{T}{2}\alpha_0)^2 + (\frac{T}{2}\Omega_0)^2} z2=(12Tα0)2+(2TΩ0)2(1+2Tα0)2+(2TΩ0)2

因此,对于不同的 α 0 \alpha_0 α0,有

∣ z ∣ 2 = { > 1 , α 0 > 0 = 1 , α 0 = 0 < 1 , α 0 < 0 |z|^2 = \begin{cases} \gt 1, & \alpha_0 > 0\\ = 1, & \alpha_0 = 0\\ \lt 1, & \alpha_0 < 0 \end{cases} z2=>1,=1,<1,α0>0α0=0α0<0

因此我们可以看到,s平面上的虚轴 j Ω j\Omega jΩ映射到z平面单位圆上, α > 0 \alpha > 0 α>0的右半平面映射到z平面的单位圆外, α < 0 \alpha < 0 α<0的左半平面映射到z平面的单位圆内。

由s平面的虚轴( s = j Ω s = j\Omega s=jΩ)和z平面的单位圆( z = e j w z = e^{jw} z=ejw)之间的映射关系,由式6不难推出 w w w Ω \Omega Ω之间的映射关系。

j Ω = T 2 ( 1 − e − j w 1 + e − j w ) = j T 2 tan ⁡ ( w 2 ) j\Omega = \frac{T}{2}(\frac{1 - e^{-jw}}{1 + e^{-jw}}) = j\frac{T}{2}\tan(\frac{w}{2}) jΩ=2T(1+ejw1ejw)=j2Ttan(2w)

Ω = T 2 tan ⁡ ( w 2 ) (8) \Omega = \frac{T}{2}\tan(\frac{w}{2}) \tag{8} Ω=2Ttan(2w)(8)

或反之

w = 2 arctan ⁡ Ω T 2 (9) w = 2\arctan{\frac{\Omega T}{2}} \tag{9} w=2arctan2ΩT(9)

式8和9便是模拟滤波器和数字滤波器之间的频率转换关系。注意,模拟域和数字域之间的频率映射并非线性关系,因此,我们在将数字域的截止频率映射到模拟域时,需要通过式9进行换算,这一操作被称为预畸。

4.2 模拟滤波器的性能指标

4.2.1 基本参数定义

前面已经提到过,IIR滤波器设计的原型都是模拟低通滤波器,因此此处的性能指标都是模拟低通滤波器的性能指标。

在这里插入图片描述
上图是一个一般的低通滤波器的频响。注意,之后的参数中,下标s代表阻带(stop),下标p代表通带(pass) δ p \delta_p δp δ s \delta_s δs称为波纹,通常波纹以单位为dB的峰值通带波纹 α p \alpha_p αp和最小阻带衰减 α s \alpha_s αs的的形式来给出:

α p = − 20 lg ⁡ ( 1 − δ p ) d B \alpha_p = -20\lg(1 - \delta_p){\rm{dB}} αp=20lg(1δp)dB

α s = − 20 lg ⁡ ( δ s ) d B \alpha_s = -20\lg(\delta_s){\rm{dB}} αs=20lg(δs)dB

滤波器的频响性能指标以 a ( Ω ) a(\Omega) a(Ω)给出,称为损益函数衰减函数,定义为增益的负值,单位为 d B \rm{dB} dB,即 − 20 lg ⁡ ∣ H a ( j Ω ) ∣ -20\lg|H_a(j\Omega)| 20lgHa(jΩ)

以上性能参数还可以以归一化形式给出。
在这里插入图片描述
假定通带幅度最大值为1,而通带波纹记为 1 1 + ε 2 \frac{1}{\sqrt{1 + \varepsilon^2}} 1+ε2 1,是通带波纹最小值。因此,最大通带增益或最小通带损益是0dB。最大阻带波纹用 1 A \frac{1}{A} A1表示,从而最小阻带衰减为 − 20 lg ⁡ ( 1 / A ) -20\lg(1/A) 20lg(1/A)
在模拟滤波器理论中还定义了另外两个参数。第一个被称为过渡比选择性参数,定义为通带边界频率 Ω p \Omega_p Ωp和阻带边界频率 Ω s \Omega_s Ωs之比,通常用 k k k表示。

k = Ω p Ω s k = \frac{\Omega_p}{\Omega_s} k=ΩsΩp

对于低通滤波器, k < 1 k < 1 k<1

第二个参数称为分辨参数,用 k 1 k_1 k1表示

k 1 = ε A 2 − 1 k_1 = \frac{\varepsilon}{\sqrt{A^2 - 1}} k1=A21 ε

之前我们在FIR滤波器设计中见过吉布斯现象,如果通带和阻带截止频率过于接近而且两者之间增益差过大,滤波器阶数过低,都会导致出现吉布斯现象,也就是通带和阻带内的波纹。也就是通带阻带的截止频率、增益差、通带或阻带内波纹以及滤波器阶数是成一个制约关系的。通常我们在设计IIR滤波器时,都是先确定要求的性能参数:通带内波纹大小、通带和阻带的截止频率以及阻带损益。通过以上三个指标,我们便能获知符合要求的滤波器阶数,然后从模拟域构建对应阶数的模拟滤波器。

对于常用的四种模拟滤波器原型:巴特沃兹、切比雪夫I型和II型、椭圆滤波器,其对应的阶数都有不同的计算方式。由于推导过程过于复杂,因此直接给出。注意,计算出的滤波器阶数不一定是正数,向上取整即可。

4.2.2 巴特沃兹滤波器阶数公式

N = lg ⁡ ( 1 / k 1 ) lg ⁡ ( 1 / k ) N = \frac{\lg(1/k_1)}{\lg(1/k)} N=lg(1/k)lg(1/k1)

巴特沃兹低通滤波器的频率响应通常如下:

在这里插入图片描述

4.2.3 切比雪夫I型和II型滤波器阶数公式

N = arccosh ⁡ ( 1 / k 1 ) arcosh ⁡ ( 1 / k ) N = \frac{\operatorname{arccosh}(1/k_1)}{\operatorname{arcosh}(1/k)} N=arcosh(1/k)arccosh(1/k1)

其中, arcosh ⁡ \operatorname{arcosh} arcosh是反双曲余弦。

低通切比雪夫I型滤波器的频响如下:
低通切比雪夫I型滤波器响应

低通切比雪夫II型滤波器的频响则是反了过来,波纹在阻带里:

在这里插入图片描述

4.2.4 椭圆滤波器阶数公式

N ≈ 2 lg ⁡ ( 4 / k 1 ) lg ⁡ ( 1 / ρ ) N \approx \frac{2\lg(4 / k_1)}{\lg(1/\rho)} Nlg(1/ρ)2lg(4/k1)

其中, ρ \rho ρ的计算方式如下:

k ′ = 1 − k 2   ρ 0 = 1 − k ′ 2 ( 1 + k ′ )   ρ = ρ 0 + 2 ( ρ 0 ) 5 + 15 ( ρ 0 ) 9 + 150 ( ρ 0 ) 13 k' = \sqrt{1 - k^2}\\ \space\\ \rho_0 = \frac{1-\sqrt{k'}}{2(1 + \sqrt{k'})}\\ \space\\ \rho = \rho_0 + 2(\rho_0)^5 + 15(\rho_0)^9 + 150(\rho_0)^{13} k=1k2  ρ0=2(1+k )1k  ρ=ρ0+2(ρ0)5+15(ρ0)9+150(ρ0)13

低通椭圆滤波器的频响如下:

在这里插入图片描述

由上式,我们可以看到这几种原型模拟滤波器的频响特征,在实际应用时可根据需要选取。另外有个比较重要的特性就是不同的滤波器在达到相同的损益指标时,所需的阶数是不同的。从直观上来说,相比于巴特沃兹滤波器在通带和阻带内完全平坦,切比雪夫滤波器和椭圆滤波器的波纹则是逐渐劣化的。在牺牲了波纹特性后,它们就可以用较小的阶数达到相同的损益值,其中,椭圆滤波器所需的阶数是最小的。

5. 三种模拟滤波器原型

前面已经说了那么多,现在是时候看看三种模拟滤波器的原型了。关于如何设计模拟滤波器以及它们是怎么来的,这个不属于我们要讲的范畴,对这部分刨根问底的同学需要自己去看一下相关专业书籍。

巴特沃兹滤波器的频率响应为

∣ H a ( j Ω ) ∣ 2 = 1 1 + ( Ω / Ω c ) 2 N |H_a(j\Omega)|^2 = \frac{1}{1 + (\Omega/\Omega_c)^{2N}} Ha(jΩ)2=1+(Ω/Ωc)2N1

其中, Ω c \Omega_c Ωc被称为3dB截止频率,因为当 Ω = 0 \Omega = 0 Ω=0时, ∣ H a ( j Ω ) ∣ 2 = 1 |H_a(j\Omega)|^2 = 1 Ha(jΩ)2=1,当 Ω = Ω c \Omega = \Omega_c Ω=Ωc时, ∣ H a ( j Ω ) ∣ 2 = 1 / 2 |H_a(j\Omega)|^2 = 1/2 Ha(jΩ)2=1/2,由于这是幅度的平方,因此这里降低的dB值为 10 lg ⁡ ( 1 / 2 ) ≈ − 3 d B 10\lg(1/2) \approx -3\rm{dB} 10lg(1/2)3dB N N N为滤波器阶数,从这我们也可以看到阶数是如何影响滚降的。通带截止频率和阻带截止频率离得越近,所需要滤波器阶数越高。

切比雪夫I型滤波器的频率响应为

∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 T N 2 ( Ω / Ω p ) |H_a(j\Omega)|^2 = \frac{1}{1 + \varepsilon^2T_N^2(\Omega/\Omega_p)} Ha(jΩ)2=1+ε2TN2(Ω/Ωp)1

其中, T N ( Ω ) T_N(\Omega) TN(Ω)是N阶切比雪夫多项式。

T N ( Ω ) = { cos ⁡ ( N arccos ⁡ Ω ) , ∣ Ω ∣ ≤ 1 cosh ⁡ ( N arccosh ⁡ Ω ) , ∣ Ω ∣ > 1 T_N(\Omega) = \begin{cases} \cos(N\arccos \Omega), |\Omega| \leq 1\\ \cosh(N\operatorname{arccosh}\Omega), |\Omega| > 1 \end{cases} TN(Ω)={cos(NarccosΩ),Ω1cosh(NarccoshΩ),Ω>1

切比雪夫II型滤波器的频率响应为

∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 [ T N ( Ω s / Ω p ) T N ( Ω s / Ω ) ] 2 |H_a(j\Omega)|^2 = \frac{1}{1 + \varepsilon^2[\frac{T_N(\Omega_s / \Omega_p)}{T_N(\Omega_s / \Omega)}]^2} Ha(jΩ)2=1+ε2[TN(Ωs/Ω)TN(Ωs/Ωp)]21

椭圆滤波器的频率响应如下

∣ H a ( j Ω ) ∣ 2 = 1 1 + ε 2 R N 2 ( Ω / Ω p ) |H_a(j\Omega)|^2 = \frac{1}{1 + \varepsilon^2R_N^2(\Omega / \Omega_p)} Ha(jΩ)2=1+ε2RN2(Ω/Ωp)1

其中, R N ( Ω ) R_N(\Omega) RN(Ω)是满足性质 R N ( 1 / Ω ) = 1 / R N ( Ω ) R_N(1 / \Omega) = 1 / R_N(\Omega) RN(1/Ω)=1/RN(Ω)的N阶有理函数,其分子的根落在区间 0 < Ω < 1 0 < \Omega < 1 0<Ω<1内,分母的根落在 1 < Ω < ∞ 1 < \Omega < \infin 1<Ω<内。

6. 从模拟低通滤波器构造模拟高通、带通、带阻滤波器

我们可以简单验证,以上三种模拟滤波器都是低通滤波器。为了得到高通、带通、带阻滤波器,我们需要对低通滤波器进行转换。有一些比较简单的直觉上的方法,比如要构造一个高通滤波器,只要让其频率为低通滤波器频率的倒数即可;带通滤波器则是由一个高通滤波器和一个低通滤波器串联得到;带阻滤波器可以由一个低通滤波器和高通滤波器并联得到。

为了避免模拟原型低通滤波器 H L P ( s ) H_{LP}(s) HLP(s)的拉普拉斯变量与目标滤波器 H D ( s ) H_D(s) HD(s)之间混淆,这里使用 s s s表示原型低通滤波器 H L P ( s ) H_{LP}(s) HLP(s)的拉普拉斯变量,用 s ^ \hat{s} s^表示目标滤波器 H D ( s ^ ) H_D(\hat{s}) HD(s^)的拉普拉斯变量,两者的频率分别用 Ω \Omega Ω Ω ^ \hat{\Omega} Ω^表示。

6.1 模拟高通滤波器设计

一个通带边界频率为 Ω p \Omega_p Ωp的原型低通滤波器 H L P ( s ) H_{LP}(s) HLP(s)可以用谱变换

s = Ω p Ω ^ p s ^ s = \frac{\Omega_p \hat{\Omega}_p}{\hat{s}} s=s^ΩpΩ^p

变换成一个通带边界频率为 Ω ^ p \hat{\Omega}_p Ω^p的高通滤波器 H H P ( s ^ ) H_{HP}(\hat{s}) HHP(s^)。在虚轴上,上面的变化被简化为

Ω = − Ω p Ω ^ p Ω ^ \Omega = -\frac{\Omega_p \hat{\Omega}_p}{\hat{\Omega}} Ω=Ω^ΩpΩ^p

上面的映射表明低通滤波器在正频率范围 0 ≤ Ω ≤ Ω p 0 \leq \Omega \leq \Omega_p 0ΩΩp的通带映射到高通滤波器在负频率范围 − ∞ < Ω ^ ≤ − Ω ^ p -\infin < \hat{\Omega} \leq -\hat{\Omega}_p <Ω^Ω^p内。而我们知道频谱是对称的,因此低通滤波器在负频率上的通带 − Ω p ≤ Ω ≤ 0 -\Omega_p \leq \Omega \leq 0 ΩpΩ0会映射到 Ω ^ p < Ω ^ ≤ ∞ \hat{\Omega}_p < \hat{\Omega} \leq \infin Ω^p<Ω^内。阻带也是同理。

6.2 模拟带通滤波器设计

模拟带通滤波器变换如下:

s = Ω p s ^ 2 + Ω ^ o 2 s ^ ( Ω ^ p 2 − Ω ^ p 1 ) s = \Omega_p \frac{\hat{s}^2 + \hat{\Omega}^2_o}{\hat{s} (\hat{\Omega}_{p2} - \hat{\Omega}_{p1} )} s=Ωps^(Ω^p2Ω^p1)s^2+Ω^o2

在虚轴上,简化为

Ω = − Ω p Ω ^ o 2 − Ω ^ 2 Ω ^ ( Ω ^ p 2 − Ω ^ p 1 ) \Omega = -\Omega_p \frac{\hat{\Omega}_o^2 - \hat{\Omega}^2}{\hat{\Omega}(\hat{\Omega}_{p2} - \hat{\Omega}_{p1})} Ω=ΩpΩ^(Ω^p2Ω^p1)Ω^o2Ω^2

其中, Ω ^ o \hat{\Omega}_o Ω^o称为带通滤波器的通带中心频率。由上式可知, Ω = 0 \Omega = 0 Ω=0映射到 Ω ^ o \hat{\Omega}_o Ω^o Ω ^ p 2 \hat{\Omega}_{p2} Ω^p2是带阻滤波器的上通带边界频率, Ω ^ p 1 \hat{\Omega}_{p1} Ω^p1是带阻滤波器的下通带边界频率。

6.3 模拟带阻滤波器设计

模拟带阻滤波器的变换如下:

s = Ω s s ^ ( Ω ^ s 2 − Ω ^ s 2 ) s ^ 2 + Ω ^ o 2 s = \Omega_s \frac{\hat{s} (\hat{\Omega}_{s2} - \hat{\Omega}_{s2})}{\hat{s}^2 + \hat{\Omega}_o^2} s=Ωss^2+Ω^o2s^(Ω^s2Ω^s2)

在虚轴上简化为

Ω = Ω s Ω ^ ( Ω ^ s 2 − Ω ^ s 1 ) Ω ^ o 2 − Ω ^ 2 \Omega = \Omega_s \frac{\hat{\Omega} (\hat{\Omega}_{s2} - \hat{\Omega}_{s1})}{\hat{\Omega}_o^2 - \hat{\Omega}^2} Ω=ΩsΩ^o2Ω^2Ω^(Ω^s2Ω^s1)

其中, Ω ^ s 2 \hat{\Omega}_{s2} Ω^s2为上阻带边界频率, Ω ^ s 1 \hat{\Omega}_{s1} Ω^s1为下阻带边界频率。

以上是从模拟域进行变换的,实际上也可以从数字域进行变换。这里不展开讲,因为模拟域变换用得比较多。

7. IIR滤波器设计步骤总结

以上基本就是设计IIR滤波器的基本要素,这里将步骤总结一下:

  1. 确定数字滤波器的性能指标,比如通带阻带频率、损益等。
  2. 由第四节双线性变换法我们知道,数字域到模拟域的频率映射不是线性的,因此,我们要通过式8将从数字域映射到模拟域,获得同类型的模拟滤波器的频率指标。这一步称为预畸。
  3. 通过第六节的变换关系,将目标模拟滤波器的指标转换为低通原型滤波器的指标。
  4. 通过第四节的性能指标,计算出模拟原型低通滤波器的阶数。
  5. 通过第五节讲的几种原型低通滤波器的频率响应,设计出符合性能要求的低通滤波器。
  6. 通过第六节的变换关系,将设计好的模拟原型低通滤波器变换为目标类型的模拟滤波器。
  7. 通过式9,将目标类型的模拟滤波器转换到数字域,即得到了目标数字滤波器。

8. 使用Matlab设计IIR滤波器

这里以切比雪夫II型滤波器为例。

假设我们的采样率是48000Hz,那么截止频率就是24000Hz。要设计一个通带边界频率为1000,阻带边界频率为1500的低通滤波器,阻带损益为40dB,代码如下:

clear all
close all

sampleRate = 48000;
maxFreq = sampleRate / 2;

Wp = 1000;
Ws = 1500;

lossGain = 40;

% 使用cheby2ord计算阶数和被重新调整过的边界频率。注意
% 这里频率参数统一是归一化的。第三个参数代表通带波纹。
[N, Wn] = cheb2ord(Wp / maxFreq, Ws / maxFreq, 1, lossGain);

% 使用cheby2计算滤波器系数。它是形如
% y[n]=b[0]x[n]+b[1]x[n−1]+⋯+b[N]x[n−N]+
% a[1]y[n−1]+a[2]y[n−2]+⋯+a[M]y[n−M]
% 的系数。
[b, a] = cheby2(N, lossGain, Wn, 'low');

freqz(b, a);

其频率响应和相位响应为

在这里插入图片描述
可见其完全符合预期,且相位响应不是线性的。

打印各数据如下:

N =

     7


Wn =

    0.0625


b =

    0.0051   -0.0238    0.0411   -0.0224   -0.0224    0.0411   -0.0238    0.0051


a =

    1.0000   -6.2280   16.6627  -24.8213   22.2308  -11.9698    3.5872   -0.4615

a为y的系数,b为x的系数,可以看到a的第一项实际上总是1。

9. 有限字长效应

IIR滤波器有个非常显著的缺点就是它的稳定性较差,FIR滤波器可以设计出任何阶数,但是IIR的滤波器阶数如果过高,就会导致不稳定。这是因为在程序中,数据类型都以二进制进行存储,而二进制存储浮点数,必然会有误差存在。因此,IIR滤波器的阶数不宜过高。
通过另一种方法可以规避有限字长效应,那就是将高阶IIR滤波器拆分成多个低阶IIR滤波器的串联。这一点从式5可以看出来。这样以来,就可以降低误差带来的影响。在matlab中,tf2sos函数可以将高阶传输函数转换为2阶传输函数。

其调用方式为

[sos, g] = tf2sos(b, a)

其中,g就是式5中的系数g。
sos的形式如下以及对应传输函数的形态如下,更详细的用法可以查看matlab的帮助文档。

在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐