理順FFT
DFT(Discrete Fourier Transform):離散傅立葉變換
直觀的計算DFT算法復雜度為O(N*N)。
FFT(Fast Fourier Transformation):快速傅立葉變換,DFT的快速算法。凡將DFT算法復雜度降至O(N*logN)的算法,均可稱為FFT。
最常用的FFT為奇偶分治法,要求輸入點個數N為2的冪。下文中均假設N為2的冪。
N個點的DFT處理器定義:
N個點的DFT處理器有N個輸入和N個輸出,輸入N個點的值,輸出各點的變換結果值。
(註意左邊x為小寫,右邊X為大寫)
黑箱內邏輯為:
其中為N次單位根。
根據N個點的DFT處理器的定義,可以推得N/2個點的DFT處理器的定義。
N/2個點的DFT處理器定義:
N/2個點的DFT處理器有N/2個輸入和N/2個輸出,輸入N/2個點的值,輸出各點的變換結果值。
黑箱內邏輯為:
考慮下面問題:
問題一:將N/2個偶點x[0],x[2],x[4],...,x[N-2]輸入N/2個點的DFT處理器,設輸出為G[0],G[1],...,G[N/2-1],那麽G[k](k=1~N/2-1)等於多少?
解:根據N/2個點的DFT處理器定義,得:
問題二:將N/2個奇點x[1],x[3],x[5],...,x[N-1]輸入N/2個點的DFT處理器,設輸出為H[0],H[1],...,H[N/2-1],那麽H[k](k=1~N/2-1)等於多少?
解:根據N/2個點的DFT處理器定義,得
考慮下面問題:
假設我現在想計算N個點x[0]~x[N-1]的DFT的結果X[0]~X[N-1],但是湊巧學前班沒畢業不會算數兒,所以只能借助一個現成的N個點的DFT處理器來完成計算,但湊巧手頭沒有N個點的DFT處理器,卻湊巧有兩個N/2個點的DFT處理器,那麽我還能不能完成計算呢?
解:
能完成計算,可以用兩個N/2個點的DFT處理器DIY一個N個點的DFT處理器,然後用這個DIY的DFT處理器完成計算。
那麽,如何DIY呢?
首先證明恒等式:
然後據此恒等式連電路,連好結果如下:
由此可見,可以用兩個N/2個點的DFT處理器組裝成N個點的DFT處理器。重復這一思想,那兩個N/2個點的DFT處理器每個都可以由兩個N/4個點的DFT處理器組成,由於N為2的冪,所以此過程可反復進行,直到分解為1個點的DFT處理器為止。
此即基於奇偶分治的FFT算法。
算法復雜度分析:(待續)
參考:
https://www.youtube.com/watch?v=EsJGuI7e_ZQ
https://www.youtube.com/watch?v=1mVbZLHLaf0
理順FFT