系列文章目录

  • 【音频处理】如何“认识”一个滤波器?
  • 【音频处理】IIR滤波器设计(一)Biquad 滤波器
  • 【音频处理】IIR滤波器设计(二)模拟到数字

前言

在开始学习 IIR 滤波器之前,你还记得 z变换 吗?它可以简化数字滤波器的分析与设计,接下来内容将建立在 z变换 的基础上进行推导。如果你忘记了,那么可以在 【音频处理】如何“认识”一个滤波器? 复习下,除了z变换外,这篇博客中也提到的零点、极点等概念,相信这些会对你有帮助的。

接下来,将从最简单的滤波器开始介绍,并最终引出今天的主角双二阶滤波器(Biquad Filter),要介绍的滤波器包括:

  • 一阶前馈滤波器(1st order feed-forward filter)
  • 一阶反馈滤波器(1st order feedback filter)
  • 二阶前馈滤波器(2nd order feed-forward filter)
  • 二阶反馈滤波器(2nd order feedback filter)
  • 搁架式均衡器(Shelving filter)
  • 双二阶滤波器(Biquad Filter)

一阶前馈滤波器(1st order feed-forward filter)

作为最简单的滤波器,一阶前馈滤波器的差分方程非常易懂:
y(n)=a0x(n)+a1x(n−1)y(n) = a_0x(n) + a_1x(n-1) y(n)=a0​x(n)+a1​x(n−1)

z变换后:
H(z)=Y(z)X(z)=a0+a1z−1H(z) = \frac{Y(z)}{X(z)} = a_0 + a_1z^{-1} H(z)=X(z)Y(z)​=a0​+a1​z−1

其中 z=ejωz = e^{j\omega}z=ejω

计算频谱响应

我们假设 a0=a1=0.5a_0 = a_1 = 0.5a0​=a1​=0.5
H(z)=Y(z)X(z)=0.5+0.5z−1=0.5+0.5zH(z) = \frac{Y(z)}{X(z)} = 0.5 + 0.5z^{-1} = 0.5 + \frac{0.5}{z} H(z)=X(z)Y(z)​=0.5+0.5z−1=0.5+z0.5​

现在来计算它的频谱响应,我们取四个点:

  • DC: 0
  • Nyquist: π\piπ
  • 12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2
  • 14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

DC(0 Hz)

ω=0e−jω=e0=1H(ω)=0.5+0.5e−jω=1∣H(ω)∣=1\begin{aligned} &\omega = 0 \\ &e^{-j\omega} = e^{0} = 1 \\ &H(\omega) = 0.5 + 0.5e^{-j\omega} = 1 \\ \vert &H(\omega) \vert = 1 \end{aligned} ∣​ω=0e−jω=e0=1H(ω)=0.5+0.5e−jω=1H(ω)∣=1​

Nyquist: π\piπ

ω=πe−jω=e−jπ=cos⁡(π)−jsin⁡(π)=−1H(ω)=0.5+0.5e−jω=0∣H(ω)∣=0\begin{aligned} &\omega = \pi \\ &e^{-j\omega} = e^{-j\pi} = \cos(\pi) - j\sin(\pi) = -1 \\ &H(\omega) = 0.5 + 0.5e^{-j\omega} = 0 \\ \vert &H(\omega) \vert = 0 \end{aligned} ∣​ω=πe−jω=e−jπ=cos(π)−jsin(π)=−1H(ω)=0.5+0.5e−jω=0H(ω)∣=0​

12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2

ω=π/2e−jω=e−jπ/2=cos⁡(π/2)−jsin⁡(π/2)=−j1H(ω)=0.5+0.5e−jω=0.5−j0.5∣H(ω)∣=0.7071\begin{aligned} &\omega = \pi/2 \\ &e^{-j\omega} = e^{-j\pi/2} = \cos(\pi/2) - j\sin(\pi/2) = -j1\\ &H(\omega) = 0.5 + 0.5e^{-j\omega} = 0.5 - j0.5 \\ \vert &H(\omega) \vert = 0.7071 \end{aligned} ∣​ω=π/2e−jω=e−jπ/2=cos(π/2)−jsin(π/2)=−j1H(ω)=0.5+0.5e−jω=0.5−j0.5H(ω)∣=0.7071​

14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

ω=π/4e−jω=e−jπ/4=cos⁡(π/4)−jsin⁡(π/4)=0.707−j0.707H(ω)=0.5+0.5e−jω=0.5+0.5(0.707−j0.707)=0.835−j0.353∣H(ω)∣=0.9065\begin{aligned} &\omega = \pi/4 \\ &e^{-j\omega} = e^{-j\pi/4} = \cos(\pi/4) - j\sin(\pi/4) = 0.707 - j0.707\\ &H(\omega) = 0.5 + 0.5e^{-j\omega} = 0.5 + 0.5(0.707 - j0.707) = 0.835 - j0.353 \\ \vert &H(\omega) \vert = 0.9065 \end{aligned} ∣​ω=π/4e−jω=e−jπ/4=cos(π/4)−jsin(π/4)=0.707−j0.707H(ω)=0.5+0.5e−jω=0.5+0.5(0.707−j0.707)=0.835−j0.353H(ω)∣=0.9065​

将上述 4 个点连起来后,可以得当 a0=a1=0.5a_0 = a_1 = 0.5a0​=a1​=0.5 时滤波器的频响曲线

零点与频响的几何关系

当 a0=0.5a_0 = 0.5a0​=0.5 a1=0.5a_1 = 0.5a1​=0.5 时
H(z)=Y(z)X(z)=0.5+0.5z−1=0.5+0.5zH(z) = \frac{Y(z)}{X(z)} = 0.5 + 0.5z^{-1} = 0.5 + \frac{0.5}{z} H(z)=X(z)Y(z)​=0.5+0.5z−1=0.5+z0.5​

滤波器存在一个零点 z=−1+j0z= -1 + j0z=−1+j0

接下来,我们用几何的方式来确定频谱响应与零点直接的关系。对于只有一个零点的一阶前馈滤波器,可以这样确定频响:

  1. 给定一个频率,在复平面坐标的单位圆外圈定位它
  2. 画一条线,连接该点与零点
  3. 线的长度将是该频率的增幅

以 000,π\piπ,π/2\pi/2π/2, π/4\pi/4π/4 为例,用上述方法进行计算,可以得到下图

你可能会注意到,用几何关系得到的值与直接计算得到结果是不同的。在 0Hz 中其增益为 2.0,但实际上只有它的一半。事实上,几何方法得到的增益是实际幅度的两倍。为了得到正确的结果,我们需要做的最后一件事是从H(z)H(z)H(z)中去掉整体增益系数,这样整体的增益(或者衰减)就可以只由一个变量控制。这实现起来相当简单,提取一个 a0a_0a0​ 作为公因子即可:

H(z)=a0+a1z−1=a0(1+a1a0z−1)Let α1=a1a0H(z)=a0(1+α1z−1)\begin{aligned} H(z)&= a_0 + a_1z^{-1} \\ &= a_0(1 + \frac{a_1}{a_0}z^{-1}) \\ \text{Let } &\alpha_1 = \frac{a_1}{a_0} \\ H(z)&= a_0(1 + \alpha_1z^{-1}) \end{aligned} H(z)Let H(z)​=a0​+a1​z−1=a0​(1+a0​a1​​z−1)α1​=a0​a1​​=a0​(1+α1​z−1)​

因此,在复平面得到幅度后,需要做的最后一步是用 a0a_0a0​ 来缩放它,这样结果就相互匹配了。

一阶反馈滤波器(1st order feedback filter)

