在matlab中以不同的采样率为语音添加噪声

时间:2017-03-09 21:41:43

标签: matlab speech noise

我正在尝试将噪音文件(.wav)文件添加到语音信号(.wav)中。

[b fs]=audioread('AzBio_01-01_S60.wav');
[babble fs1]=audioread('cafeteria_babble.wav');

问题是这两个文件的采样率不同(fs = 22050,fs1 = 44100)。

当我添加它们时,由于采样率不同,它会扭曲另一个信号。我该如何解决这个问题。我正在通过

播放声音
 p=audioplayer (total,fs)
  play (p)

1 个答案:

答案 0 :(得分:2)

失真将归因于样本值总和大于1而不是采样率差异。为了应对这种风险,在将两个向量相加之前将它们除以2。

那就是说,你仍然需要处理采样率差异。有两种方法可以做到这一点:要么采用较高的采样率来降低信号的采样率,要么提高其他信号的采样率。

使用更高的速率降低信号的采样率更容易,但缺点是您实际上正在丢失数据。您可以使用resample执行此操作。 resample(babble, fs, fs1)

或者,您可以使用较低的采样频率对信号进行上采样。这不会为您提供更多数据,但这意味着采样率匹配。你可以用interp1做到这一点。 b = interp1(1:length(b),b,0.5:0.5:length(b))

总结

[b fs]=audioread('AzBio_01-01_S60.wav'); 
[babble fs1]=audioread('cafeteria_babble.wav');
b = interp1(1:length(b),b,0.5:0.5:length(b)); % interpolate b to fs1
total = b/2 + babble/2; % sum at half the sample values
p=audioplayer (total,fs1);
play (p)