【发布时间】:2017-04-15 15:39:00
【问题描述】:
我想使用 MATLAB 进行音频信号重采样(将 fs = 8 kHz 的信号转换为 16 kHz)。
有 3 种插值方法可用:线性、pchip 和样条
https://in.mathworks.com/help/signal/ref/resample.html#bungoxs
其中哪些最适合语音信号,为什么?
【问题讨论】:
我想使用 MATLAB 进行音频信号重采样(将 fs = 8 kHz 的信号转换为 16 kHz)。
有 3 种插值方法可用:线性、pchip 和样条
https://in.mathworks.com/help/signal/ref/resample.html#bungoxs
其中哪些最适合语音信号,为什么?
【问题讨论】:
您可能不想使用其中任何一个,而是使用interpft,它通过频域中的零填充进行上采样。这假设所有较高频率的信号(高于 4 kHz)都是零 - 这些在记录过程中已经丢失。
【讨论】:
线性采样不会产生良好的结果,因为它不会捕获低采样率信号的“曲线”,结果是高频伪影(您将看到是否对上采样信号进行傅里叶变换) .
样条(意思是三次样条)是一种 pchip。基本上,如果您知道自己在做什么并想要微调参数,则可以使用 pchip。由于您不知道自己在做什么,因此只需使用带有默认参数的三次样条。从视觉上看,它们看起来不错,但是当我对宽度点(用于图形)进行插值时,我发现它们不够灵活,并且不得不使用五次样条曲线。高于五次,样条曲线变得非常摇摆且难以控制。但可能带有手动调整参数的五次样条曲线会为您提供最佳质量。
我在 Baby X 资源编译器中有复杂的上/下采样代码。然而,它不是由我开发的。 https://github.com/MalcolmMcLean/babyxrc
【讨论】:
上采样的最佳方法是使用 Sinc 内核插值或重建,使用(多相,如果需要)加窗 Sinc 在计算上是可行的。使用零填充 IFFT 进行上采样会产生类似的高质量插值,但圆形边界效果除外。
如果您必须使用 3 种可用方法中的一种,则 spline 不如 pchip 差,因为后者可能会剪裁一点,而且这两种方法都比线性差。
【讨论】: