数字高通、带通和带阻滤波器的设计

一、知识回顾与衔接

在前面的学习中,我们已经掌握了两种核心的IIR数字滤波器设计方法:

  • 脉冲响应不变法 (IIM):通过部分分式展开,将模拟滤波器的极点映射到数字域
  • 双线性变换法 (BLT):通过 $s = \frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}$ 实现s域到z域的映射

这两种方法都是基于模拟低通滤波器原型进行设计的。但在实际应用中,我们经常需要设计高通带通带阻等类型的滤波器。

核心问题:如何从一个模拟低通原型,得到其他类型的数字滤波器?

二、总体设计框架(5步法)

确定数字滤波器
类型和技术指标
明确设计目标:确定滤波器类型(低通LP / 高通HP / 带通BP / 带阻BS)
  • 频率指标:通带截止频率 $\omega_p$、阻带截止频率 $\omega_s$(单位:rad,范围 $0 \sim \pi$)
  • 衰减指标:通带最大衰减 $\alpha_p$ (dB)、阻带最小衰减 $\alpha_s$ (dB)
将数字频率指标转换
为模拟低通原型指标
频率预畸变(双线性变换的核心步骤):

$$\Omega = \frac{2}{T}\tan\left(\frac{\omega}{2}\right)$$

将数字域频率 $\omega$ 映射到模拟域频率 $\Omega$,避免频率响应失真。然后根据目标滤波器类型,进一步转换为等效的低通原型指标。
设计归一化模拟
低通原型滤波器
选择滤波器类型并计算阶数:
  • Butterworth:最大平坦幅频特性,无波纹,过渡带较宽
  • Chebyshev I型:通带等波纹,过渡带较窄
  • Chebyshev II型:阻带等波纹,通带平坦
  • Elliptic (Cauer):通带阻带均等波纹,过渡带最窄
得到归一化传递函数 $H_a(s)$,截止频率 $\Omega_c = 1$ rad/s。
通过s域频率变换
得到过渡型模拟滤波器
应用频率变换公式,将低通原型转换为目标类型:
  • 低通→低通:$s \to s/\Omega_c$
  • 低通→高通:$s \to \Omega_c/s$
  • 低通→带通:$s \to (s^2+\Omega_0^2)/(Bs)$
  • 低通→带阻:$s \to Bs/(s^2+\Omega_0^2)$
应用双线性变换
得到数字滤波器
s域到z域的映射:

$$s = \frac{2}{T}\frac{1-z^{-1}}{1+z^{-1}}$$

将模拟滤波器传递函数 $H_a(s)$ 转换为数字滤波器传递函数 $H(z)$,完成设计。
在实际工程中,步骤②④⑤可以合并——直接使用MATLAB的 buttercheby1ellip 等函数一步完成设计,但理解完整流程有助于掌握设计本质和调试问题。

三、频率变换公式汇总

s域频率变换(模拟域)

变换类型 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 = \frac{2}{T}\tan\left(\frac{\omega}{2}\right)$$

$\omega$:数字角频率 (rad),$\Omega$:模拟角频率 (rad/s),$T$:采样周期 (s)

Butterworth滤波器阶数公式
$$N \geq \frac{\lg\left[\left(10^{0.1\alpha_s}-1\right)/\left(10^{0.1\alpha_p}-1\right)\right]}{2\lg(\Omega_s/\Omega_p)}$$

$N$ 取大于等于计算结果的最小整数


例1:数字低通滤波器设计

Lowpass Filter — 基础设计流程完整演示
设计指标:
  • 采样频率 $f_s = 1000$ Hz($T = 0.001$ s)
  • 通带截止频率 $f_p = 100$ Hz,通带衰减 $\alpha_p \leq 1$ dB
  • 阻带截止频率 $f_{st} = 200$ Hz,阻带衰减 $\alpha_s \geq 15$ dB
  • 采用Butterworth滤波器,双线性变换法
Step 1~2:频率转换与预畸变

Step 1:转换为数字角频率

$$\omega_p = \frac{2\pi \times 100}{1000} = 0.2\pi \ \text{rad}, \quad \omega_s = \frac{2\pi \times 200}{1000} = 0.4\pi \ \text{rad}$$

Step 2:频率预畸变

应用公式 $\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}$$
Step 3:计算Butterworth阶数
$$N \geq \frac{\lg\left[\frac{10^{0.1 \times 15}-1}{10^{0.1 \times 1}-1}\right]}{2\lg(1453.1/649.8)} = \frac{\lg(118.3)}{2\lg(2.236)} = \frac{2.073}{0.699} = 2.97$$

$N = 3$(向上取整)

Step 4~5:构建原型与双线性变换

Step 4:3阶Butterworth归一化传递函数

$$H_a(s) = \frac{1}{(s+1)(s^2+s+1)}$$

去归一化:$s \to s/\Omega_c$,取 $\Omega_c = \Omega_p = 649.8$ rad/s

Step 5:双线性变换

代入 $s = 2000 \cdot \frac{1-z^{-1}}{1+z^{-1}}$,经代数运算得:

最终结果:$H(z) = \dfrac{0.0181(1+z^{-1})^3}{1 - 1.760z^{-1} + 1.183z^{-2} - 0.278z^{-3}}$
频率响应与零极点分布
幅频响应 |H(e)|
零极点分布图

例2:数字高通滤波器设计

Highpass Filter — 低频信号滤除
设计指标:
  • 采样频率 $f_s = 8000$ Hz($T = 0.000125$ s)
  • 通带截止频率 $f_p = 1500$ Hz,通带衰减 $\alpha_p \leq 1$ dB
  • 阻带截止频率 $f_{st} = 500$ Hz,阻带衰减 $\alpha_s \geq 30$ dB