接下来介绍 一阶反馈滤波器,它与 一阶前馈滤波器 有很多相似之处,但也会有几个关键区别。

它的差分方程为:
y(n)=a0x(n)−b1y(n−1)y(n) = a_0x(n) - b_1y(n-1) y(n)=a0​x(n)−b1​y(n−1)

进行z变换:
Y(z)=a0X(z)−b1Y(z)z−1Y(z) = a_0X(z) - b_1Y(z)z^{-1} Y(z)=a0​X(z)−b1​Y(z)z−1
得到转换方程:
H(z)=Y(z)X(z)=a01+b1z−1H(z) = \frac{Y(z)}{X(z)} = \frac{a_0}{1+b_1z^{-1}} H(z)=X(z)Y(z)​=1+b1​z−1a0​​
接着,提取 a0a_0a0​ 作为增益控制系数:
H(z)=a01+b1z−1=a011+b1z−1\begin{aligned} H(z) &= \frac{a_0}{1+b_1z^{-1}} \\ &= a_0\frac{1}{1+b_1z^{-1}} \end{aligned} H(z)​=1+b1​z−1a0​​=a0​1+b1​z−11​​

我们再做一些变化,方便计算零点和极点:
H(z)=a01+b1z−1=a011+b1z=a0zz+b1\begin{aligned} H(z) &= \frac{a_0}{1+b_1z^{-1}} \\ &= a_0\frac{1}{1+\frac{b_1}{z}} \\ &= a_0\frac{z}{z + b_1} \end{aligned} H(z)​=1+b1​z−1a0​​=a0​1+zb1​​1​=a0​z+b1​z​​

可以看到,当 z=−b1z=-b_1z=−b1​ 时分母为零,也就是说极点在 z=−b1z=-b_1z=−b1​ 位置。你可能还会注意到传递函数还有一个零点 z=0z=0z=0,这个零点被称为 “trivial zero”,它对频谱响应没有任何影响。

在z=0处的极点或零点是平凡的(trivial),可以为了分析而忽略,因为它对频率响应没有影响。

我们假设 a0=1.0a_0 = 1.0a0​=1.0 b1=0.9b_1 = 0.9b1​=0.9
H(z)=Y(z)X(z)=a01+b1z−1=11+0.9z−1H(z) = \frac{Y(z)}{X(z)} = \frac{a_0}{1+b_1z^{-1}} = \frac{1}{1 + 0.9z^{-1}} H(z)=X(z)Y(z)​=1+b1​z−1a0​​=1+0.9z−11​
接下来开始计算该滤波器的频响曲线。

极点与频响的几何关系

当 a0=1.0a_0 = 1.0a0​=1.0 b1=0.9b_1 = 0.9b1​=0.9 时,滤波器存在一个极点 z=−0.9+j0z = -0.9 + j0z=−0.9+j0,对于只有一个零点的一阶反馈滤波器,可以这样确定频响:

  1. 给定一个频率,在复平面坐标的单位圆外圈定位它
  2. 画一条线,连接该点与极点
  3. 线段长度的倒数将是频率的增幅

以 000,π\piπ,π/2\pi/2π/2, π/4\pi/4π/4 为例,用上述方法进行计算,可以得到下图

计算频谱响应

我们假设 a0=1.0a_0 = 1.0a0​=1.0 b1=0.9b_1 = 0.9b1​=0.9
H(z)=Y(z)X(z)=a01+b1z−1=11+0.9z−1H(z) = \frac{Y(z)}{X(z)} = \frac{a_0}{1+b_1z^{-1}} = \frac{1}{1 + 0.9z^{-1}} H(z)=X(z)Y(z)​=1+b1​z−1a0​​=1+0.9z−11​

现在来计算它的频谱响应,我们取四个点:

  • DC: 0
  • Nyquist: π\piπ
  • 12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2
  • 14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

DC(0 Hz)

ω=0e−jω=e0=1H(ω)=11+0.9e−jω=11.9=0.5263∣H(ω)∣=0.5263\begin{aligned} &\omega = 0 \\ &e^{-j\omega} = e^{0} = 1 \\ &H(\omega) = \frac{1}{1 + 0.9e^{-j\omega}} = \frac{1}{1.9} = 0.5263 \\ \vert &H(\omega) \vert = 0.5263 \end{aligned} ∣​ω=0e−jω=e0=1H(ω)=1+0.9e−jω1​=1.91​=0.5263H(ω)∣=0.5263​

Nyquist: π\piπ

ω=πe−jω=e−jπ=cos⁡(π)−jsin⁡(π)=−1H(ω)=11+0.9e−jω=10.1=10∣H(ω)∣=10\begin{aligned} &\omega = \pi \\ &e^{-j\omega} = e^{-j\pi} = \cos(\pi) - j\sin(\pi) = -1 \\ &H(\omega) = \frac{1}{1 + 0.9e^{-j\omega}} = \frac{1}{0.1} = 10 \\ \vert &H(\omega) \vert = 10 \end{aligned} ∣​ω=πe−jω=e−jπ=cos(π)−jsin(π)=−1H(ω)=1+0.9e−jω1​=0.11​=10H(ω)∣=10​

12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2

ω=π/2e−jω=e−jπ/2=cos⁡(π/2)−jsin⁡(π/2)=−j1H(ω)=11+0.9e−jω=11−j0.9∣H(ω)∣=∣1∣∣1−j0.9∣=0.743\begin{aligned} &\omega = \pi/2 \\ &e^{-j\omega} = e^{-j\pi/2} = \cos(\pi/2) - j\sin(\pi/2) = -j1\\ &H(\omega) = \frac{1}{1 + 0.9e^{-j\omega}} = \frac{1}{1 - j0.9} \\ \vert &H(\omega) \vert = \frac{\vert 1 \vert}{\vert 1 - j0.9\vert} = 0.743 \end{aligned} ∣​ω=π/2e−jω=e−jπ/2=cos(π/2)−jsin(π/2)=−j1H(ω)=1+0.9e−jω1​=1−j0.91​H(ω)∣=∣1−j0.9∣∣1∣​=0.743​

14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

ω=π/4e−jω=e−jπ/4=cos⁡(π/4)−jsin⁡(π/4)=0.707−j0.707H(ω)=11+0.9e−jω=11+0.9(0.707−j0.707)=11.636−j0.636∣H(ω)∣=∣1∣∣1.636−j0.636∣=0.57\begin{aligned} &\omega = \pi/4 \\ &e^{-j\omega} = e^{-j\pi/4} = \cos(\pi/4) - j\sin(\pi/4) = 0.707 - j0.707\\ &H(\omega) = \frac{1}{1 + 0.9e^{-j\omega}} = \frac{1}{1+0.9(0.707 - j0.707)} = \frac{1}{1.636 - j0.636} \\ \vert &H(\omega) \vert = \frac{\vert 1 \vert}{\vert 1.636-j0.636\vert} = 0.57 \end{aligned} ∣​ω=π/4e−jω=e−jπ/4=cos(π/4)−jsin(π/4)=0.707−j0.707H(ω)=1+0.9e−jω1​=1+0.9(0.707−j0.707)1​=1.636−j0.6361​H(ω)∣=∣1.636−j0.636∣∣1∣​=0.57​

将上述 4 个点连起来后,可以得当 a0=1.0a_0 = 1.0a0​=1.0 b1=0.9b_1 = 0.9b1​=0.9 时滤波器的频响曲线

当然,也可以转换成 dB 值。通过下图可知,该滤波器抑制低频信号,提升高频信息,在 0hz 处将会有 -6dB 的抑制,而在 22.5hz 则有 20dB 的增益。

