从非常嘈杂的音频中降噪

信息处理 声音的 信号检测 去噪
2022-01-12 16:27:33

我正在尝试编写一种算法,该算法会自动将一段音频与鸟叫录音进行分割。我的输入数据是 1 分钟长的波形文件,在输出上我想单独调用以进行进一步分析。问题是由于环境条件和麦克风质量差(单声道,8 kHz 采样),信噪比非常糟糕。

我将不胜感激有关如何进一步进行降噪的任何建议。

这是我的输入示例,波形格式的一分钟录音:http: //goo.gl/16fG8P

这是信号的样子:

我的输入信号(8 kHz)。 标记区域表示鸟叫

带通滤波(我只保留 1500 - 2500 Hz 之间的任何值)确实改善了情况,但仍远未达到预期。在这个频谱中仍然存在很多噪声。

频谱图

我还绘制了长期(超过 32 个样本间隔)平均能量并从中删除了一些点击。结果如下:

长期平均能量

对于所有剩余的噪音,我必须为起始检测算法设置一个非常低的阈值,以挑选最后 10 秒的鸟叫声。问题是,如果我以这种方式对其进行调整,那么在下一次录制中,我可能会收到大量误报。

移动平均滤波器有助于处理风噪声。还有其他想法吗?我在考虑“光谱减法”,但在我看来,我有鸡和蛋的问题——要找到只有噪音的区域,我必须分割音频并分割我需要去除噪音的音频。您是否知道任何具有此算法或伪代码实现的库?Methinks Audacity 使用这种方法去除噪音。它非常有效,但留给用户标记仅噪声区域。

我正在用 Python 编写,它是一个免费的开源项目。

谢谢阅读!

2个回答

最后,被证明是最好的解决方案是基于高频或能量含量的发病检测。在它可以工作之前,我必须使用高通滤波器来去除前 1 kHz,因为它包含太多的噪声。

一旦我有了纯噪声区域,我就可以使用它的轮廓来减少样本其余部分的噪声。

我发现一个特别有用的库是Aubio它有一组很好的示例,并提供了许多可供选择的算法用于发病检测。

我不太了解音频降噪,但是在从通带滤波(大约 1500-3000 赫兹)中快速而肮脏的噪声减去之后,我得到了这个:

https://dl.dropboxusercontent.com/u/98395391/signal_denoised.wav

我认为这听起来比过滤后的信号和原始信号好一点。

使用简单的维纳滤波器,我得到非常相似的结果。