本文的閱讀等級:中級
給定一序列 ,離散傅立葉轉換的計算公式為 (見“離散傅立葉轉換”)
。
令 。離散傅立葉轉換可表示成矩陣形式 ,如下:
,
其中 階 稱為傅立葉矩陣。若採用一般矩陣乘法運算,離散傅立葉轉換的計算複雜度為 。公元1965年,美國學者庫利 (James Cooley) 與圖基 (John Tukey) 提出了一個複雜度為 的演算法,稱為快速傅立葉轉換 (fast Fourier transform,簡稱 FFT),後來人們發現原來高斯 (Carl Friedrich Gauss) 早在1805年就已經提出同樣的演算法。本文採用別於傳統訊號處理的推導方法[1],我們先檢視傅立葉矩陣 擁有的特殊性質,然後運用分塊矩陣技巧推導 Cooley-Tukey 演算法。除了本文介紹的 Cooley-Tukey 演算法,還有其他多種形式的快速傅立葉轉換演算法,請讀者參閱維基百科[2]。
Cooley-Tukey 演算法的主要構想是將序列長為 的離散傅立葉轉換分割成兩個長為 的子序列的離散傅立葉轉換。為簡化分析,以下僅考慮 的情況。令 表示 階傅立葉矩陣,列行指標設定為 ,其中 ,組成單元 具有下列性質。
(1) 複數集 為方程式 的根,稱為 次方單位根,這些根在複數平面上單位圓按順時針旋轉並以相同間距排列 (下圖是 的例子)。此外, 是 的 次方單位根。同樣道理,對於 , 是正整數, 是 的 次方單位根,快速傅立葉轉換即建立於此性質之上。
(2) 具有週期性。若 ,則 ,其中 代表 除以 的餘數。譬如,若 ,則 。
(3) 具有對稱性,即 ,因為 ,且
,
。
若 ,就有 。
為便利說明,我們以 為例推導 Cooley-Tukey 演算法。利用性質 (2) 和 (3), 階傅立葉矩陣可化簡為
再利用性質 (1), 階傅立葉矩陣為
。
觀察後發現 的偶數行,即第0,2,4,6行,完全由 構造而成,於是我們將 各行重新置換,偶數行排在前,奇數行排在後。設定下列排列矩陣:
,
即得
,
上式中,,注意 是 的前四個根。一般情況可歸納如下:同樣令 ,對於 , 是正整數,因為 ,故 階傅立葉矩陣 有分塊矩陣表達式
,
其中 是 階傅立葉矩陣,,主對角元為 的前 個根,而 。
下面以 為例展示快速傅立葉轉換的演算程序。給定待變換向量 及其置換結果如下:
,
其中 和 分別由 的偶數元和奇數元組成。運用分塊矩陣乘法運算,可得
。
上式清楚顯示快速傅立葉轉換的分治 (divide-and-conquer) 過程:將8階乘法 替換為兩個4階乘法 和 。使用遞歸策略繼續分解,令
,
就有
,
,
其中 。因為 ,很容易算得 ,。
綜合以上討論,快速傅立葉轉換的分治運算可表示成下列樹狀圖:
在實際計算時,有兩點需要注意。第一,各層的輸入向量如下表所示,括弧內是各標記的二進位表示:
第二層的輸入向量即為初始順序,仔細觀察後發現它們不過就是將自然排序 (natural order) 的二進位數字顛倒後的結果。第一層的輸入向量順序則是固定第二層的最低有效位 (least significant bit, LSB),將其餘數字顛倒後的結果。換句話說,按照上述規律即可得到各層所需的輸入向量,所以無須執行排列矩陣乘法。第二, 是對角矩陣,故不必逐項計算乘法。以 為例,令 ,使用 Hadamard 乘積 (或稱分元乘積) 即可,如下:
。
下圖顯示 的 Cooley-Tukey 演算法流程。若 ,快速傅立葉轉換可分解成 層,每一層使用 個乘法 (圖中未標記乘數的直線表示「乘以1」,因此無須計算),所以總乘法運算量為 。
參考來源:
[1] 維基百科:Cooley-Tukey FFT algorithm
[2] 維基百科:FFT
2005年7月,台中工業區發生大火。
行政院環保署中區環境督導大隊等單位獲報趕往,初步研判刺鼻濃煙的成分應是廠房內亞硝酸鈉導致,緊急調派「傅立葉轉換紅外線光譜儀」到下風處,檢測空氣中是否含有毒物質,再據此決定已飄向市區的濃煙是否會危及市民健康,視狀況對市民提出警告,或甚至進一步的疏散動作。
(以上網頁版新聞,摘錄自 http://www.libertytimes.com.tw/2005/new/jul/4/today-t1.htm )
記得當年,我看紙本新聞,有寫「快速傅立葉轉換光譜儀」,3秒鐘,立即分析,知道空氣中所含的化學物質是什麼,它對人體不會引起重大危害。短時間可以決策,不必緊急疏散居民,可防止過度恐慌。
一般民眾,很少注意到「快速傅立葉轉換」,也不太會去思考「快速」兩字的含義。若有人寫「科普」文章,簡介「快速傅立葉轉換」,可讓大家知道,數學的進展,在生活中,有重要應用。
據我所知,寫過科普文章的大學老師不多 (自然數理可能多些,工程則少之又少)。一方面因為寫科普文章不會提昇學術地位,另一方面可能是在學校久了,不習慣將社會大眾當作聽眾。
若想要說服他們改變…這個…有點難。我的一位同事問我:「恐怖份子與大學老師有何不同?」一時無語。他接著又說:「恐怖份子是negotiable,大學老師則不。」聞罷,再度無語。
寫給一般民眾看,真的不容易。
如果文章對象是高中生,FFT寫淺一點,過程不必詳盡,主要講歷史背景,FT的源流,new idea如何發生?高中教材有講的式子,可多著墨,例如n次方單位根在複數平面上,專家巧妙運用於FFT,快速計算答案。
假設我當年唸高中時,曾經看到FFT的粗略介紹,那麼,看見 的時候,會增添一些學習樂趣,而非僅為了應付考試,生硬記公式。
若在電機工程的課堂上,請大學生各自回憶高中時期
是否很無聊?不知道有什麼用處?沒興趣學習?
教授 ~ 印象中 ~ 快速FT 有兩種~ 一種是分時! 一種分頻! 都能以矩陣表達~ 但是結構樹略有不同~有空我在詳細與您討論! ( 不管到哪處處都可見到數學 ^_^ )
FFT 的種類非常多,還有不少書專門討論它。我不是這方面專家,所以僅介紹最常見的Cooley-Tukey算法。主要目的是利用線性代數解構傅立葉矩陣。