为什么语音、音频很多时候需要线性相位滤波器(附 Python 仿真)

​ 在数字信号处理(DSP)的世界里,滤波器不仅改变信号的幅值(让某些频率通过,滤除另一些频率),还会不可避免地改变信号的相位

​ 对于传统的 IIR 滤波器(如巴特沃斯、切比雪夫),不同频率的信号成分通过滤波器后,会产生不同的时间延迟,这种现象被称为相位失真。在语音通信、图像处理、数字相控阵及现代无线通信中,相位失真会导致波形畸变、码间串扰等致命问题,而线性相位滤波器能够实现严格的线性相位。本文将从数学定义、频响特性、相频特性、群延迟四个维度深入解析线性相位 FIR 滤波器,并使用 Python 进行完整的可视化仿真。


一、 核心定义:什么是线性相位?

一个时域有限的长为 $N$​ 的 FIR 滤波器,其系统函数为 $h(n)$​,其频率响应可以表示为: $$ H(e^{j\omega}) = \sum_{n=0}^{N-1} h(n)e^{-j\omega n} = |H(e^{j\omega})|e^{j\theta(\omega)} $$ 其中 $|H(e^{j\omega})|$ 为幅频特性,$\theta(\omega)$ 为相频特性

所谓线性相位(Linear Phase),是指相频特性 $\theta(\omega)$ 满足关于角频率 $\omega$ 的线性函数关系: $$ \theta(\omega) = -\alpha\omega \quad \text{或} \quad \theta(\omega) = \beta - \alpha\omega $$

时域的充要条件:对称性

数学上可以证明,FIR 滤波器要实现严格的线性相位,其时域冲激响应 $h(n)$ 必须满足对称性反对称性,即以其几何中心为轴对齐:

$$h(n) = h(N-1-n)$$

$$h(n) = -h(N-1-n)$$

根据滤波器长度 $N$ 是奇数还是偶数,配合对称/反对称,线性相位 FIR 滤波器在业界被细分为四种类型(Type I, II, III, IV)。在实际应用中,Type I(奇数长度,严格对称)是最常用的低通、高通、带通滤波器结构。

四种线性相位FIR滤波器冲激响应对比

二、 频响特性、相频特性与群延迟

为了更好地理解线性相位的物理意义,我们需要拆解它的三个核心指标:

1. 相频特性 (Phase Response)

当 $\theta(\omega) = -\alpha\omega$ 时,相位随着频率的增加呈一条完美的直线下降。

2. 群延迟 (Group Delay)

群延迟 $\tau_g(\omega)$ 的定义是相频特性对频率导数的负值:

$$\tau_g(\omega) = -\frac{d\theta(\omega)}{d\omega} = -\frac{d(-\alpha\omega)}{d\omega} = \alpha$$

对于长度为 $N$ 的严格对称 FIR 滤波器,其群延迟 $\alpha = \frac{N-1}{2}$。由于 $\alpha$ 是一个常数,这意味着:所有频率成分的信号通过该滤波器后,在时域上都会被延迟固定的 $\alpha$ 个采样周期。 这种“齐步走”的特性,保证了波形不会产生任何相位畸变。

3. 幅频特性 (Magnitude Response)

由于时域的对称性,复数求和可以转化为实数三角函数的组合,从而彻底消除了复数相位对幅度放大缩小的影响,使滤波器能专注于平坦的通带与干净的阻带设计。


三、 Python 仿真实现

下面我们使用 Python 的 scipy.signalmatplotlib 库,设计一个长度 $N=31$(Type I)的线性相位低通 FIR 滤波器,并绘制其时域、幅频、相频及群延迟曲线。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# 解决matplotlib中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

# =========================================================================
# 1. 滤波器参数设计 (Type I 线性相位 FIR)
# =========================================================================
N = 31               # 滤波器长度 (奇数)
fc = 0.3             # 归一化截止频率 (0.0 到 1.0,1.0 对应奈奎斯特频率 pi)

