2011-02-19 48 views
3

我只想澄清某些'FFT實現'之間的區別。我讀過有一維FFT,然後有二維FFT和其他。FFT類型的差異?

我可以知道這些(例如輸入,輸出等)有什麼區別。例如,FFT使用arr [n * 2] = real和arr [n * 2 + 1] = imaginary輸入的維數是多少?

此外,對於某些FFT算法,Complex []有什麼用途?我注意到他們在FFT算法中使用了X和Y.這是真實還是想象?

謝謝!

回答

3

FFT可以具有任意數量的維度,但是1D FFT通常用於固有地爲一維的數據,例如,音頻和2D FFT用於2D數據,如圖像。

在一般情況下,輸入數據和輸出數據都很複雜,即每個輸入/輸出值都有實部和虛部。然而對於大多數「現實世界」,即物理數據,輸入數據的虛部將爲零。即使對於純真實的輸入數據,FFT的輸出也將具有實部和虛部。

根據FFT實現,輸入/輸出數據可能只是交錯數組,其中實數分量爲2 * i,虛數分量位於索引2 * i + 1,或者它們可能使用一些複雜數據類型,或者有時真實和虛擬的組件可能在單獨的數組中。這只是一個API細節,但底層算法仍然是一樣的。

3

正弦函數和餘弦函數具有90度的相位差,並且由於頻率數據可以具有任何相位,所以完整的FFT結果必須報告正弦和餘弦分量。通過將這2個分量描述爲1個複數相量,可以「簡化」FFT的數學運算。這些複數可以用二維量來表示(稱爲一維I和​​另一個Q,或X和Y,或者U和V等)。一些FFT例程交織了2個分量(餘弦和正弦,或實數和虛數),有些將它們保存在不同的數組或向量中。由於FFT具有幾乎相同的計算的逆,這意味着輸入數據也可能是複雜的,這可能有用也可能沒有用。如果數據沒有第二或「虛構」分量,或者使用略微修改的FFT算法將所有乘法修剪爲隱式零,則可以將FFT饋入0。只有實數數據的FFT的結果會有一些冗餘的對稱性,所以結果也可能會被修剪。

0

2D FFT只是首先應用於每行然後應用於陣列的每列的一維FFT。