在MATLAB中重新采样音频

6

我有一个wav文件已经被导入到MATLAB,其采样率为44.1 kHz。我想将这个音频文件重新采样为22.05 kHz,然后将其恢复到44.1 kHz。然而,我不确定如何使用MATLAB中的resample函数,也不确定是否应该使用该函数来完成此操作。非常感谢您的帮助。谢谢!


1
我不是Matlab专家,但我确定这取决于你想要实现什么。你可能想解释一下为什么要进行下采样,然后再次上采样回到起点。这种方式唯一能够实现的就是降低信号质量。 - Bjorn Roche
1
我这么做的原因是为了测试我的音频水印对重采样的鲁棒性。 - Math244
1个回答

11

是的,resample 就是你要用的函数。要将 x 从 44100 Hz 下采样到 22050 Hz:

y = resample(x,1,2);

(“1”和“2”参数定义了重采样比率:22050/44100 = 1/2)
升频回到44100 Hz:
x2 = resample(y,2,1);

请注意,resample函数包含必要的抗混叠(低通)滤波器。
正如您可能知道的那样,“恢复”的信号x2已经失去了在x中可能存在的最高频率信息。

4
如果其他人需要阅读你的代码,为了更加明确,你可以使用 y = resample(x,22050,44100);x2 = resample(y,44100,22050);。这样做可以进行音频采样率的转换。 - Hugh Nolan
谢谢,我已经添加了一条注释来澄清。 - Luis Mendo
由于下采样的速率恰好是一半,您也可以只执行 y = x(1:2:end) - David K
1
@DavidK 这不是一个好主意。它会导致别名效应。你需要在此之前进行低通滤波——这就是重新采样所做的。 - Luis Mendo
1
处理语音信号的读者可能还需要考虑这个问答,它涉及到应该与resample一起使用的插值设置。简而言之interpft可能比resample的任何设置更适合此用例。 - Dev-iL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接