Skip to content

B.4 基础插值方法

B.1 已经看到:插零以后还要低通滤波,才能把中间位置补成合理数值。时域上这是插值,频域上这是去镜像。

这一节还是用 2 倍升采样的任务,但换几种填值规则比一比:零阶保持、线性插值和低通插值。都能把样本点变多,但保真度、平滑性和频域代价各不一样。

本小节提出的这三种方法,都可以按照“插零-滤波”的模型来等效理解,零阶、线性均可以理解为频域的不同滤波器。为什么可以等效我会在下一小节讲。

最简单的办法是把前一个样本值保持到下一个样本到来之前。原序列如果是

x[n]=[1,2,3,4]x[n] = [1, 2, 3, 4]

2 倍零阶保持后的结果是

y[n]=[1,1,2,2,3,3,4,4]y[n] = [1, 1, 2, 2, 3, 3, 4, 4]

这叫零阶保持(zero-order hold, ZOH)。不需要算斜率,也不需要看远处的样本,只是把每个样本复制到后面的新位置。

MATLAB 里可以用 repelem 写出这个动作:

L = 2;
y_zoh = repelem(x, L);

零阶保持在时域上产生阶梯波形,样本交界处直接跳变,没有过渡。这些跳变对应频域里的高频成分,镜像抑制较弱,高频处会留下明显残余。

图B.4-1:零阶保持
图B.4-1:零阶保持

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

图B.4-2:零阶保持的频谱
图B.4-2:零阶保持的频谱

零阶保持只看前一个样本。更平滑的办法是在相邻两个样本之间连一条直线,把中间点放在这条直线上。

相邻两个样本是 x[n]x[n]x[n+1]x[n+1],2 倍线性插值时,中间点取两者平均:

y[2n]=x[n]y[2n] = x[n] y[2n+1]=x[n]+x[n+1]2y[2n+1] = \frac{x[n]+x[n+1]}{2}

例如

x[n]=[1,3,5,7]x[n]=[1, 3, 5, 7]

2 倍线性插值后得到

y[n]=[1,2,3,4,5,6,7]y[n]=[1, 2, 3, 4, 5, 6, 7]

新增的点 2、4、6 都来自相邻样本的平均。

old_index = 1:length(x);
new_index = 1:0.5:length(x);
y_linear = interp1(old_index, x, new_index, 'linear');

线性插值比零阶保持平滑,高频残余少一些。但它只是局部直线近似,和理想低通重建不是一回事。信号变化越快,直线近似对高频细节的损失越明显。

图B.4-3:线性插值
图B.4-3:线性插值

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

图B.4-4:线性插值的频谱
图B.4-4:线性插值的频谱

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 只看前一个样本,线性插值看相邻两个,低通插值则通过滤波器把一段邻域内的样本加权组合起来。滤波器越接近理想低通,输出越接近带限重建结果。

低通插值最好从频域理解:插零后频谱中出现镜像,低通滤波器保留基带,压制镜像。时域上得到平滑的插值结果,频域上完成抗镜像滤波。

图B.4-5:插零加低通
图B.4-5:插零加低通

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

图B.4-6:低通插值的频谱
图B.4-6:低通插值的频谱

三种方法的频域代价不同。ZOH 的阶梯波形带来较多高频成分;线性插值相当于更平滑的局部平均,高频残余少一些;低通插值按照抗镜像目标设计,保真度最高,但计算量和延迟也跟着上去。

方法时域规则频域特点计算量适合场景
ZOH重复前一个样本高频镜像残余较明显极低粗略预览、保持型输出
线性插值相邻样本连线高频抑制好于 ZOH,但会削弱细节一般数据补点、传感器数据
FIR 低通插值插零后低通滤波可按频域指标压制镜像中到高音频、通信、频域保真要求高的转换
图B.4-7:插值方法比较
图B.4-7:插值方法比较

图 B.4-7 把三种方法都放到插值后的频谱里比较。虚线是插零后留下的镜像,实线是对应方法处理后的频谱。ZOH 能压低一部分高频镜像,但基带边缘已经开始下垂;线性插值的镜像残余更少,代价是高频细节进一步被削弱;FIR 低通插值按“保留基带、压制镜像”的目标设计,频谱最干净。

阶梯、直线、平滑曲线——三种时域形状,背后是不同程度的镜像残余和通带损伤。插值质量要回到频谱上判断,去看基带保得怎么样,镜像压得干不干净。