2013-04-08 38 views
1

我想創建/實現使用FFT的實時混響算法。我試過FDN和其他更簡單的算法,但它們聽起來不夠好。 因此,通過乘以變換後的信號和變換後的脈衝響應來進行快速卷積工作並且聽起來很棒。實時混響算法與FFT

這個問題,我看到它是,如果我想要一個持續幾秒鐘的混響,該衝動響應包含100 000+值,因爲我的輸入緩衝區是256個樣本,所以卷積的結果是100 255+結果必須與先前的卷積結果一起添加的值,更不用說爲每個256個輸入樣本的緩衝區計算100 000+值的FFT。

必須有更好的解決方案來解決這個問題。是否有可能只計算一個FFT值爲256的值(+ 256填充零,因爲它不是一個循環信號)。 混響不一定是絕對正確的,它只需要聽起來不錯。

回答

2

您可能希望考慮一個「頻率延遲線」,或稱爲分割卷積。簡而言之,您可以將混響IR分成幾個分區,進行FFT,與輸入信號一起進行卷積處理,並將延遲設置爲相關分區的延遲時間將其插入輸出端。這對於幾秒鐘的完整IR仍然是CPU密集型的,所以...

其他技巧包括將頭相關傳遞函數(HRTF)饋送到更傳統的混響合成算法中。這就體現了房間的頻率響應表現在第一組反射中的理念。然後可以將HRTF饋送到更常規的平坦響應混響合成算法中以便創建多重反射。使用HRTF而不是傳統的梳狀濾波器。

更具體地指出你的問題,看看Fons Adriaensen的工作。 http://kokkinizita.linuxaudio.org/papers/aella.pdf http://kokkinizita.linuxaudio.org/papers/index.html(更有趣篇)

探索他的其他有趣的插件和源代碼的網站。

CCRMA(斯坦福大學)的Julius O Smith也有很多很好的信息。

我無法在這裏詳細回答,但我希望Fons的論文能夠回答你的問題。

+0

這是有趣的閱讀,我錯過了該網頁。 「aella」算法看起來就像這樣:https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/convolution.html,正如你所說,它是CPU密集型的。 我發現這是一個混合算法http://www.music.miami.edu/programs/Mue/Research/sbrowne/thesis.pdf。用第一部分的短IR進行卷積,「抹除」梳理濾波器處理不好的瞬變,並將結果輸入到常規的FDN中。這應該是少CPU密集型。但我會檢查出HRTF。這麼多學習和很少的時間:-) – Floaf 2013-04-20 10:35:23