1. 程式人生 > >理順FFT

理順FFT

其中 fft https 思想 技術 gui orm height http

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