# 使用汉宁窗设计低通FIR滤波器(firwin默认生成对称系数,即线性相位)
h = signal.firwin(N, fc, window='hanning')

# =========================================================================
# 2. 计算频率响应与群延迟
# =========================================================================
# 计算频响
w, H = signal.freqz(h, worN=1024)

# 计算幅频 (dB)
magnitude_dB = 20 * np.log10(np.abs(H))

# 计算相频 (度) 并展开相位避免跳变
phase_rad = np.unwrap(np.angle(H))
phase_deg = np.degrees(phase_rad)

# 计算群延迟
w_gd, gd = signal.group_delay((h, 1), w=1024)

# =========================================================================
# 3. 绘图与特性说明
# =========================================================================
plt.figure(figsize=(12, 9))

# 子图1:时域冲激响应 h(n)
plt.subplot(2, 2, 1)
lines = plt.stem(range(N), h, basefmt=" ")
plt.setp(lines[0], 'markerfacecolor', 'b')
plt.axvline(x=(N-1)/2, color='r', linestyle='--', label=f'对称轴 (n={(N-1)//2})')
plt.title('1. 时域冲激响应 $h(n)$ [严格对称]')
plt.xlabel('样点 (n)')
plt.ylabel('幅值')
plt.grid(True)
plt.legend()

# 子图2:幅频特性 (dB)
plt.subplot(2, 2, 2)
plt.plot(w / np.pi, magnitude_dB, 'b', linewidth=2)
plt.title('2. 幅频特性 (Magnitude Response)')
plt.xlabel('归一化频率 ($\\times\\pi$ rad/sample)')
plt.ylabel('幅度 (dB)')
plt.ylim([-80, 5])
plt.grid(True)

# 子图3:相频特性 (线性相位)
plt.subplot(2, 2, 3)
plt.plot(w / np.pi, phase_deg, 'g', linewidth=2)
plt.title('3. 相频特性 (Linear Phase)')
plt.xlabel('归一化频率 ($\\times\\pi$ rad/sample)')
plt.ylabel('相位 (度)')
plt.grid(True)

# 子图4:群延迟 (常数延迟)
plt.subplot(2, 2, 4)
plt.plot(w_gd / np.pi, gd, 'r', linewidth=2)
plt.title('4. 群延迟 (Constant Group Delay)')
plt.xlabel('归一化频率 ($\\times\\pi$ rad/sample)')
plt.ylabel('群延迟 (样点数)')
plt.ylim([0, N])
plt.grid(True)

plt.tight_layout()
plt.show()

四、 仿真图形深度解读

四种线性相位FIR滤波器冲激响应对比

运行上述 Python 代码后,将得到包含四张子图的可视化结果。

  1. 图 1 (时域冲激响应): 可以清晰地看到,以 $n=15$ 为中心(即 $\frac{31-1}{2}$),左右两侧的系数是严格轴对称的($h(0)=h(30), h(1)=h(29)\dots$)。这种时域的对称,正是诞生线性相位的几何根基。
  2. 图 2 (幅频特性): 标准的低通滤波曲线。在归一化频率 $0.3\pi$ 附近开始过渡,阻带具有良好的衰减特性(由汉宁窗函数的性能决定)。
  3. 图 3 (相频特性): 在滤波器的通带内,相位随频率的增加呈一条绝对的直线向下倾斜。这用实验直观验证了 $\theta(\omega) = -15\omega$ 的线性关系。
  4. 图 4 (群延迟特性): 群延迟在全频段内是一条一字水平线,其纵坐标恒等于 15。这意味着,不论是低频信号还是通带边缘信号,通过这个滤波器后,都一视同仁地被延迟了 15 个采样点。波形的相对位置没有发生任何错位。

五、 总结与工程启示

线性相位 FIR 滤波器用“时域对称”的微小代价,换取了“相位无失真”的巨大优势。在工程落地时,我们可以得出以下结论: