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

2024-03-28 23:47:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我对信号处理很陌生。我现在有两个声音信号数据。每个数据都是以10 KHz,2秒的采样率采集的。我已经将这些数据导入到python中。sound_1和sound_2现在都是numpy数组。当然,每个声音数据的长度是20000。你知道吗

声音1包含水流声(我感兴趣)和环境噪声(我不感兴趣),而声音2只包含环境噪声(我不感兴趣)。你知道吗

我正在寻找一个算法(或包),可以帮助我确定这个水流声音的频率范围。我想如果我能找出频率范围,我可以用傅立叶逆变换来过滤环境噪音。你知道吗

然而,我的最终目的是从声波数据中提取水流声,并消除环境噪声。如果有其他方法就好了。你知道吗

我正在看这个帖子:Python frequency detection

但我不明白他们怎么能只用一个声音信号就知道频率。我想我们至少需要比较两个信号数据(一个包含我感兴趣的声音,另一个没有),这样我们就可以找出区别。你知道吗


Tags: 数据numpy算法声音信号数组感兴趣信号处理
1条回答
网友
1楼 · 发布于 2024-03-28 23:47:39

因为sound_1包含水流和环境噪声,所以没有直接的方法提取水流。傅里叶变换将得到信号中的所有频率,而不考虑信号源。你知道吗

方法是从sound_2中提取环境噪声的频率,然后从sound_1中去除。完成之后,您可以从已经去噪的sound_1中提取频率。你知道吗

常用的降噪方法之一是采用频谱选通。基本上,您首先确定噪声听起来如何,然后从信号中移除平滑的频谱。平滑是至关重要的,因为声音是一个波,一个连续的实体。如果你简单地从波中剔除离散的频率,你会得到很差的结果(音频会听起来不自然和机器人)。应用的平滑量将决定减少了多少噪声(请注意,噪声永远不会真正消除-您将始终得到一些残留)。你知道吗

具体解决方案。你知道吗

  1. 由于您对这一主题还不熟悉,我首先建议您如何在一个软件中进行降噪工作,它将为您完成这项工作。Audacity是一个很好的选择。我链接了降噪手册,但是有很多教程。你知道吗
  2. 在您知道您想要得到什么之后,您可以自己实现或者使用现有的包。AdvAcess在C++中有一个很好的实现,但是对于新手来说,它可能很难移植。我建议首先使用noisereduce包。它基于大胆的实现。如果你使用它,你将在几行完成。你知道吗

下面是一个片段:

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)

现在只需在reduced_noise上运行FFT即可发现水流的频率。你知道吗

Here's我如何使用降噪。在this part中,我确定频率统计。你知道吗

相关问题 更多 >