是否有一种方便而优雅的方式来向信号添加噪声(按类型)?

Is there a convenient and elegant way to add noise (by type) to a signal?

我正在尝试复制 this 文章,但其对应的 github 存储库写得很糟糕。在本文中,神经网络在手动损坏的音频信号上进行训练。不幸的是,研究人员没有添加音频文件,也没有添加干净的代码来显示他们是如何损坏音频文件的。他们在论文中写道:

..for the noisy test set, the 100 utterances were corrupted with four unseen noise types (engine, white, street, and baby cry), at six SNR levels (-6 dB, 0 dB, 6 dB, 12 dB, 18 dB, and 24 dB); for the enhanced set, the utterances in the noisy set were enhanced by the enhancement model above.

现在的问题 - 是否有一个 python(R/MATLAB 库也很好)将信号、所需噪声的类型和 SNR 和 returns 损坏的信号?如果没有,我从哪里获得引擎或婴儿哭声类型?

谢谢!

所以,如果有人遇到同样的问题,这就是我所做的。首先,我寻找包含现实生活噪音的数据库。它们中的大多数都需要花钱,并且提供的环境种类有限(请参阅 AURORA-2 语料库、CHiME 背景噪声数据或 NOISEX-92 数据库)。最后我找到了DEMAND dataset,它包含来自16种不同环境(办公室、汽车、道路等)的多声道噪音,并且可以免费使用。

现在,在合并噪声和信号之前,必须验证它们共享相同的采样率(实际上,这并不是我从discussion中理解的那么严重的问题,但最好是安全起见)。如果你使用的是python,你可以使用librosa.resample模块将两者标准化。之后,您可以添加两个信号。添加噪声时,您可能希望控制每个输入(信号和噪声)的幅度。您可以使用下面给出的信噪比公式来找到 $a$,您必须将噪声乘以多人游戏才能获得所需的信噪比 (SNR)。

SNR = 10 \log_{10} (\dfrac{RMS_{signal}^2}{a RMS_{noise}^2}).

其中给出了所需的 SNR,而两个 RMS 是根据您的数据计算得出的。