为了账号安全,请及时绑定邮箱和手机立即绑定

如何用环境噪声确定感兴趣声音的频率范围

如何用环境噪声确定感兴趣声音的频率范围

天涯尽头无女友 2022-05-24 10:50:47
我对信号处理很陌生。我现在有两个声音信号数据。以 10 KHz、2 秒的采样率收集每个数据。我已将此数据导入python。sound_1 和 sound_2 现在都是一个 numpy 数组。每个声音数据的长度当然是20000。Sound_1 包含水流声音(我感兴趣)和环境噪声(我不感兴趣),而 sound_2 仅包含环境噪声(我不感兴趣)。我正在寻找一种算法(或软件包),它可以帮助我确定这种水流声音的频率范围。我想如果我能找出频率范围,我可以使用傅里叶逆变换来过滤环境噪声。但是,我的最终目的是从 sound_1 数据中提取水流声音并消除环境噪声。如果有其他方法那就太好了。但是我不明白他们如何仅通过一个声音信号就可以找出频率。我认为我们至少需要比较 2 个信号数据(一个包含我感兴趣的声音,另一个不包含),以便我们找出差异。
查看完整描述

1 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

由于sound_1包含水流和环境噪声,因此没有直接的方法来提取水流。傅里叶变换将为您提供信号中的所有频率,而与源无关。

接近的方法是从 中获取环境噪声的频率,sound_2然后将它们从 中移除sound_1。完成后,您可以从已经去噪的 中提取频率sound_1

这种降噪的流行方法之一是使用频谱选通。本质上,您首先确定噪声听起来如何,然后从信号中移除平滑频谱。平滑是至关重要的,因为声音是一种波,是一个连续的实体。如果你只是从波形中去掉离散的频率,你会得到非常糟糕的结果(音频听起来不自然和机器人)。您应用的平滑量将决定减少多少噪音(请注意它永远不会真正消除 - 您总会得到一些残留物)。

到具体的解决方案。

  1. 由于您是该主题的新手,因此我首先建议您在可以为您完成工作的软件中如何进行降噪。Audacity是一个很好的选择。我链接了降噪手册,但是那里有很多教程。

  2. 在你知道你想要得到什么之后,你可以自己实现光谱门控或使用现有的包。Audacity 在 C++ 中有出色的实现,但对于新手来说可能很难移植。我建议先使用降噪包。它基于 Audacity 实现。如果你使用它,你将在几行内完成。

这是一个片段:

import noisereduce as nr

# load data

rate, data = wavfile.read("sound_1.wav")

# select section of data that is noise

noisy_part = wavfile.read("sound_2.wav")

# perform noise reduction

reduced_noise = nr.reduce_noise(audio_clip=data, noise_clip=noisy_part, verbose=True)

现在只需在 上运行 FFTreduced_noise即可发现水流的频率。


这是我使用noisereduce的方式。在这一部分中,我正在确定频率统计信息。


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信