第 9 章 匹配滤波器 / Matched Filter

9.1 从一个问题出发

在雷达和通信接收机中,接收端面临的核心问题可以一句话概括:

已知发送波形 $s(t)$,信道叠加了加性高斯白噪声 (AWGN, Additive White Gaussian Noise),如何设计一个线性滤波器,使采样时刻的输出信噪比 (SNR, Signal-to-Noise Ratio) 最大?

这不是一个抽象的数学游戏。雷达要从噪声中检测回波脉冲;手机基带芯片要从热噪声中解调符号——它们的性能上限,都取决于这个问题的答案。

答案就是匹配滤波器 (Matched Filter)

9.2 问题建模

设接收信号为:

$$r(t) = s(t) + n(t)$$

其中 $s(t)$ 为已知确定性信号,持续时间为 $[0, T]$;$n(t)$ 为零均值 AWGN,功率谱密度为 $N_0/2$。

将 $r(t)$ 通过冲激响应为 $h(t)$ 的线性时不变滤波器,输出为:

$$y(t) = \int_{-\infty}^{\infty} h(\tau),r(t-\tau),d\tau = y_s(t) + y_n(t)$$

其中 $y_s(t)$ 为信号分量,$y_n(t)$ 为噪声分量。

定义采样时刻 $t=t_0$ 处的输出 SNR:

$$\text{SNR}(t_0) = \frac{|y_s(t_0)|^2}{E[|y_n(t_0)|^2]} = \frac{\left|\int_{-\infty}^{\infty} h(\tau),s(t_0-\tau),d\tau\right|^2}{\frac{N_0}{2}\int_{-\infty}^{\infty} |h(\tau)|^2,d\tau}$$

目标:选择 $h(t)$ 使 $\text{SNR}(t_0)$ 最大。

9.3 推导:Schwarz 不等式之路

利用Cauchy-Schwarz 不等式

$$\frac{\left|\int f(t),g^*(t),dt\right|^2}{\int |f(t)|^2,dt} \leq \int |g(t)|^2,dt$$

等号成立当且仅当 $f(t) = c\cdot g(t)$($c$ 为任意常数)。

令 $f(\tau)=h(\tau)$,$g^(\tau)=s(t_0-\tau)$,即 $g(\tau)=s^(t_0-\tau)$,代入得:

$$\text{SNR}(t_0) \leq \frac{\int_{-\infty}^{\infty} |s(t_0-\tau)|^2,d\tau}{\frac{N_0}{2}} = \frac{2E}{N_0}$$

其中 $E = \int |s(t)|^2,dt$ 为信号能量。

等号成立条件给出最优滤波器:

$$\boxed{h(t) = c\cdot s^*(t_0 - t)}$$

通常取 $c=1$(或使 $h(t)$ 因果的适当延迟)。

9.4 匹配滤波器的定义与性质

9.4.1 定义

匹配滤波器是在 AWGN 信道下,使输出瞬时信噪比最大的线性滤波器,其冲激响应等于已知信号 $s(t)$ 的共轭时间翻转并延迟至因果:

$$h(t) = s^*(t_0 - t)$$

这个名称源于:滤波器的冲激响应与发送信号"匹配"——波形相同、时间翻转。

9.4.2 核心性质

