簡介
較流行的Cooley-Tukey算法經由mixed-radix一般化後,也是把 N = N N大小的離散傅立葉變換分割為 N和 N大小的轉換,但和互質因子算法 (PFA)作法並不相同,不應混淆。Cooley-Tukey算法的 N與 N不需互質,可以是任何整數。然而有個缺點是比PFA多出一些乘法,和單位根twiddle factors相乘。相對的,PFA的缺點則是 N與 N需互質 (例如 N 是2次方就不適用),而且要藉由中國剩餘定理來進行較複雜的re-indexing。互質因子算法 (PFA)可以和mixed-radix Cooley-Tukey算法相結合,前者將 N 分解為互質的因數,後者則用在重複質因數上。
PFA也與nested Winograd FFT算法密切相關,後者使用更為精巧的二維折積技巧分解成 N * N的轉換。因而一些較古老的論文把Winograd算法稱為PFA FFT。
儘管PFA和Cooley-Tukey算法並不相同,但有趣的是Cooley和Tukey在他們1965年發表的有名的論文中,沒有發覺到高斯和其他人更早的研究,只引用Good在1958年發表的PFA作為前人的FFT結果。剛開始的時候人們對這兩種作法是否不同有點困惑。
算法
離散傅立葉變換(DFT)的定義如下:
PFA將輸入和輸出re-indexing,代入DFT公式後轉換成二維DFT。
Re-indexing
設 N = N N, N與 N兩者互質,然後把輸入 n 和輸出 k 一一對應到
因 N與 N 互質,故根據最大公因數表現定理,對每個 n 都存在滿足上式的整數 n與 n,且在同餘 N 之下 n可以調整至0~ N –1之間, n可以調整至0~ N –1之間。並根據同餘理論易知滿足上式且在以上範圍內的整數 n與 n是只有一個的。這稱為 Ruritanian 映射 (或 Good's 映射),
舉例來說:
如果對於任一都可以對應到
因 N與 N互質,故根據中國剩餘定理,對於每組 ( k, k) (其中 k在0~ N– 1之間, k在0~ N– 1之間),都有存在且只有一個的 k在0~ N- 1之間且滿足上兩式。這稱為 CRT映射。 CRT映射的另一種表示法如下
其中 N表示 N在模 N之下的反元素, N反之。
( 也可以改成對輸入 n用 CRT映射以及對輸出 k用 Ruritanian映射)
對於有效re-indexing (理想上是達到原地)的方法有許多研究,以減少耗費時間的模運算。
DFT re-expression
表示方法一:
將以上的re-indexing代入DFT公式里指數部分的 nk之中,
( 因為 e= 1,所以兩個指數的 k部分可以分別模 N與 N)。剩下的部分變成
則內部和外部的總和分別轉換成大小為 N與 N的DFT。
表示方法二:
如果令
令相當於取的餘數,
對於每一個都要做一個點的,而因為有個,所以需要個點
對於每一組都要做一個點的而因為為常數,有個,所以需要 個點,
因此如果要計算複雜度,可以乘法器的數量當作考量,
假設點的需要個乘法器,
假設點的需要個乘法器,
則總共需要個乘法器。
與Cooley-Tukey算法的比較
如首段所述,Cooley-Tukey算法和互質因子算法 (PFA)曾被誤認為很類似。兩者皆有各自優點可適用於不同狀況,因此分辨它們的不同是很重要的。在1965年著名的論文中發表的Cooley-Tukey算法,是在DFT的定義
中代入 n= n+ n N, k= k N+ k,則
比PFA多了一些要乘的因子 (稱為twiddle factors),但index較為簡單,且適用於任何 N、 N。在J. Cooley稍後發表的關於FFT歷史探討的論文中使用 N= 24點FFT為例,顯示兩種作法在index結構上的不同。