数字信号处理的世界是离散的、有限精度的,先把连续信号采样量化带来的两道坎讲透(混叠与量化噪声),再落到底层的"拿主意"工具:匹配滤波与相关检测是最优检测,LS/MMSE/ML 是最常用的估计器。这两半合在一起,正好封住前面所有链路加工的底层原理。
前面两节把滤波、频谱这两个最常用的工具拎到手上,可这两个都是"处理",源头在哪呢?源头是"从连续物理世界采样本放进数字机"——这一步要踩两道坎:一是时间上的采样,二是幅度上的量化。踩错了,后面再好的滤波再准的频谱也拿不回本来信息;踩对了,给后续算法铺好地基。我们把这两道坎踏稳之后,再说说"从一堆噪声里把正确答案捞出来"的底层估计与检测方法——这些工具其实之前章节已经在用,现在给它摘帽子说清楚。
阅读完本节,你应当能够:
采样的规矩就一条——奈奎斯特/香农采样定理:采样率必须超过信号最高频率的两倍,否则高频成分会被"折返"成低频假象,这叫混叠。它的后果是致命的:混叠进来的假频率不像噪声那样只污染一点,它会完整伪装成那个位置的真信号,再无还原机会。
import numpy as np fs = 100.0 # 采样率 100 Hz → 奈奎斯特 50 Hz t_hi = np.arange(0, 1, 1/8000.0) hi = np.sin(2*np.pi*80*t_hi) # 一段 80 Hz 的信号,高于奈奎斯特 t_s = np.arange(0, 1, 1/fs) sampled = np.sin(2*np.pi*80*t_s) # 直接采 80 Hz → 发生混叠 # 用两倍率以上的 fs 才不混叠;低于则由 80 折回 20 Hz 的假象 print("80Hz 用 100Hz 采样后,折回观感频率 =", abs(80 - fs))
这段算出 80 Hz 被 100 Hz 采样后折成 20 Hz 的"假分子"——用频谱看你会看到一个 20 Hz 的大包,怎么像真信号,其实全是骗局。工程补救有三:采样率设得富余、采样前加抗混叠低通(5.1 那只滤波器就在这上岗)、过采样再数字低通。
采样的下一步是量化——把连续幅度掰到有限档位。档位间隔的一半是量化误差,误差总体近似一个均匀分布噪声,其功率约等于 Δ²/12。由此得到动态范围的经典公式:信噪比 ≈ 6.02·N + 1.76 dB(N 为量化比特数)。一句口诀:每多 1 个量化比特,动态范围约增长 6 dB。
这个数几乎直接决定 ADC 的选型:要压住近百 dB 邻近的干扰峰、又保底层的微弱导频,就得上 16~18 位 ADC,代价是采样率与成本;反之只要信道干净、工况稳定,14 位就够。身后的 ADC 选型,一半是在"动态范围–采样率–功耗"上找平衡,兜底的是这句 6 dB/bit。
在 AWGN 里检测一个已知波形,最优的做法是把接收信号与"已知波形的时间反转、共轭"做卷积或相关——称为匹配滤波,它能给出最大输出信噪比。关键洞察:匹配滤波就是相关检测。因为相关就是"把接收信号和模板逐点相乘累加",和匹配滤波的卷积只差一个时间反向,本是一回事。
这个"对齐模板比一比像不像"的招,是无线里最强通用零件:它是导频同步的引擎、解调星座判定的原理、也是 CDMA 解扩与雷达回波检测的底牌。下述代码演示匹配滤波对一张已知脉冲的最优响应:
import numpy as np N = 200 t = np.arange(N)/100.0 pulse = np.exp(-t*0.5) * np.cos(2*np.pi*3*t) # 已知模板 r = pulse + 0.3*np.random.randn(N) # 收到的含噪信号 # 匹配滤波:与模板相关 y = np.convolve(r, pulse[::-1])[N-1:N+9] print("相关输出尖峰位置附近的幅度:", np.round(y, 3)) # 尖峰出现在对齐时刻,这就是"检测到了"的证据
在噪声大出很多倍的环境里,相关输出仍能在对齐处冒一根尖峰——匹配滤波的信噪比增益就是这么来的。它的价值,在于把"看不见"的信号从噪声里救回要看的"对齐证据"。
把"从观测猜测参数"这件事,越答越深:
| 估计器 | 目标 | 需要 | 特点 |
|---|---|---|---|
| LS | 最小残差平方和 | 无先验 | 简单、常用 |
| MMSE | 最小均方误差 | 噪声统计量 | 稳、需估噪 |
| ML | 观测似然最大 | 似然模型 | 高斯下=LS |
三者的边界听着绕,但落到实践非常实:信道估计没先验先上 LS,均衡要稳优先 MMSE,有清晰似然模型用 ML——你在 4.2 里见的正是这几兄弟的日常排班。
第5章把通用零件打磨完毕。第6章把它们搬上大舞台——多天线与多载波,让同一批刀在多器官上开。