在前面的学习中,我们已经掌握了两种核心的IIR数字滤波器设计方法:
这两种方法都是基于模拟低通滤波器原型进行设计的。但在实际应用中,我们经常需要设计高通、带通、带阻等类型的滤波器。
核心问题:如何从一个模拟低通原型,得到其他类型的数字滤波器?
$$\Omega = \frac{2}{T}\tan\left(\frac{\omega}{2}\right)$$
将数字域频率 $\omega$ 映射到模拟域频率 $\Omega$,避免频率响应失真。然后根据目标滤波器类型,进一步转换为等效的低通原型指标。$$s = \frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}$$
将模拟滤波器传递函数 $H_a(s)$ 转换为数字滤波器传递函数 $H(z)$,完成设计。butter、cheby1、ellip 等函数一步完成设计,但理解完整流程有助于掌握设计本质和调试问题。
| 变换类型 | s域变换公式 | 参数说明 |
|---|---|---|
| 低通 → 低通 | $s \to \dfrac{s}{\Omega_c}$ | $\Omega_c$:目标低通截止频率 |
| 低通 → 高通 | $s \to \dfrac{\Omega_c}{s}$ | $\Omega_c$:高通截止频率 |
| 低通 → 带通 | $s \to \dfrac{s^2 + \Omega_0^2}{Bs}$ | $\Omega_0 = \sqrt{\Omega_1\Omega_2}$(几何中心频率) $B = \Omega_2 - \Omega_1$(通带带宽) |
| 低通 → 带阻 | $s \to \dfrac{Bs}{s^2 + \Omega_0^2}$ | $\Omega_0 = \sqrt{\Omega_1\Omega_2}$(几何中心频率) $B = \Omega_2 - \Omega_1$(阻带带宽) |
$\omega$:数字角频率 (rad),$\Omega$:模拟角频率 (rad/s),$T$:采样周期 (s)
$N$ 取大于等于计算结果的最小整数
应用公式 $\Omega = \frac{2}{T}\tan(\omega/2)$:
$$\Omega_p = 2000 \times \tan(0.1\pi) = 2000 \times 0.3249 = \mathbf{649.8} \ \text{rad/s}$$ $$\Omega_s = 2000 \times \tan(0.2\pi) = 2000 \times 0.7265 = \mathbf{1453.1} \ \text{rad/s}$$取 $N = 3$(向上取整)
去归一化:$s \to s/\Omega_c$,取 $\Omega_c = \Omega_p = 649.8$ rad/s
代入 $s = 2000 \cdot \frac{1-z^{-1}}{1+z^{-1}}$,经代数运算得:
高通→低通的频率映射:
令 $\Omega_c = \Omega_p$,等效低通原型的选择性参数为:
$$\lambda = \frac{\Omega_c}{\Omega_s} = \frac{10691}{3183} = \mathbf{3.36}$$几何中心频率:$\Omega_0 = \sqrt{\Omega_{p1} \times \Omega_{p2}} = \sqrt{6498 \times 10328} = \mathbf{8191}$ rad/s
通带带宽:$B_p = \Omega_{p2} - \Omega_{p1} = \mathbf{3830}$ rad/s
带通→低通变换公式:$\Omega_{LP} = \dfrac{\Omega^2 - \Omega_0^2}{B_p \cdot \Omega}$
计算阻带边界对应的低通频率:
$$\Omega_{LP,s1} = \frac{3168^2 - 8191^2}{3830 \times 3168} = -4.71, \quad \Omega_{LP,s2} = \frac{14531^2 - 8191^2}{3830 \times 14531} = 2.59$$选择性参数:$\lambda = \min(4.71, 2.59) = \mathbf{2.59}$
[b,a] = butter(3, [1000 1500]/5000, 'bandpass')应用场景:消除电网50Hz工频干扰
中心频率:$\Omega_0 = \sqrt{284.3 \times 348.3} = \mathbf{314.7}$ rad/s(对应约50Hz)
阻带带宽:$B_s = 348.3 - 284.3 = \mathbf{64.0}$ rad/s
带阻→低通变换公式:$\Omega_{LP} = \dfrac{B_s \cdot \Omega}{\Omega^2 - \Omega_0^2}$
通带边界:$\Omega_{LP,p1} = -0.191$,$\Omega_{LP,p2} = 0.288$
选择性参数:$\lambda = 1/\min(0.191, 0.288) = \mathbf{5.24}$
[b,a] = butter(2, [45 55]/500, 'stop')| 滤波器类型 | s域变换公式 | 零点位置 | 阶数变化 | 特征 |
|---|---|---|---|---|
| 低通 (LP) | $s \to s/\Omega_c$ | 无或高频 | $N \to N$ | 保留低频 |
| 高通 (HP) | $s \to \Omega_c/s$ | $z = 1$ | $N \to N$ | 保留高频 |
| 带通 (BP) | $s \to \frac{s^2+\Omega_0^2}{Bs}$ | $z = \pm 1$ | $N \to 2N$ | 选取特定频段 |
| 带阻 (BS) | $s \to \frac{Bs}{s^2+\Omega_0^2}$ | $z = e^{\pm j\omega_0}$ | $N \to 2N$ | 抑制特定频段 |
freqz 函数检查频率响应是否满足指标要求