2012-08-01 50 views
2

短版我的問題:FFT算法 - 如何將樣本轉換爲複雜結構?

如何從音頻採樣的陣列去(如的Int16)通過共同的FFT庫,如AForge使用複雜的結構?

我的問題的長版:

我是新來的音頻處理,我期待來分析音樂音頻(定位節拍,節奏等)。經過幾天的閱讀,快速傅立葉變換(FFT)算法似乎是朝着正確方向邁出的一步。

得到持續而不必從頭開始實現的算法,我已經下載了幾個開源庫,Exocortex和AForge.net的。

我解碼音頻到內存緩衝區。在我的16位48kHz音頻立體聲音軌的每個週期,我得到48000字節或24000個採樣。這些目前被複制到一個短陣列(Int16)中。我現在需要將我的數組轉換爲複雜結構(在AForge的情況下)。這反過來用「真實」和「虛構」雙重值初始化。但究竟是什麼,以及我如何從我的陣列中走向這兩個雙重值?另外,在傳遞之前是否需要分離左/右聲道?

不幸的是,我在讀的數學公式,只要它不表現爲代碼可怕。在我到目前爲止訪問過的幾乎所有網站上,快速出現了快速符號和複雜的數學公式以幫助解釋算法。結果,我馬上迷失在翻譯中。相信我,我努力找到了「傻瓜式FFT算法」。 ;)

致主持人的注意事項:即使問題類似,這不是Convert Audio samples from bytes to complex numbers?的重複。

回答

3

你需要或者拆分通道和單獨處理,或將其平均到一個單聲道 - 這是最好的取決於你最終要完成什麼。

至於轉換數據類型 - 每個實數也是一個複數,它具有0的「虛」部分,所以轉換本質上是用樣本創建一個複數的數組(最好歸一化 - 在這種情況下由32768分,所以你在虛部的實部和具有零值的範圍在[-1,+ 1])。

+0

謝謝您的回答。將嘗試。出於好奇,爲什麼我必須將虛數設置爲0.它是什麼,它爲什麼在那裏? – BlueVoodoo 2012-08-01 16:20:07

+0

這將必須進入所有那些你說你不希望有鑽研公式 - 複雜的數學運算是一個相當顯著而複雜的話題,其有沒有足夠的空間,甚至開始在這裏解釋。如果你真的想知道,找一本教科書或一些複雜的數學;在目前情況下,雖然,我認爲「這是它的工作方式」是最好的答案 - 如果你使用其他什麼比0,你會得到錯誤的答案。 – twalberg 2012-08-01 16:34:43

+0

夠公平的。它現在似乎工作,所以我會接受這個答案。 – BlueVoodoo 2012-08-01 16:35:11