我想使用MATLAB进行音频信号重采样(将fs = 8 kHz的信号转换为16 kHz)。有三种插值方法可用:线性插值、pchip和spline。
https://in.mathworks.com/help/signal/ref/resample.html#bungoxs
哪一个对于语音信号最合适,为什么?
https://in.mathworks.com/help/signal/ref/resample.html#bungoxs
哪一个对于语音信号最合适,为什么?
您可能不想使用这些方法之一,而是使用interpft
函数。该函数通过在频域中进行零填充来实现上采样。这意味着所有高频信号(超过4kHz)都为零 - 这些信号在录制过程中已经丢失。
线性采样结果不佳,因为它不能捕捉低采样率信号的“曲度”,结果是高频伪像(如果您对上采样的信号进行傅里叶变换就会看到)。
样条(即立方样条)是一种 pchip。基本上,如果您知道自己在做什么并想微调参数,则可以使用 pchip。由于您不知道自己在做什么,只需使用默认参数的立方样条即可。从视觉上看,它们看起来还不错,尽管当我在插值宽度点(用于图形)时发现它们不够灵活,必须使用五次样条。高于五次,样条会变得非常扭曲和难以控制。但是手动调整参数后的五次样条可能会给您带来最好的质量。
在 Baby X 资源编译器中,我有复杂的上/下采样代码。不过,这不是我开发的。
https://github.com/MalcolmMcLean/babyxrc最佳的上采样方法是使用Sinc核插值或重构,使用(如果需要)分段Sinc加窗以实现计算可行性。使用零填充IFFT进行上采样会产生类似的高质量插值,但会出现循环边界效应。
如果必须使用您的三种可用方法之一,则样条比pchip更好,因为后者可能会稍微截断,这两种方法都比线性更好。