二阶前馈滤波器(2nd order feed-forward filter)

二阶前馈滤波器的分析与一阶滤波器相似,但我们要处理的数学问题更多。它的差分方程为:
y(n)=a0x(n)+a1x(n−1)+a2x(n−2)y(n) = a_0x(n) + a_1x(n-1) + a_2x(n-2) y(n)=a0​x(n)+a1​x(n−1)+a2​x(n−2)

进行z变换
Y(z)=a0X(z)+a1X(z)z−1+a2X(z)z−2Y(z) = a_0X(z) + a_1X(z)z^{-1} + a_2X(z)z^{-2} Y(z)=a0​X(z)+a1​X(z)z−1+a2​X(z)z−2

得到转换方程
H(z)=Y(z)X(z)=a0+a1z−1+a2z−2H(z) = \frac{Y(z)}{X(z)} = a_0 + a_1z^{-1} + a_2z^{-2} H(z)=X(z)Y(z)​=a0​+a1​z−1+a2​z−2

提取 a0a0a0
Let α1=a1a0,α2=a2a0H(z)=Y(z)X(z)=a0(1+α1z−1+α2z−2)\begin{aligned} \text{Let } \alpha_1 &= \frac{a_1}{a_0}, \alpha_2=\frac{a_2}{a_0}\\ H(z) &= \frac{Y(z)}{X(z)} = a_0(1 + \alpha_1z^{-1} + \alpha_2z^{-2}) \\ \end{aligned} Let α1​H(z)​=a0​a1​​,α2​=a0​a2​​=X(z)Y(z)​=a0​(1+α1​z−1+α2​z−2)​

此时 H(z)H(z)H(z) 是个二次方程,对它进行因式分解,可以有:
H(z)=Y(z)X(z)=a0(1−Z1z−1)(1−Z2z−1)=a0(1+(−Z1−Z2)z−1+Z1Z2z−2)\begin{aligned} H(z) &= \frac{Y(z)}{X(z)} = a_0(1-Z_1z^{-1})(1-Z_2z^{-1}) \\ &=a_0(1 + (-Z_1 - Z_2)z^{-1} + Z_1Z_2z^{-2}) \end{aligned} H(z)​=X(z)Y(z)​=a0​(1−Z1​z−1)(1−Z2​z−1)=a0​(1+(−Z1​−Z2​)z−1+Z1​Z2​z−2)​

从上述式子可以得到几个有用的信息:

  1. 零点在 z=Z1z=Z_1z=Z1​ 和 z=Z2z=Z_2z=Z2​ 上,它们在复平面上,所以应该是一个复数
  2. α1\alpha_1α1​ 和 α2\alpha_2α2​ 是实数,因此 (−Z1−Z2)(-Z_1 - Z_2)(−Z1​−Z2​) 和 Z1Z2Z_1Z_2Z1​Z2​ 也应该是实数。

据此我们可以推断出 Z1Z_1Z1​ 和 Z2Z_2Z2​ 为共轭关系,才能满足上述两个条件。因此:
Z1=Rejθ=a+jbZ2=Re−jθ=a−jb\begin{aligned} Z_1 = Re^{j\theta} = a + jb \\ Z_2 = Re^{-j\theta} = a - jb \end{aligned} Z1​=Rejθ=a+jbZ2​=Re−jθ=a−jb​

将其带入转换方程,得到:
H(z)=a0(1+(−Z1−Z2)z−1+Z1Z2z−2)=a0(1−Rejθz−1−Re−jθz−1+R2(ejθe−jθ)z−2)noting that (ejθe−jθ)=1H(z)=a0(1−(Rejθ+Re−jθ)z−1+R2z−2)=a0(1−R(cos⁡(Θ)+jsin⁡(Θ)+cos⁡(Θ)−jsin⁡(Θ))z−1+R2z−2)=a0(1−2Rcos⁡(Θ)z−1+R2z−2)\begin{aligned} H(z) &=a_0(1 + (-Z_1 - Z_2)z^{-1} + Z_1Z_2z^{-2}) \\ &=a_0(1 - Re^{j\theta}z^{-1} - Re^{-j\theta}z^{-1} + R^2(e^{j\theta}e^{-j\theta})z^{-2}) \\ \text{noting that } (e^{j\theta}e^{-j\theta}) &= 1 \\ H(z) &= a_0(1 - (Re^{j\theta} + Re^{-j\theta})z^{-1} + R^2z^{-2}) \\ &= a_0(1-R(\cos (\Theta)+j \sin (\Theta)+\cos (\Theta)-j \sin (\Theta)) z^{-1}+R^{2} z^{-2}) \\ &= a_0(1-2 R \cos (\Theta) z^{-1}+R^{2} z^{-2}) \end{aligned} H(z)noting that (ejθe−jθ)H(z)​=a0​(1+(−Z1​−Z2​)z−1+Z1​Z2​z−2)=a0​(1−Rejθz−1−Re−jθz−1+R2(ejθe−jθ)z−2)=1=a0​(1−(Rejθ+Re−jθ)z−1+R2z−2)=a0​(1−R(cos(Θ)+jsin(Θ)+cos(Θ)−jsin(Θ))z−1+R2z−2)=a0​(1−2Rcos(Θ)z−1+R2z−2)​
对比最初的转换方程 H(z)=a0(1+α1z−1+α2z−2)H(z) = a_0(1 + \alpha_1z^{-1} + \alpha_2z^{-2})H(z)=a0​(1+α1​z−1+α2​z−2),可以得到:
α1=−2Rcos⁡(Θ)α2=R2\begin{array}{l} \alpha_{1}=-2 R \cos (\Theta) \\ \alpha_{2}=R^{2} \end{array} α1​=−2Rcos(Θ)α2​=R2​

根据上述等式,给定 α1\alpha_{1}α1​ 和 α2\alpha_{2}α2​ 就能够求出 RRR 和 Θ\ThetaΘ,从而得到 Z1Z_1Z1​ 和 Z2Z_2Z2​,也就得到了零点。

我们以 a0=1.0a_0 = 1.0a0​=1.0,a1=−1.27a_1=-1.27a1​=−1.27,a2=0.81a_2=0.81a2​=0.81 为例。这时 α1=−1.27\alpha_{1}=-1.27α1​=−1.27,α2=0.81\alpha_{2}=0.81α2​=0.81,那么可以得到 RRR:
R2=α2=0.81R=0.81=0.9\begin{array}{c} R^{2}=\alpha_{2}=0.81 \\ R=\sqrt{0.81}=0.9 \end{array} R2=α2​=0.81R=0.81​=0.9​
接着:
−2Rcos⁡(Θ)=−1.272(0.9)cos⁡(Θ)=1.27cos⁡(Θ)=1.272(0.9)Θ=arccos⁡(0.705)Θ=45∘\begin{aligned} -2 \operatorname{Rcos}(\Theta) &=-1.27 \\ 2(0.9) \cos (\Theta) &=1.27 \\ \cos (\Theta) &=\frac{1.27}{2(0.9)} \\ \Theta &=\arccos (0.705) \\ \Theta &=45^{\circ} \end{aligned} −2Rcos(Θ)2(0.9)cos(Θ)cos(Θ)ΘΘ​=−1.27=1.27=2(0.9)1.27​=arccos(0.705)=45∘​

至此,得到两个零点在复平面上的位置在 0.9ej0.25π0.9e^{j0.25\pi}0.9ej0.25π 和 0.9ej−0.25π0.9e^{j-0.25\pi}0.9ej−0.25π 上,也就是复平面上,半径为 0.9 ,角度为 ±45∘\pm 45^{\circ}±45∘ 的位置,如下图:

估计频响

对于两个零点的情况,估计频响的步骤与之前类似,但多一个步骤。当估计一个以上零点的频响时,需要这么做:

  1. 给定一个频率,在复平面坐标的单位圆外圈定位它
  2. 画一条线,连接该点与所有零点
  3. 将所有线段的长度相乘,得到的积将是频率的增幅

最后一条规则用公式来说明的话,应该是这样:
∣H(ejω)∣ω=a0∏i=1NUi\left|H\left(e^{j \omega}\right)\right|_{\omega}=a_{0} \prod_{i=1}^{N} U_{i} ∣∣​H(ejω)∣∣​ω​=a0​i=1∏N​Ui​
其中 NNN 为滤波器的阶数(也就是零点的个数),UiU_{i}Ui​为与零点的距离长度。

以 000,π\piπ,π/2\pi/2π/2, π/4\pi/4π/4 为例,用上述方法进行计算频响:


当 ω=0\omega=0ω=0 时,与两个零点的距离为 0.7、0.7,因此在 ∣H(ejω)∣ω=0.7∗0.7=0.49\left|H\left(e^{j \omega}\right)\right|_{\omega} = 0.7*0.7=0.49∣∣​H(ejω)∣∣​ω​=0.7∗0.7=0.49


当 ω=π/4\omega=\pi/4ω=π/4 时,与两个零点的距离为 0.1、 1.4,因此在 ∣H(ejω)∣ω=0.1∗1.4=0.14\left|H\left(e^{j \omega}\right)\right|_{\omega} = 0.1*1.4=0.14∣∣​H(ejω)∣∣​ω​=0.1∗1.4=0.14


当 ω=π/2\omega=\pi/2ω=π/2 时,与两个零点的距离为 0.7、1.8,因此在 ∣H(ejω)∣ω=0.7∗1.8=1.26\left|H\left(e^{j \omega}\right)\right|_{\omega} = 0.7 * 1.8 = 1.26∣∣​H(ejω)∣∣​ω​=0.7∗1.8=1.26


当 ω=π\omega=\piω=π 时,与两个零点的距离为 1.75、1.75,因此在 ∣H(ejω)∣ω=1.75∗1.75=3.1\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1.75 * 1.75 = 3.1∣∣​H(ejω)∣∣​ω​=1.75∗1.75=3.1

连接上述 4 个点,可以得到大致的频响曲线:

计算频谱响应

当 a0=1.0a_0 = 1.0a0​=1.0,a1=−1.27a_1=-1.27a1​=−1.27,a2=0.81a_2=0.81a2​=0.81 时
H(z)=1−1.27z−1+0.81z−2=1−1.27e−j1ω+0.81e−j2ω=1−1.27[cos⁡(ω)−jsin⁡(ω)]+0.81[cos⁡(2ω)−jsin⁡(2ω)]\begin{aligned} H(z) &=1-1.27 z^{-1}+0.81 z^{-2} \\ &=1-1.27 e^{-j 1 \omega}+0.81 e^{-j 2 \omega} \\ &=1-1.27[\cos (\omega)-j \sin (\omega)]+0.81[\cos (2 \omega)-j \sin (2 \omega)] \end{aligned} H(z)​=1−1.27z−1+0.81z−2=1−1.27e−j1ω+0.81e−j2ω=1−1.27[cos(ω)−jsin(ω)]+0.81[cos(2ω)−jsin(2ω)]​

现在来计算它的频谱响应,我们取四个点:

  • DC: 0
  • Nyquist: π\piπ
  • 12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2
  • 14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

DC: 0

H(ω)∣ω=0=1−1.27[cos⁡(ω)−jsin⁡(ω)]+0.81[cos⁡(2ω)−jsin⁡(2ω)]=1−1.27[cos⁡(0)−jsin⁡(0)]+0.81[cos⁡(2∗0)−jsin⁡(2∗0)]=0.54+j0∣H(ω)∣=a2+b2=0.542+02=0.54\begin{aligned} H(\omega)|_ {\omega=0}&= 1-1.27[\cos (\omega)-j \sin (\omega)]+0.81[\cos (2 \omega)-j \sin (2 \omega)] \\ & = 1-1.27[\cos (0)-j \sin (0)]+0.81[\cos (2 * 0)-j \sin (2 * 0)] \\ &= 0.54+j 0 \\ |H(\omega)| &=\sqrt{a^{2}+b^{2}} \\ &=\sqrt{0.54^{2}+0^{2}}=0.54 \end{aligned} H(ω)∣ω=0​∣H(ω)∣​=1−1.27[cos(ω)−jsin(ω)]+0.81[cos(2ω)−jsin(2ω)]=1−1.27[cos(0)−jsin(0)]+0.81[cos(2∗0)−jsin(2∗0)]=0.54+j0=a2+b2​=0.542+02​=0.54​

Nyquist: π\piπ

H(ω)∣ω=π=1−1.27[cos⁡(ω)−jsin⁡(ω)]+0.81[cos⁡(2ω)−jsin⁡(2ω)]=1−1.27[cos⁡(π)−jsin⁡(π)]+0.81[cos⁡(2π)−jsin⁡(2π)]=3.08+j0∣H(ω)∣=a2+b2=3.082+02=3.08\begin{aligned} \left.H(\omega)\right|_{\omega=\pi} &=1-1.27[\cos (\omega)-j \sin (\omega)]+0.81[\cos (2 \omega)-j \sin (2 \omega)] \\ &=1-1.27[\cos (\pi)-j \sin (\pi)]+0.81[\cos (2 \pi)-j \sin (2 \pi)] \\ &=3.08+j 0 \\ |H(\omega)| &=\sqrt{a^{2}+b^{2}} \\ &=\sqrt{3.08^{2}+0^{2}}=3.08 \end{aligned} H(ω)∣ω=π​∣H(ω)∣​=1−1.27[cos(ω)−jsin(ω)]+0.81[cos(2ω)−jsin(2ω)]=1−1.27[cos(π)−jsin(π)]+0.81[cos(2π)−jsin(2π)]=3.08+j0=a2+b2​=3.082+02​=3.08​

12\frac{1}{2}21​ Nyquist: π/2\pi/2π/2

H(ω)∣ω=π/2=1−1.27[cos⁡(ω)−jsin⁡(ω)]+0.81[cos⁡(2ω)−jsin⁡(2ω)]=1−1.27[cos⁡(π/2)−jsin⁡(π/2)]+0.81[cos⁡(π)−jsin⁡(π)]=0.19+j1.27∣H(ω)∣=a2+b2=0.192+1.272=1.28\begin{aligned} \left.H(\omega)\right|_{\omega=\pi / 2} &=1-1.27[\cos (\omega)-j \sin (\omega)]+0.81[\cos (2 \omega)-j \sin (2 \omega)] \\ &=1-1.27[\cos (\pi / 2)-j \sin (\pi / 2)]+0.81[\cos (\pi)-j \sin (\pi)] \\ &=0.19+j 1.27 \\ |H(\omega)| &=\sqrt{a^{2}+b^{2}} \\ &=\sqrt{0.19^{2}+1.27^{2}}=1.28 \end{aligned} H(ω)∣ω=π/2​∣H(ω)∣​=1−1.27[cos(ω)−jsin(ω)]+0.81[cos(2ω)−jsin(2ω)]=1−1.27[cos(π/2)−jsin(π/2)]+0.81[cos(π)−jsin(π)]=0.19+j1.27=a2+b2​=0.192+1.272​=1.28​