高通滤波器中,阻带频率 < 通带频率,这与低通相反。
Step 1~2:频率转换与预畸变

Step 1:数字角频率

$$\omega_p = 0.375\pi \ \text{rad}, \quad \omega_s = 0.125\pi \ \text{rad}$$

Step 2:频率预畸变(c = 2/T = 16000)

$$\Omega_p = 16000 \times \tan(0.1875\pi) = \mathbf{10691} \ \text{rad/s}$$ $$\Omega_s = 16000 \times \tan(0.0625\pi) = \mathbf{3183} \ \text{rad/s}$$
Step 3:转换为等效低通原型指标(关键步骤)

高通→低通的频率映射:

令 $\Omega_c = \Omega_p$,等效低通原型的选择性参数为:

$$\lambda = \frac{\Omega_c}{\Omega_s} = \frac{10691}{3183} = \mathbf{3.36}$$
Step 4~7:阶数计算与变换

阶数计算

$$N \geq \frac{\lg(999/0.2589)}{2\lg(3.36)} = \frac{3.586}{1.052} = 3.41 \Rightarrow N = 4$$

4阶Butterworth归一化

$$H_{LP}(s) = \frac{1}{(s^2 + 0.7654s + 1)(s^2 + 1.8478s + 1)}$$
最终结果:$H(z) = \dfrac{0.1518(1-z^{-1})^4}{1 - 0.4426z^{-1} + 0.8886z^{-2} - 0.2209z^{-3} + 0.0544z^{-4}}$
高通滤波器分子为 $(1-z^{-1})^N$,在 $z=1$($\omega=0$)处有N重零点,完全抑制直流分量。
频率响应与零极点分布
幅频响应 |H(e)|
零极点分布(零点在z=1)

例3:数字带通滤波器设计

Bandpass Filter — 选频应用
设计指标:
  • 采样频率 $f_s = 10000$ Hz
  • 通带范围:$f_{p1} = 1000$ Hz ~ $f_{p2} = 1500$ Hz,$\alpha_p \leq 3$ dB
  • 阻带范围:$f < 500$ Hz 或 $f > 2000$ Hz,$\alpha_s \geq 20$ dB
Step 1~3:频率转换与带通参数计算

预畸变结果(c = 20000)

$$\Omega_{p1} = 6498, \ \Omega_{p2} = 10328, \ \Omega_{s1} = 3168, \ \Omega_{s2} = 14531 \ \text{(rad/s)}$$

带通参数

几何中心频率:$\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

Step 4:转换为等效低通原型指标

带通→低通变换公式:$\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}$

Step 5~8:阶数计算与结果

阶数计算

$$N \geq \frac{\lg(99.5)}{2\lg(2.59)} = 2.42 \Rightarrow N = 3$$
带通滤波器最终阶数是 $2N = 6$ 阶(低通→带通变换使阶数翻倍)
MATLAB代码:[b,a] = butter(3, [1000 1500]/5000, 'bandpass')
结果为6阶数字带通滤波器
频率响应与零极点分布
幅频响应 |H(e)|
零极点分布(零点在z=±1)

例4:数字带阻滤波器设计

Bandstop/Notch Filter — 50Hz工频干扰消除
设计指标:
  • 采样频率 $f_s = 1000$ Hz
  • 阻带范围:$f_{s1} = 45$ Hz ~ $f_{s2} = 55$ Hz,$\alpha_s \geq 20$ dB
  • 通带范围:$f < 30$ Hz 或 $f > 70$ Hz,$\alpha_p \leq 3$ dB

应用场景:消除电网50Hz工频干扰

Step 1~3:频率转换与带阻参数计算

预畸变结果(c = 2000)

$$\Omega_{s1} = 284.3, \ \Omega_{s2} = 348.3, \ \Omega_{p1} = 189.0, \ \Omega_{p2} = 445.0 \ \text{(rad/s)}$$

带阻参数

中心频率:$\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

Step 4:等效低通指标与阶数计算

带阻→低通变换公式:$\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}$

阶数计算

$$N \geq \frac{2.0}{1.438} = 1.39 \Rightarrow N = 2$$
带阻滤波器最终阶数是 $2N = 4$ 阶
MATLAB代码:[b,a] = butter(2, [45 55]/500, 'stop')
结果为4阶数字带阻滤波器,在50Hz处有深度陷波
带阻滤波器的零点位于单位圆上,对应阻带中心频率 $\omega_0 = 0.1\pi$,即 $z = e^{\pm j0.1\pi}$。
频率响应与零极点分布
幅频响应(50Hz陷波)
零极点分布(零点在单位圆上)

四、设计方法总结

滤波器类型 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$ 抑制特定频段

MATLAB快速设计代码

% Butterworth滤波器设计 [b,a] = butter(N, Wn, 'low'); % 低通 [b,a] = butter(N, Wn, 'high'); % 高通 [b,a] = butter(N, [Wn1 Wn2], 'bandpass'); % 带通 [b,a] = butter(N, [Wn1 Wn2], 'stop'); % 带阻 % Wn = f_cutoff / (fs/2),归一化频率,范围 (0, 1) % 使用 freqz(b,a) 绘制频率响应验证设计

学习要点总结

  1. 掌握5步设计流程:理解每一步的物理意义和数学变换
  2. 频率预畸变是核心:这是双线性变换法避免频率混叠的关键
  3. 带通/带阻设计要点:正确计算几何中心频率 $\Omega_0$ 和带宽 $B$,注意阶数翻倍
  4. 设计后验证:使用 freqz 函数检查频率响应是否满足指标要求