2. 理想采样与重建:理想采样模型、零阶保持器、重建滤波器设计

好,咱们进入第二章。采样与重建,说白了就是连续世界和离散世界之间的桥梁。我当年刚接触数字信号处理时,总觉得这步很简单——不就是每隔一段时间取个点嘛?后来被现实狠狠教育了一顿。嗯,咱们今天就把这块彻底讲透。

2.1 理想采样模型

理想采样,在数学上可以看作连续信号与周期冲激串的乘积。你想想看,一个连续信号 x(t),乘上一个间隔为 T_s 的冲激串 δ_T(t),得到的就是离散时间序列 x[n]。

核心公式:

x_s(t) = x(t) · Σ δ(t - nT_s)
x[n] = x(nT_s)

其中 T_s 是采样周期,f_s = 1/T_s 是采样率。

我在项目中遇到过一位同事,他总觉得采样率越高越好,结果系统成本翻了一倍,性能却没提升多少。其实理想采样有个关键前提——采样定理。信号最高频率 f_max 必须小于 f_s/2,也就是奈奎斯特频率。否则,混叠就来了。

2.2 零阶保持器(ZOH)

理想采样在现实中没法直接实现。你没法生成完美的冲激串,也没法把冲激直接送给DAC。所以工程上我们用了零阶保持器。

零阶保持器干的事很简单:在每个采样时刻,把当前值保持住,直到下一个采样时刻到来。说白了就是「阶梯状」输出。

我个人习惯:把零阶保持器看作一个「采样保持电路」的数学抽象。它的传递函数是:

H_zoh(s) = (1 - e^(-sT_s)) / s

幅频响应有个 sinc 形状的滚降,在 f_s/2 处大约衰减 3.92 dB。

这个滚降很要命。如果你直接用ZOH输出,高频分量会被衰减,重建出来的信号会失真。我曾经在一个音频项目中忽略了这点,结果高频听起来「闷闷的」。后来加了一级预补偿才搞定。

2.3 重建滤波器设计

重建滤波器,也叫抗镜像滤波器。它的任务有两个:

  1. 平滑ZOH的阶梯输出,滤除高频镜像分量
  2. 补偿ZOH的sinc滚降,恢复原始信号的幅频特性

设计时我一般分三步走:

步骤 内容 注意事项
1 确定通带截止频率 通常取 0.8 × f_s/2 左右
2 确定阻带起始频率 从 f_s/2 开始,镜像分量出现
3 设计滤波器类型 巴特沃斯(平坦)、切比雪夫(陡峭)或椭圆(极陡)

我曾经踩过的坑:滤波器阶数不是越高越好。阶数高了,相位失真会变大,群延迟波动也会加剧。对于音频信号,人耳对相位失真很敏感。我建议先试4阶,不够再加。

重建滤波器的幅频响应需要补偿ZOH的 sinc 滚降。补偿公式很简单:

H_comp(f) = 1 / sinc(f / f_s)

把这个补偿曲线叠加到滤波器设计目标里,就能得到平坦的总响应。

2.4 完整流程:从采样到重建

咱们把整个链路串起来看看:

理想采样与重建完整流程 连续信号 x(t) 理想采样 离散序列 x[n] 零阶保持器 重建滤波 关键说明: 1. 理想采样在数学上完美,但物理不可实现 2. 零阶保持器是工程妥协,引入 sinc 滚降 3. 重建滤波器必须同时完成平滑 + 补偿两个任务 4. 总响应 = 采样 × ZOH × 重建滤波,目标是在通带内平坦

你看,从连续到离散再到连续,每一步都有代价。理想采样引入了镜像频谱,ZOH引入了滚降,重建滤波器则负责收拾残局。设计时一定要通盘考虑,不能只看单点性能。

2.5 仿真验证建议

最后给几个实操建议:

  • 先用理想模型验证算法,确认采样定理是否满足
  • 加入ZOH模型,观察sinc滚降对信号的影响
  • 设计重建滤波器,对比补偿前后的频谱差异
  • 用实际DAC模型(比如非零保持时间、抖动)做最终验证

一个小技巧:在MATLAB或Python里,可以用 resample 函数模拟采样率转换,配合 freqz 看滤波器响应。我习惯先画一张「总链路幅频响应图」,一眼就能看出哪里不平坦。

嗯,这一章的内容就到这里。采样与重建是数字信号处理的基石,理解透了,后面讲混叠、量化、抖动时你就能游刃有余。