1 回答
TA貢獻(xiàn)1829條經(jīng)驗 獲得超9個贊
由于sound_1包含水流和環(huán)境噪聲,因此沒有直接的方法來提取水流。傅里葉變換將為您提供信號中的所有頻率,而與源無關(guān)。
接近的方法是從 中獲取環(huán)境噪聲的頻率,sound_2然后將它們從 中移除sound_1。完成后,您可以從已經(jīng)去噪的 中提取頻率sound_1。
這種降噪的流行方法之一是使用頻譜選通。本質(zhì)上,您首先確定噪聲聽起來如何,然后從信號中移除平滑頻譜。平滑是至關(guān)重要的,因為聲音是一種波,是一個連續(xù)的實體。如果你只是從波形中去掉離散的頻率,你會得到非常糟糕的結(jié)果(音頻聽起來不自然和機(jī)器人)。您應(yīng)用的平滑量將決定減少多少噪音(請注意它永遠(yuǎn)不會真正消除 - 您總會得到一些殘留物)。
到具體的解決方案。
由于您是該主題的新手,因此我首先建議您在可以為您完成工作的軟件中如何進(jìn)行降噪。Audacity是一個很好的選擇。我鏈接了降噪手冊,但是那里有很多教程。
在你知道你想要得到什么之后,你可以自己實現(xiàn)光譜門控或使用現(xiàn)有的包。Audacity 在 C++ 中有出色的實現(xiàn),但對于新手來說可能很難移植。我建議先使用降噪包。它基于 Audacity 實現(xiàn)。如果你使用它,你將在幾行內(nèi)完成。
這是一個片段:
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)
現(xiàn)在只需在 上運行 FFTreduced_noise即可發(fā)現(xiàn)水流的頻率。
這是我使用noisereduce的方式。在這一部分中,我正在確定頻率統(tǒng)計信息。
添加回答
舉報