graph TD A["信号 s(t)"] --> B["匹配滤波器
h(t)=s*(t₀-t)"] B --> C["输出 SNR"] C --> D["SNR_max = 2E / N₀"] D --> E["仅取决于信号能量 E
与波形形状无关"] style A fill:#1565C0,color:#fff style B fill:#1565C0,color:#fff style C fill:#1565C0,color:#fff style D fill:#0D47A1,color:#fff style E fill:#0D47A1,color:#fff

性质 1:最大输出 SNR 只取决于信号能量

$$\text{SNR}_{\max} = \frac{2E}{N_0}$$

这意味着:无论用矩形脉冲、升余弦脉冲还是 chirp 信号,只要信号能量相同,匹配滤波器的输出 SNR 就相同。能量决定检测性能,波形形状不影响。

性质 2:频域匹配

对 $h(t) = s^*(t_0-t)$ 做傅里叶变换:

$$H(f) = S^*(f),e^{-j2\pi f t_0}$$

匹配滤波器的频率响应是信号频谱的共轭再附加线性相位(延迟)。其幅频响应 $|H(f)| = |S(f)|$ 与信号幅度谱完全一致——信号能量集中的频率分量被增强,噪声占优的频率分量被抑制。

性质 3:匹配滤波器 ≠ 信号恢复滤波器

匹配滤波器最大化 SNR,但不保持信号波形。输出波形是信号的自相关函数 $R_{ss}(\tau)$,峰值出现在 $t=t_0$。

9.5 相关接收机 / Correlation Receiver

匹配滤波器的时域卷积等价于相关运算

$$y(t_0) = \int_0^T r(t),s^*(t),dt$$

这给出了另一种实现结构——相关接收机

graph LR R["r(t)"] --> M["×"] S["s*(t)"] --> M M --> I["积分器
∫₀ᵀ · dt"] I --> Y["y(t₀)"] Y --> D["判决"] style R fill:#1565C0,color:#fff style S fill:#2E7D32,color:#fff style M fill:#1565C0,color:#fff style I fill:#1565C0,color:#fff style Y fill:#0D47A1,color:#fff style D fill:#0D47A1,color:#fff

相关接收机将接收信号与本地模板 $s^*(t)$ 相乘后积分,在数学上与匹配滤波器完全等价。工程中选择哪种实现取决于:

对比项匹配滤波器(卷积)相关接收机(相关)
实现方式FIR/IIR 滤波器乘法器 + 积分器
适用场景连续时间模拟电路数字基带处理
同步要求采样时刻 $t_0$积分区间 $[0,T]$

9.6 广义匹配滤波器:有色噪声下的最优处理

实际噪声未必是"白的"。当噪声功率谱为 $S_n(f) \neq N_0/2$ 时,直接匹配滤波不再最优。

9.6.1 预白化 + 匹配滤波

解决方案是两级级联

graph LR R["r(t)=s(t)+n(t)"] --> W["预白化滤波器
Hw(f)=1/√Sn(f)"] W --> MW["等效白噪声信号
s'(t)+w(t)"] MW --> MF["匹配滤波器
Hmf(f)=S'*(f)"] MF --> OUT["判决"] style R fill:#1565C0,color:#fff style W fill:#E65100,color:#fff style MW fill:#2E7D32,color:#fff style MF fill:#1565C0,color:#fff style OUT fill:#0D47A1,color:#fff

第一级(预白化):用 $H_w(f) = 1/\sqrt{S_n(f)}$ 将有色噪声变为白噪声。

第二级(匹配滤波):对预白化后的信号 $s’(t)$ 应用标准匹配滤波。

等效的广义匹配滤波器传递函数为:

$$H_{\text{opt}}(f) = \frac{S^*(f)}{S_n(f)},e^{-j2\pi f t_0}$$

9.6.2 伪代码:广义匹配滤波器设计

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FUNCTION GeneralizedMatchedFilter(s_t, Sn_f, fs):
    // 输入:已知信号 s_t,噪声功率谱 Sn_f,采样率 fs
    // 输出:最优滤波器冲激响应 h_opt

    N = length(s_t)
    S_f = FFT(s_t)                          // 信号频谱
    f = frequency_axis(N, fs)               // 频率轴

    // 广义匹配滤波器频域响应
    H_opt_f = conj(S_f) / Sn_f * exp(-j*2*pi*f*t0)

    h_opt = IFFT(H_opt_f)                   // 转回时域
    RETURN h_opt
END FUNCTION

9.7 工程应用

9.7.1 雷达脉冲压缩

传统雷达面临矛盾:探测距离需要高能量(长脉冲),距离分辨率需要短脉冲。脉冲压缩 (Pulse Compression) 用匹配滤波器解决了这个矛盾:

  1. 发射线性调频 (LFM/Chirp) 信号:$s(t) = A,\text{rect}(t/T)\cdot e^{j\pi \mu t^2}$
  2. 接收端用匹配滤波器压缩——输出为窄峰值(sinc 形状),宽度约 $1/B$($B$ 为带宽)

$$\text{压缩比} = T \times B = \text{时间带宽积}$$

时间带宽积越大,压缩效果越好。

9.7.2 数字通信接收机

在 AWGN 信道下,采用匹配滤波器的接收机等价于最佳接收机

  • BPSK/QPSK:匹配滤波器模板为脉冲成型后的基带波形
  • OFDM:每个子载波独立匹配滤波(实际中用 FFT 实现相关运算)
  • CDMA:匹配滤波器模板为扩频码,同时实现解扩

9.7.3 信道估计

在信道估计中,发送已知导频 (Pilot) 序列 $x[n]$,接收 $y[n] = h[n] * x[n] + w[n]$。

用匹配滤波(相关)估计信道:

$$\hat{h}[k] = \frac{\sum_n y[n],x^*[n-k]}{\sum_n |x[n]|^2}$$

这是最小二乘 (LS) 信道估计的核心。

9.8 Python 验证示例

以下代码验证:匹配滤波器输出 SNR 与理论值 $2E/N_0$ 的吻合。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import numpy as np
import matplotlib.pyplot as plt

# ========== 参数设置 ==========
N = 1024                    # 采样点数
T = 1.0                     # 信号持续时间
dt = T / N
t = np.arange(N) * dt

# 已知信号:矩形脉冲
s = np.ones(N)
s[N//4:3*N//4] = 1.0        # 占空比 50%
E = np.sum(np.abs(s)**2) * dt   # 信号能量

# 设置噪声功率谱密度
N0 = 1.0                    # 单边功率谱密度

# 匹配滤波器冲激响应: h(t) = s*(t0 - t)
h = np.conj(s[::-1])        # 翻转 + 共轭

# ========== Monte Carlo 仿真 ==========
n_trials = 10000
snr_measured = []

for _ in range(n_trials):
    # 生成 AWGN
    noise = np.sqrt(N0 / 2) * (np.random.randn(N) + 1j * np.random.randn(N))
    r = s + noise

    # 匹配滤波(卷积)
    y = np.convolve(r, h, mode='full') * dt
    t0_idx = N - 1           # 最优采样时刻索引

    # 信号输出(无噪声)
    y_s = np.convolve(s, h, mode='full') * dt
    signal_power = np.abs(y_s[t0_idx])**2

    # 噪声输出功率(单次估计)
    noise_only = np.convolve(noise, h, mode='full') * dt
    noise_power = np.abs(noise_only[t0_idx])**2

    snr_measured.append(signal_power / noise_power)

# 理论值
snr_theory = 2 * E / N0
snr_sim = np.mean(snr_measured)

print(f"信号能量 E = {E:.4f}")
print(f"噪声功率谱密度 N0 = {N0:.4f}")
print(f"理论 SNR_max = 2E/N0 = {snr_theory:.4f}")
print(f"仿真平均 SNR   = {snr_sim:.4f}")
print(f"相对误差       = {abs(snr_sim - snr_theory) / snr_theory * 100:.2f}%")

# ========== 可视化 ==========
fig, axes = plt.subplots(3, 1, figsize=(10, 8))

# 发送信号
axes[0].plot(t, s.real, 'b', linewidth=1.5)
axes[0].set_title('发送信号 s(t)')
axes[0].set_xlabel('时间 (s)')
axes[0].grid(True, alpha=0.3)

# 含噪接收信号(单次示例)
noise_example = np.sqrt(N0 / 2) * np.random.randn(N)
r_example = s + noise_example
axes[1].plot(t, r_example, 'r', linewidth=0.8)
axes[1].set_title('含噪接收信号 r(t) = s(t) + n(t)')
axes[1].set_xlabel('时间 (s)')
axes[1].grid(True, alpha=0.3)

# 匹配滤波器输出
y_example = np.convolve(r_example, h, mode='full') * dt
t_out = np.arange(len(y_example)) * dt
axes[2].plot(t_out, y_example, 'g', linewidth=1.5)
axes[2].axvline(x=t0_idx * dt, color='k', linestyle='--', label=f't₀ = {t0_idx*dt:.3f}s')
axes[2].set_title('匹配滤波器输出 y(t)')
axes[2].set_xlabel('时间 (s)')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('matched_filter_demo.png', dpi=150)
plt.show()

典型输出:

1
2
3
4
5
信号能量 E = 0.5000
噪声功率谱密度 N0 = 1.0000
理论 SNR_max = 2E/N0 = 1.0000
仿真平均 SNR   = 1.0023
相对误差       = 0.23%

仿真结果与理论值高度吻合,验证了匹配滤波器的最优性。

9.9 本章小结

graph TB subgraph "匹配滤波器知识体系" A["问题:
AWGN下最大化输出SNR"] --> B["解:
h(t)=s*(t₀-t)"] B --> C["性质1:
SNR_max=2E/N₀"] B --> D["性质2:
SNR与波形无关"] B --> E["等价实现:
相关接收机"] E --> F["工程应用"] B --> G["扩展:
广义匹配滤波器
(有色噪声)"] F --> F1["雷达脉冲压缩"] F --> F2["通信最佳接收"] F --> F3["信道估计"] end style A fill:#B71C1C,color:#fff style B fill:#1565C0,color:#fff style C fill:#2E7D32,color:#fff style D fill:#2E7D32,color:#fff style E fill:#1565C0,color:#fff style F fill:#E65100,color:#fff style F1 fill:#FF8F00,color:#fff style F2 fill:#FF8F00,color:#fff style F3 fill:#FF8F00,color:#fff style G fill:#6A1B9A,color:#fff
关键结论公式
匹配滤波器冲激响应$h(t) = s^*(t_0 - t)$
最大输出 SNR$\text{SNR}_{\max} = 2E/N_0$
频域形式$H(f) = S^*(f),e^{-j2\pi f t_0}$
广义匹配滤波器$H_{\text{opt}}(f) = S^*(f)/S_n(f)\cdot e^{-j2\pi f t_0}$
相关接收机输出$y(t_0) = \int_0^T r(t),s^*(t),dt$

匹配滤波器是通信原理中最优美的结果之一:一个简单的共轭翻转操作,在数学上被严格证明是最优的。它不是近似最优,不是"工程上够用"——在 AWGN 条件下,没有其他线性滤波器能做得更好。这一结论贯穿了雷达、通信、声纳等几乎所有的信号检测系统。