14\frac{1}{4}41​ Nyquist: π/4\pi/4π/4

H(ω)∣ω=π/2=1−1.27[cos⁡(ω)−jsin⁡(ω)]+0.81[cos⁡(2ω)−jsin⁡(2ω)]=1−1.27[cos⁡(π/4)−jsin⁡(π/4)]+0.81[cos⁡(π/2)−jsin⁡(π/2)]=0.11+j0.08∣H(ω)∣=a2+b2=0.112+0.082=0.136\begin{aligned} \left.H(\omega)\right|_{\omega=\pi / 2} &=1-1.27[\cos (\omega)-j \sin (\omega)]+0.81[\cos (2 \omega)-j \sin (2 \omega)] \\ &=1-1.27[\cos (\pi / 4)-j \sin (\pi / 4)]+0.81[\cos (\pi / 2)-j \sin (\pi / 2)] \\ &=0.11+j 0.08 \\ |H(\omega)| &=\sqrt{a^{2}+b^{2}} \\ &=\sqrt{0.11^{2}+0.08^{2}}=0.136 \end{aligned} H(ω)∣ω=π/2​∣H(ω)∣​=1−1.27[cos(ω)−jsin(ω)]+0.81[cos(2ω)−jsin(2ω)]=1−1.27[cos(π/4)−jsin(π/4)]+0.81[cos(π/2)−jsin(π/2)]=0.11+j0.08=a2+b2​=0.112+0.082​=0.136​

可以看到直接计算的结果,与通过几何关系得到结果非常接近。

二阶反馈滤波器(2nd order feedback filter)

二阶反馈滤波器的差分方程为:
y(n)=a0x(n)−b1y(n−1)−b2y(n−2)y(n)=a_{0} x(n)-b_{1} y(n-1)-b_{2} y(n-2) y(n)=a0​x(n)−b1​y(n−1)−b2​y(n−2)
进行 z变换:
Y(z)=a0X(z)−b1Y(z)z−1−b2Y(z)z−2Y(z)=a_{0} X(z)-b_{1} Y(z) z^{-1}-b_{2} Y(z) z^{-2} Y(z)=a0​X(z)−b1​Y(z)z−1−b2​Y(z)z−2
得到转换方程:
H(z)=a011+b1z−1+b2z−2H(z)=a_{0} \frac{1}{1+b_{1} z^{-1}+b_{2} z^{-2}} H(z)=a0​1+b1​z−1+b2​z−21​

此时 H(z)H(z)H(z) 的分母是个二次方程,对它进行因式分解,可以有:
H(z)=a01(1−P1z−1)(1−P2z−1)H(z)=a_{0} \frac{1}{\left(1-P_{1} z^{-1}\right)\left(1-P_{2} z^{-1}\right)} H(z)=a0​(1−P1​z−1)(1−P2​z−1)1​

与之前的分析类似,可以知道 P1P_1P1​ 和 P2P_2P2​ 为共轭复数:
P1=RejΘP2=Re−jΘ\begin{array}{l} P_{1}=\mathrm{Re}^{j \Theta} \\ P_{2}=\mathrm{Re}^{-j \Theta} \end{array} P1​=RejΘP2​=Re−jΘ​

将其带入式子中,得到:
(1−Re⁡jΘz−1)(1−Re⁡−jΘz−1)=1−Re⁡jΘz−1−Re⁡−jΘz−1+R2(ejΘe−jΘ)z−2=1−2Rcos⁡(Θ)z−1+R2z−2\begin{array}{l} \left(1-\operatorname{Re}^{j \Theta} z^{-1}\right)\left(1-\operatorname{Re}^{-j \Theta} z^{-1}\right) \\ =1-\operatorname{Re}^{j \Theta} z^{-1}-\operatorname{Re}^{-j \Theta} z^{-1}+R^{2}\left(e^{j \Theta} e^{-j \Theta}\right) z^{-2} \\ = 1-2 R \cos (\Theta) z^{-1}+R^{2} z^{-2} \end{array} (1−RejΘz−1)(1−Re−jΘz−1)=1−RejΘz−1−Re−jΘz−1+R2(ejΘe−jΘ)z−2=1−2Rcos(Θ)z−1+R2z−2​
H(z)=a011+b1z−1+b2z−2=a01(1−2Rcos⁡(Θ)z−1+R2z−2)\begin{aligned} H(z) &=a_{0} \frac{1}{1+b_{1} z^{-1}+b_{2} z^{-2}} \\ &=a_{0} \frac{1}{\left(1-2 R \cos (\Theta) z^{-1}+R^{2} z^{-2}\right)} \end{aligned} H(z)​=a0​1+b1​z−1+b2​z−21​=a0​(1−2Rcos(Θ)z−1+R2z−2)1​​

通过对比可知:
b1=−2Rcos⁡(Θ)b2=R2\begin{array}{l} b_{1}=-2 R \cos (\Theta) \\ b_{2}=R^{2} \end{array} b1​=−2Rcos(Θ)b2​=R2​

我们以 a0=1.0a_0 = 1.0a0​=1.0,b1=−1.34b_1=-1.34b1​=−1.34,a2=0.902a_2=0.902a2​=0.902 为例,可以得到:
R2=b2=0.902R=0.902=0.95\begin{aligned} R^{2} &=b_{2}=0.902 \\ R &=\sqrt{0.902}=0.95 \end{aligned} R2R​=b2​=0.902=0.902​=0.95​
−2Rcos⁡(Θ)=−1.342(0.95)cos⁡(Θ)=1.34cos⁡(Θ)=1.342(0.95)Θ=arccos⁡(0.707)Θ=45∘\begin{aligned} -2 \operatorname{Rcos}(\Theta) &=-1.34 \\ 2(0.95) \cos (\Theta) &=1.34 \\ \cos (\Theta) &=\frac{1.34}{2(0.95)} \\ \Theta &=\arccos (0.707) \\ \Theta &=45^{\circ} \end{aligned} −2Rcos(Θ)2(0.95)cos(Θ)cos(Θ)ΘΘ​=−1.34=1.34=2(0.95)1.34​=arccos(0.707)=45∘​

这样就得到了两个极点,它们位于复平面 半径为 0.95 ,角度为 ±45∘\pm 45^{\circ}±45∘ 的位置,如下图:

估计频响

当估计一个以上零点的频响时,需要这么做:

  1. 给定一个频率,在复平面坐标的单位圆外圈定位它
  2. 画一条线,连接该点与所有零点
  3. 将所有线段的长度的倒数相乘,得到的积将是频率的增幅

最后一条规则用公式来说明的话,应该是这样:
∣H(ejω)∣ω=a01∏i=1NVi\left|H\left(e^{j \omega}\right)\right|_{\omega}=a_{0} \frac{1}{\prod_{i=1}^{N} V_{i}} ∣∣​H(ejω)∣∣​ω​=a0​∏i=1N​Vi​1​
其中 NNN 为滤波器的阶数(也就是零点的个数),ViV_{i}Vi​为与极点的距离长度。

以 000,π\piπ,π/2\pi/2π/2, π/4\pi/4π/4 为例,用上述方法进行计算频响:

当 ω=0\omega=0ω=0 时,与两个零点的距离为 0.71、0.71,因此在 ∣H(ejω)∣ω=1/(0.71∗0.71)=1.98\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1/(0.71*0.71)=1.98∣∣​H(ejω)∣∣​ω​=1/(0.71∗0.71)=1.98


当 ω=π/4\omega=\pi/4ω=π/4 时,与两个零点的距离为 0.05、1.41,因此在 ∣H(ejω)∣ω=1/(0.05∗1.41)=14.2\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1/(0.05 * 1.41)=14.2∣∣​H(ejω)∣∣​ω​=1/(0.05∗1.41)=14.2

当 ω=π/2\omega=\pi/2ω=π/2 时,与两个零点的距离为 0.71、1.84,因此在 ∣H(ejω)∣ω=1/(0.71∗1.84)=0.76\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1/(0.71 * 1.84)=0.76∣∣​H(ejω)∣∣​ω​=1/(0.71∗1.84)=0.76


当 ω=π\omega=\piω=π 时,与两个零点的距离为 1.8、1.8,因此在 ∣H(ejω)∣ω=1/(1.8∗1.8)=0.31\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1/(1.8 * 1.8)=0.31∣∣​H(ejω)∣∣​ω​=1/(1.8∗1.8)=0.31

计算频谱响应

当 a0=1.0a_0 = 1.0a0​=1.0,b1=−1.34b_1=-1.34b1​=−1.34,b2=0.902b_2=0.902b2​=0.902 时
H(z)=a011+b1z−1+b2z−2=11−1.34z−1+0.902z−2\begin{aligned} H(\mathrm{z}) &=a_{0} \frac{1}{1+b_{1} z^{-1}+b_{2} z^{-2}} \\ &=\frac{1}{1-1.34 z^{-1}+0.902 z^{-2}} \end{aligned} H(z)​=a0​1+b1​z−1+b2​z−21​=1−1.34z−1+0.902z−21​​

现在来计算它的频谱响应,公式太难敲了,这里给一个 0Hz 的结果,剩下的大家可以当做练习计算一下。正确的结果在下面的表格。

DC(0Hz)

H(z)=11−1.34+0.902=10.562+j0∣H(ω)∣=∣numerator ∣∣denominator ∣=∣1∣∣0.562+j0∣=1a2+b2=10.5622=1.78=5.00dB\begin{aligned} H(z) &=\frac{1}{1-1.34+0.902}=\frac{1}{0.562+j 0} \\ |H(\omega)| &=\frac{\mid \text { numerator } \mid}{\mid \text { denominator } \mid}=\frac{|1|}{|0.562+j 0|} \\ &=\frac{1}{\sqrt{a^{2}+b^{2}}} \\ &=\frac{1}{\sqrt{0.562^{2}}} \\ &=1.78=5.00 d B \end{aligned} H(z)∣H(ω)∣​=1−1.34+0.9021​=0.562+j01​=∣ denominator ∣∣ numerator ∣​=∣0.562+j0∣∣1∣​=a2+b2​1​=0.5622​1​=1.78=5.00dB​

Frequency(ω\omegaω) ∣H(ω)∣\vert H(\omega)\vert∣H(ω)∣
Nyquist(π\piπ) -10.2 dB
1/2 Nyquist(π/2\pi/2π/2) -2.56 dB
1/4 Nyquist(π/4\pi/4π/4) 23.15 dB

搁架式滤波器(Shelving filter)

搁架式均衡器包含一个零点和一个极点,所以也被称为 " 1st order pole/zero filter ",它的差分方程为:
y(n)=a0x(n)+a1x(n−1)−b1y(n−1)y(n)=a_{0} x(n)+\mathrm{a}_{1} x(n-1)-\mathrm{b}_{1} y(n-1) y(n)=a0​x(n)+a1​x(n−1)−b1​y(n−1)

进行 z变换:
Y(z)+b1Y(z)z−1=a0X(z)+a1X(z)z−1Y(z)[1−b1z−1]=X(z)[a0+a1z−1]\begin{aligned} Y(z)+b_{1} Y(z) z^{-1} &=a_{0} X(z)+a_{1} X(z) z^{-1} \\ Y(z)\left[1-b_{1} z^{-1}\right] &=X(z)\left[a_{0}+a_{1} z^{-1}\right] \end{aligned} Y(z)+b1​Y(z)z−1Y(z)[1−b1​z−1]​=a0​X(z)+a1​X(z)z−1=X(z)[a0​+a1​z−1]​

得到转换方程:
H(z)=Y(z)X(z)=a01+α1z−11+b1z−1H(z)=\frac{Y(z)}{X(z)}=a_{0} \frac{1+\alpha_{1} z^{-1}}{1+b_{1} z^{-1}} H(z)=X(z)Y(z)​=a0​1+b1​z−11+α1​z−1​
其中 α1=a1a0\alpha_{1}=\frac{a_{1}}{a_{0}}α1​=a0​a1​​

估计频响

对转换方程做一些变化:
H(z)=a01+α1z−11+b1z−1=a01+α1z1+b1z\begin{aligned} H(\mathrm{z}) &=a_{0} \frac{1+\alpha_{1} z^{-1}}{1+b_{1} z^{-1}} \\ &=a_{0} \frac{1+\frac{\alpha_{1}}{z}}{1+\frac{b_{1}}{z}} \end{aligned} H(z)​=a0​1+b1​z−11+α1​z−1​=a0​1+zb1​​1+zα1​​​​
可以清楚的看到,它有一个零点z=−αz=-\alphaz=−α,和一个极点 z=−b1z=-b_1z=−b1​

举个例子,当 a0=1.0a_0 = 1.0a0​=1.0,a1=−0.92a_1=-0.92a1​=−0.92,b1=−0.71b_1=-0.71b1​=−0.71 时,零点和极点的位置入下图:

当同时有零点和极点时,估计频谱响应和以前步骤没差别,只是需要同时处理极点和零点两种线段:

  1. 给定一个频率,在复平面坐标的单位圆外圈定位它
  2. 画线,连接该点与所有零点
  3. 画线,连接该点与所有极点
  4. 将所有与零点相连线段的长度相乘,得到零点幅度
  5. 将所有与极点相连线段的长度的倒数相乘,得到极点幅度
  6. 零点幅度除以极点幅度,就是频响

最后一条规则用公式来说明的话,应该是这样:
∣H(ejω)∣ω=a0∏i=1NUi∏i=1NVi\left|H\left(e^{j \omega}\right)\right|_{\omega}=\frac{a_{0} \prod_{i=1}^{N} U_{i}}{\prod_{i=1}^{N} V_{i}} ∣∣​H(ejω)∣∣​ω​=∏i=1N​Vi​a0​∏i=1N​Ui​​

以 000,π\piπ,π/2\pi/2π/2, π/4\pi/4π/4 为例,用上述方法进行计算频响:

当 ω=0\omega=0ω=0 时,与零点和极点的距离分别为 0.08、0.29,因此在 ∣H(ejω)∣ω=0.08∗1/0.29=0.27\left|H\left(e^{j \omega}\right)\right|_{\omega} = 0.08 * 1/0.29=0.27∣∣​H(ejω)∣∣​ω​=0.08∗1/0.29=0.27

当 ω=π/4\omega=\pi/4ω=π/4 时,与零点和极点的距离分别为 1.75、1.70,因此在 ∣H(ejω)∣ω=1.75∗1.0/1.70=0.17\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1.75 * 1.0/1.70=0.17∣∣​H(ejω)∣∣​ω​=1.75∗1.0/1.70=0.17

当 ω=π/2\omega=\pi/2ω=π/2 时,与零点和极点的距离分别为 1.40、1.30,因此在 ∣H(ejω)∣ω=1.40∗1.0/1.30=1.07\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1.40 * 1.0/1.30=1.07∣∣​H(ejω)∣∣​ω​=1.40∗1.0/1.30=1.07

当 ω=π\omega=\piω=π 时,与零点和极点的距离分别为 1.92、1.71,因此在 ∣H(ejω)∣ω=1.92∗1.0/1.71=1.12\left|H\left(e^{j \omega}\right)\right|_{\omega} = 1.92 * 1.0/1.71=1.12∣∣​H(ejω)∣∣​ω​=1.92∗1.0/1.71=1.12

计算频谱响应

现在来计算它的频谱响应,公式太难敲了,这里给一个 0Hz 的结果,剩下的大家可以当做练习计算一下。正确的结果在下面的表格。

DC(0Hz)

H(ω)=1−0.92[cos⁡(ω)−jsin⁡(ω)]1−0.71[cos⁡(ω)−jsin⁡(ω)]=1−0.92[cos⁡(0)−jsin⁡(0)]1−0.71[cos⁡(0)−jsin⁡(0)]=1−0.92[1−j0]1−0.71[1−j0]=1−0.921−0.71=0.08+j00.29+j0\begin{aligned} H(\omega) &=\frac{1-0.92[\cos (\omega)-j \sin (\omega)]}{1-0.71[\cos (\omega)-j \sin (\omega)]} \\ &=\frac{1-0.92[\cos (0)-j \sin (0)]}{1-0.71[\cos (0)-j \sin (0)]}=\frac{1-0.92[1-j 0]}{1-0.71[1-j 0]} \\ &=\frac{1-0.92}{1-0.71}=\frac{0.08+j 0}{0.29+j 0} \end{aligned} H(ω)​=1−0.71[cos(ω)−jsin(ω)]1−0.92[cos(ω)−jsin(ω)]​=1−0.71[cos(0)−jsin(0)]1−0.92[cos(0)−jsin(0)]​=1−0.71[1−j0]1−0.92[1−j0]​=1−0.711−0.92​=0.29+j00.08+j0​​
∣H(ω)∣=∣0.08+j0∣∣0.29+j0∣=anum2+bnum2adenom2+bdenom2=0.0820.292=0.276=−11.2dB\begin{aligned} |H(\omega)| &=\frac{|0.08+j 0|}{|0.29+j 0|} \\ &=\frac{\sqrt{a_{n u m}^{2}+b_{n u m}^{2}}}{\sqrt{a_{\text {denom}}^{2}+b_{\text {denom}}^{2}}} \\ &=\frac{\sqrt{0.08^{2}}}{\sqrt{0.29^{2}}}=0.276=-11.2 d B \end{aligned} ∣H(ω)∣​=∣0.29+j0∣∣0.08+j0∣​=adenom2​+bdenom2​​anum2​+bnum2​​​=0.292​0.082​​=0.276=−11.2dB​

Frequency(ω\omegaω) ∣H(ω)∣\vert H(\omega)\vert∣H(ω)∣
Nyquist(π\piπ) 1.00 dB
1/2 Nyquist(π/2\pi/2π/2) 0.82 dB
1/4 Nyquist(π/4\pi/4π/4) 0.375 dB

双二阶滤波器(Biquad Filter)

双二阶滤波器最多有两个零点和两个极点,它的差分方程为:
y(n)=a0x(n)+a1x(n−1)+a2x(n−2)−b1y(n−1)−b2y(n−2)y(n)=a_{0} x(n)+a_{1} x(n-1)+a_{2} x(n-2)-b_{1} y(n-1)-b_{2} y(n-2) y(n)=a0​x(n)+a1​x(n−1)+a2​x(n−2)−b1​y(n−1)−b2​y(n−2)

进行 z变换:
Y(z)+b1Y(z)z−1+b2Y(z)z−2=a0X(z)+a1X(z)z−1+a2X(z)z−2Y(z)[1+b1z−1+b2z−2]=X(z)[a0+a1z−1+a2z−2]\begin{aligned} Y(z)+b_{1} Y(z) z^{-1}+b_{2} Y(z) z^{-2} &=a_{0} X(z)+a_{1} X(z) z^{-1}+a_{2} X(z) z^{-2} \\ Y(z)\left[1+b_{1} z^{-1}+b_{2} z^{-2}\right] &=X(z)\left[a_{0}+a_{1} z^{-1}+a_{2} z^{-2}\right] \end{aligned} Y(z)+b1​Y(z)z−1+b2​Y(z)z−2Y(z)[1+b1​z−1+b2​z−2]​=a0​X(z)+a1​X(z)z−1+a2​X(z)z−2=X(z)[a0​+a1​z−1+a2​z−2]​

得到转换方程为:
H(z)=Y(z)X(z)=a0+a1z−1+a2z−21+b1z−1+b2z−2=a01+α1z−1+α2z−21+b1z−1+b2z−2\begin{aligned} H(z)=\frac{Y(z)}{X(z)}&=\frac{a_{0}+a_{1} z^{-1}+a_{2} z^{-2}}{1+b_{1} z^{-1}+b_{2} z^{-2}} \\ &=a_{0} \frac{1+\alpha_{1} z^{-1}+\alpha_{2} z^{-2}}{1+b_{1} z^{-1}+b_{2} z^{-2}} \end{aligned} H(z)=X(z)Y(z)​​=1+b1​z−1+b2​z−2a0​+a1​z−1+a2​z−2​=a0​1+b1​z−1+b2​z−21+α1​z−1+α2​z−2​​
其中α1=a1a0α2=a2a0\alpha_{1}=\frac{a_{1}}{a_{0}} \quad \alpha_{2}=\frac{a_{2}}{a_{0}}α1​=a0​a1​​α2​=a0​a2​​

估计频响

双二阶滤波器最多能从分子和分母中分别产生一对共轭零点和共轭极点。当然,我们也可以将某些系数设置为 0.0,例如当 a1=0.0a_1=0.0a1​=0.0 时,就会得到一阶前馈和二阶反馈滤波器的结合。

通过前面的分析,可以将双二阶滤波器的转换方程转换下面这种简单的形式:
H(z)=a01−2Rzcos⁡(θ)z−1+Rz2z−21−2Rpcos⁡(ϕ)z−1+Rp2z−2H(z)=a_{0} \frac{1-2 R_{z} \cos (\theta) z^{-1}+R_{z}^{2} z^{-2}}{1-2 R_{p} \cos (\phi) z^{-1}+R_{p}^{2} z^{-2}} H(z)=a0​1−2Rp​cos(ϕ)z−1+Rp2​z−21−2Rz​cos(θ)z−1+Rz2​z−2​

举个例子来说明如何估计频响,我们假设
a0=1.0a1=0.73a2=1.00b1=−0.78b2=0.88\begin{array}{l} a_{0}=1.0 \\ a_{1}=0.73 \\ a_{2}=1.00 \\ b_{1}=-0.78 \\ b_{2}=0.88 \end{array} a0​=1.0a1​=0.73a2​=1.00b1​=−0.78b2​=0.88​

计算零点位置:
a2=Rz2=1.00Rz=1.00=1.00a1=−2Rcos⁡(Θ)=0.732(1.00)cos⁡(Θ)=−0.73cos⁡(Θ)=−0.365Θ=arccos⁡(−0.365)Θ=111.1o\begin{aligned} a_{2} &=R_{z}^{2}=1.00 \\ R_{z} &=\sqrt{1.00}=1.00 \\ \\ a_{1} &=-2 R \cos (\Theta)=0.73 \\ 2(1.00) \cos (\Theta) &=-0.73 \\ \cos (\Theta) &=-0.365 \\ \Theta &=\arccos (-0.365) \\ \Theta &=111.1^{o} \end{aligned} a2​Rz​a1​2(1.00)cos(Θ)cos(Θ)ΘΘ​=Rz2​=1.00=1.00​=1.00=−2Rcos(Θ)=0.73=−0.73=−0.365=arccos(−0.365)=111.1o​

