B.4 基础插值方法
B.1 已经看到:插零以后还要低通滤波,才能把中间位置补成合理数值。时域上这是插值,频域上这是去镜像。
这一节还是用 2 倍升采样的任务,但换几种填值规则比一比:零阶保持、线性插值和低通插值。都能把样本点变多,但保真度、平滑性和频域代价各不一样。
本小节提出的这三种方法,都可以按照“插零-滤波”的模型来等效理解,零阶、线性均可以理解为频域的不同滤波器。为什么可以等效我会在下一小节讲。
最简单的办法是把前一个样本值保持到下一个样本到来之前。原序列如果是
2 倍零阶保持后的结果是
这叫零阶保持(zero-order hold, ZOH)。不需要算斜率,也不需要看远处的样本,只是把每个样本复制到后面的新位置。
MATLAB 里可以用 repelem 写出这个动作:
L = 2;y_zoh = repelem(x, L);零阶保持在时域上产生阶梯波形,样本交界处直接跳变,没有过渡。这些跳变对应频域里的高频成分,镜像抑制较弱,高频处会留下明显残余。

把零阶保持看成“先插零,再经过保持滤波器”,那么频域上它不是像理想低通那样把镜像硬切掉,而是用一个随频率下垂的包络去乘插零后的频谱。靠近 的镜像会被压低,但通带边缘也跟着下垂。为什么这样,下一讲会用公式揭晓。

零阶保持只看前一个样本。更平滑的办法是在相邻两个样本之间连一条直线,把中间点放在这条直线上。
相邻两个样本是 和 ,2 倍线性插值时,中间点取两者平均:
例如
2 倍线性插值后得到
新增的点 2、4、6 都来自相邻样本的平均。
old_index = 1:length(x);new_index = 1:0.5:length(x);y_linear = interp1(old_index, x, new_index, 'linear');线性插值比零阶保持平滑,高频残余少一些。但它只是局部直线近似,和理想低通重建不是一回事。信号变化越快,直线近似对高频细节的损失越明显。

从频域看,线性插值相当于用一个三角形插值核继续压低高频镜像。它比 ZOH 的镜像残余更少,但低通并不陡峭,通带边缘仍然会被削弱。公式推导一样在下一节给出。

B.1 中的插零加低通,也是一种插值方法。它先在样本之间插入零,再用低通滤波器根据周围样本补出中间值:
L = 2;x_up = zeros(1, L*length(x));x_up(1:L:end) = x;h = fir1(50, 1/L) * L;y_lpf = conv(x_up, h, 'same');ZOH 只看前一个样本,线性插值看相邻两个,低通插值则通过滤波器把一段邻域内的样本加权组合起来。滤波器越接近理想低通,输出越接近带限重建结果。
低通插值最好从频域理解:插零后频谱中出现镜像,低通滤波器保留基带,压制镜像。时域上得到平滑的插值结果,频域上完成抗镜像滤波。

单独放到频域里看:插零后,基带两侧出现镜像;低通滤波器只保留 的部分,把外侧镜像压掉。

频域特性对比
Section titled “频域特性对比”三种方法的频域代价不同。ZOH 的阶梯波形带来较多高频成分;线性插值相当于更平滑的局部平均,高频残余少一些;低通插值按照抗镜像目标设计,保真度最高,但计算量和延迟也跟着上去。
| 方法 | 时域规则 | 频域特点 | 计算量 | 适合场景 |
|---|---|---|---|---|
| ZOH | 重复前一个样本 | 高频镜像残余较明显 | 极低 | 粗略预览、保持型输出 |
| 线性插值 | 相邻样本连线 | 高频抑制好于 ZOH,但会削弱细节 | 低 | 一般数据补点、传感器数据 |
| FIR 低通插值 | 插零后低通滤波 | 可按频域指标压制镜像 | 中到高 | 音频、通信、频域保真要求高的转换 |

图 B.4-7 把三种方法都放到插值后的频谱里比较。虚线是插零后留下的镜像,实线是对应方法处理后的频谱。ZOH 能压低一部分高频镜像,但基带边缘已经开始下垂;线性插值的镜像残余更少,代价是高频细节进一步被削弱;FIR 低通插值按“保留基带、压制镜像”的目标设计,频谱最干净。
阶梯、直线、平滑曲线——三种时域形状,背后是不同程度的镜像残余和通带损伤。插值质量要回到频谱上判断,去看基带保得怎么样,镜像压得干不干净。