【问题标题】:Add noise to speech with different sampling rates in matlab在matlab中以不同的采样率向语音中添加噪声
【发布时间】:2017-03-09 21:41:43
【问题描述】:

我正在尝试将噪声文件 (.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)

【问题讨论】:

    标签: matlab speech noise


    【解决方案1】:

    失真将是由于采样值总和大于 1 而不是采样率差异。为了应对这种风险,先将两个向量除以二,然后再相加。

    也就是说,您仍然需要处理采样率差异。有两种方法可以做到这一点:要么降低采样率较高的信号的采样率,要么增加另一个信号的采样率。

    以较高的速率降低信号的采样率更容易,但缺点是您实际上会丢失数据。您可以通过使用重采样来做到这一点。 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)
    

    【讨论】:

    • 为了避免混叠,最好通过resample 进行下采样,而不是只取一半的样本。另外,我认为您有一个错字:您提到了interp1,但不要使用它。 (注意resample也可以代替interp1
    • 谢谢,我已经编辑将 interp1 放入我想要的代码中。您对重采样和混叠也是正确的。
    • 我使用了 resample 并且它有效。我的代码的最终形式看起来有点不同,但你会明白的: [babble fsbab]=audioread('babble.wav'); [caffeteria fscaf]=audioread('caffeteria.wav'); [P,Q] = 大鼠(fscaf/fsbab); babble_new=resample(babble,P,Q); audiowrite('babble.wav',babble_new,fscaf); [babble fs1]=audioread('babble.wav'); [caffeteria fs1]=audioread('caffeteria.wav');
    猜你喜欢
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多