计算极点位置:
b2=Rp2=0.88Rp=0.88=0.942(0.94)cos⁡(ϕ)=0.78cos⁡(ϕ)=0.782(0.94)ϕ=arccos⁡(0.414)ϕ=65.5∘\begin{aligned} b_{2} &=R_{p}^{2}=0.88 \\ R_{p} &=\sqrt{0.88}=0.94 \\\\ 2(0.94) \cos (\phi) &=0.78 \\ \cos (\phi) &=\frac{0.78}{2(0.94)} \\ \phi &=\arccos (0.414) \\ \phi &=65.5^{\circ} \end{aligned} b2​Rp​2(0.94)cos(ϕ)cos(ϕ)ϕϕ​=Rp2​=0.88=0.88​=0.94=0.78=2(0.94)0.78​=arccos(0.414)=65.5∘​

接下来步骤与 搁架式滤波器 中估计频响步骤一致,不再赘述。

双二阶滤波器的实现

双二阶滤波器有多种形式,其中
y(n)=a0x(n)+a1x(n−1)+a2x(n−2)−b1y(n−1)−b2y(n−2)y(n)=a_{0} x(n)+a_{1} x(n-1)+a_{2} x(n-2)-b_{1} y(n-1)-b_{2} y(n-2) y(n)=a0​x(n)+a1​x(n−1)+a2​x(n−2)−b1​y(n−1)−b2​y(n−2)
被称为 “Direct Form”,它实现起来非常简单:

yn = a0*xn + a1*x(n−1) + a2*x(n−2)—b1*y(n−1)—b2*y(n−2)// --- update state registers
x(n−2) = x(n−1)
x(n−1) = xn
y(n−2) = y(n−1) y(n−1) = yn

此外还有三种常用的形式,如下图:

所有这四种形式都会产生相同的差分方程。许多DSP工程师根据其计算效率、内存存储要求以及对系数中舍入误差的敏感性来选择需要的形式。

在 libaa 中你可以找到四种形式的所有实现。具体细节就不再赘述了。

总结

本文介绍了多种滤波器,并给出它们的差分方程、变换方程等。针对每种滤波器,我们都举了一个具体的实例来说明。同时,还讨论了零点和极点对频响的影响,已经如何用平面几何的方法计算频响。最后给出了双二阶滤波器的 C++ 实现。

【音频处理】IIR滤波器设计(一)Biquad 滤波器相关推荐

  1. [Matlab]FIR滤波器设计:(FIR滤波器的结构)

    [Matlab]FIR滤波器设计:(FIR滤波器的结构) FIR(Finite Impulse Response)滤波器:有限长单位冲激响应滤波器,又称为非递归型滤波器,是一种在数字信号领域应用非常广 ...

  2. 滤波器设计软件_滤波器设计——电路仿真软件的滤波器参数提取(下)

    本文章仅代表个人观点,如有错误缺漏,欢迎指正. 接上一节的内容. 按照上一节的方法,用仿真得到的频率和耦合曲线,修正电磁仿真软件的尺寸,经过5次迭代,就可以满足回波和带外抑制的要求.迭代过程如下(继续 ...

  3. matlab模拟巴特沃斯滤波器设计,巴特沃斯滤波器matlab实现

    描述 巴特沃斯滤波器的特点是通频带内的频率响应曲线最大限度平坦,没有起伏,而在阻频带则逐渐下降为零. 在振幅的对数对角频率的波特图上,从某一边界角频率开始,振幅随着角频率的增加而逐步减少,趋向负无穷大 ...

  4. iir陷波滤波器 matlab,IIR数字滤波器设计50Hz陷波器(MATLAB代码)

    %% IIR陷波器设计 % 目的:设计一个陷波器阻带在50±1.5Hz以内,采样频率为400Hz的滤波器, % 并要求通带最大衰减为0.1dB,阻带最小衰减为60dB. clc; clear;clos ...

  5. matlab滤波器设计工具箱带阻滤波器,用matlab信号处理工具箱进行fir滤波器设计的三种方法...

    用matlab信号处理工具箱进行fir滤波器设计的三种方法 摘 要 介绍了利用 MATLAB 信号处理工具箱进行 FIR 滤波器设计的三种方法:程序设计法. FDATool 设计法和 SPTool 设 ...

  6. Matlab滤波器设计

    滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程. 滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频 ...

  7. Matlab滤波器设计示例

    目录 1. 概要 2. 低通滤波器设计例 with designfilt() 2.1 要点一:归一化频率 2.2 要点二:如何使用所生成的滤波器 3. designfilt() 的功能 3.1 能设计 ...

  8. matlab fir1 filter,Matlab滤波器设计

    滤波器设计是一个创建满足指定滤波要求的滤波器参数的过程.滤波器的实现包括滤波器结构的选择和滤波器参数的计算.只有完成了滤波器的设计和实现,才能最终完成数据的滤波. 滤波器设计的目标是实现数据序列的频率 ...

  9. matlab凯塞窗低通fir滤波器,基于Matlab的FIR滤波器设计与实现

    一.摘要 前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见" 二.实验平台 Matlab7.1 三.实验原理 以低通滤波器为例,其常用的设计指标有: 通带边缘频率fp(数字频率 ...

  10. fir滤波器等纹波matlab,基于Matlab的FIR滤波器设计与实现

    基于Matlab的FIR滤波器设计与实现 一.摘要 前面一篇文章介绍了通过FDATool工具箱实现滤波器的设计,见"基于Matlab中FDATool工具箱的滤波器设计及相关文件的生成&quo ...

最新文章

  1. IntelliJ IDEA 问题总结之中的一个 —— jar包、assets、maven、git
  2. Apache ZooKeeper -从初始化到对外提供服务的过程解析( 集群模式 )
  3. 复现经典:《统计学习方法》​第 11 章 条件随机场
  4. boost::hana::extract用法的测试程序
  5. STM32看门狗总结
  6. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
  7. nat 网卡间数据包转发_nat端口转发示例
  8. 通讯模块板载天线设计方法
  9. Vue基础之事件处理器
  10. 训练日志 2019.7.26
  11. 下拉框优化威zx78_搜索框下拉优化即zx78
  12. 使用Photoshop画一个圆锥体
  13. java消息平台_Java微信公众平台之消息管理
  14. ip变更造成的redis集群不可用的解决及数据备份和恢复
  15. python使用requests爬取淘宝搜索页数据
  16. GRBL学习-常用G代码
  17. 输入一个大写英文字母,输出小写英文字母;输入一个小写英文字母输出一个大写英文字母
  18. Python发送163邮箱跳坑指南
  19. 《cypher》游戏第一章攻略
  20. javascript 闭包_了解JavaScript闭包:实用方法

热门文章

  1. wireshark网络分析就这么简单 pdf_用了这么久才发现!原来PDF提取文字这么简单,看完涨知识了...
  2. android 搜索图标居中,Android中搜索图标和文字居中的EditText
  3. 设计一算法,判断给定单链表的长度是奇数还是偶数
  4. linux (centos7)安装3.7.8
  5. python上网行为分析_python实战练手项目---获取谷歌浏览器的历史记录,分析一个人的上网行为...
  6. c++interesting转换为uint_拆一款C转HDMI转换器,没想到一个简单的产品里面这么多芯片...
  7. ensp综合组网实验_关于实验室温度控制的那些事
  8. 语法分析程序的设计与实现_编译工程7:语法分析(5)
  9. pdfjs 字体新增_pdfjs 引入字体失败
  10. Python编程基础17:构造方法和析构方法