FFT是壹種DFT的高效算法,稱為快速傅立葉變換(fast Fourier transform),它根據離散傅氏變換的奇、偶、虛、實等特性,對離散傅立葉變換的算法進行改進獲得的。FFT算法可分為按時間抽取算法和按頻率抽取算法,先簡要介紹FFT的基本原理。從DFT運算開始,說明FFT的基本原理。
DFT的運算為:
式中
由這種方法計算DFT對於 的每個K值,需要進行4N次實數相乘和(4N-2)次相加,對於N個k值,***需4N*4N次實數相乘和(4N-2)(4N-2)次實數相加。改進DFT算法,減小它的運算量,利用DFT中 的周期性和對稱性,使整個DFT的計算變成壹系列叠代運算,可大幅度提高運算過程和運算量,這就是FFT的基本思想。
FFT對傅氏變換的理論並沒有新的發現,但是對於在計算機系統或者說數字系統中應用離散傅立葉變換,可以說是進了壹大步。
設x(n)為N項的復數序列,由DFT變換,任壹X(m)的計算都需要N次復數乘法和N-1次復數加法,而壹次復數乘法等於四次實數乘法和兩次實數加法,壹次復數加法等於兩次實數加法,即使把壹次復數乘法和壹次復數加法定義成壹次“運算”(四次實數乘法和四次實數加法),那麽求出N項復數序列的X(m),即N點DFT變換大約就需要N^2次運算。當N=1024點甚至更多的時候,需要N2=1048576次運算,在FFT中,利用WN的周期性和對稱性,把壹個N項序列(設N=2k,k為正整數),分為兩個N/2項的子序列,每個N/2點DFT變換需要(N/2)2次運算,再用N次運算把兩個N/2點的DFT變換組合成壹個N點的DFT變換。這樣變換以後,總的運算次數就變成N+2*(N/2)^2=N+(N^2)/2。繼續上面的例子,N=1024時,總的運算次數就變成了525312次,節省了大約50%的運算量。而如果我們將這種“壹分為二”的思想不斷進行下去,直到分成兩兩壹組的DFT運算單元,那麽N點的DFT變換就只需要Nlog2N次的運算,N在1024點時,運算量僅有10240次,是先前的直接算法的1%,點數越多,運算量的節約就越大,這就是FFT的優越性。