互質因子算法

互質因子算法（Prime-factor FFT algorithm, PFA），又稱為Good-Thomas算法
，是一種快速傅立葉變換（FFT），把N = N1N2大小的離散傅立葉變換重新表示為N1 * N2大小的二維離散傅立葉變換，其中N1與N2需互質。變成N1和N2大小的傅立葉變換後，可以繼續遞迴使用PFA，或用其他快速傅立葉變換算法來計算。

較流行的Cooley-Tukey算法經由mixed-radix一般化後，也是把N = N1N2大小的離散傅立葉變換分割為N1和N2大小的轉換，但和互質因子算法 (PFA)作法並不相同，不應混淆。Cooley-Tukey算法的N1與N2不需互質，可以是任何整數；PFA的缺點則是N1與N2需互質 (例如N 是2次方就不適用)，而且要藉由中國剩餘定理來進行較複雜的re-indexing，然而此方法利用互質性質，不需要和單位根twiddle factors相乘，因此計算量更低。此外互質因子算法 (PFA)可以和mixed-radix Cooley-Tukey算法相結合，前者將N 分解為互質的因數，後者則用在重複質因數上。

PFA也與nested Winograd FFT算法密切相關，後者使用更為精巧的二維摺積技巧分解成N1 * N2的轉換。因而一些較古老的論文把Winograd算法稱為PFA FFT。

儘管PFA和Cooley-Tukey算法並不相同，但有趣的是Cooley和Tukey在他們1965年發表的有名的論文中，沒有發覺到高斯和其他人更早的研究，只引用Good在1958年發表的PFA作為前人的FFT結果。剛開始的時候人們對這兩種作法是否不同有點困惑。

 算法 

離散傅立葉變換（DFT）的定義如下:

PFA將輸入和輸出re-indexing，代入DFT公式後轉換成二維DFT。

 Re-indexing 

設N = N1N2，N1與N2兩者互質，然後把輸入n  和輸出k 一一對應到

因N1與N2 互質，故根據最大公因數表現定理，對每個n 都存在滿足上式的整數n1與n2，且在同餘N 之下n1可以調整至0～N1 –1之間，n2可以調整至0～N2 –1之間。並根據同餘理論易知滿足上式且在以上範圍內的整數n1與n2是唯一的。這稱為Ruritanian 映射 (或Good's 映射)，

舉例來說: 

如果對於任一  都可以對應到

因N1與N2 互質，故根據中國剩餘定理，對於每組 ( k1 , k2 ) (其中k1在0～N1 – 1之間, k2在0～N2 – 1之間)，都有存在且唯一的k 在0～N - 1之間且滿足上兩式。這稱為 CRT 映射。
 CRT 映射的另一種表示法如下

其中N1-1表示N1在模N2之下的反元素，N2-1反之。

( 也可以改成對輸入n 用 CRT 映射以及對輸出k 用Ruritanian 映射)

對於有效re-indexing (理想上是達到原地)的方法有許多研究.，以減少耗費時間的模運算。

 DFT re-expression 
表示方法一:

將以上的re-indexing代入DFT公式裡指數部分的nk 之中，

( 因為e2πi = 1，所以兩個指數的k 部份可以分別模N1與N2 )。剩下的部分變成

則內部和外部的總和分別轉換成大小為N2與N1的DFT。

表示方法二:

如果令 

令 ，相當於取 的餘數，, 

對於每一個  都要做一個  點的 ，而因為 有 個，所以需要  個  點 ,

對於每一組都要做一個  點的 ，而因為 為常數，有  個，所以需要  個  點 ，

因此如果要計算複雜度，可以乘法器的數量當作考量,

假設 點的  需要 個乘法器,

假設 點的  需要 個乘法器,

則總共需要 個乘法器。

範例

以N = 6為例，有兩種可能，N1 = 2, N2 = 3或N1 = 3, N2 = 2。


第一種情形所產生的流程圖如左圖所示。先做2次3點DFT後再做3次2點DFT。

第二種情形所產生的流程圖如右圖所示。先做3次2點DFT後再做2次3點DFT。

其中2點DFT的部份因構造單純，皆以交錯的蝴蝶圖來顯示。

可以看出即使在這個簡單的例子中，輸入和輸出的index也都經過有點複雜的重新排列。

與Cooley-Tukey算法的比較

如首段所述，Cooley-Tukey算法和互質因子算法 (PFA)曾被誤認為很類似。兩者皆有各自優點可適用於不同狀況，因此分辨它們的不同是很重要的。在1965年著名的論文中發表的Cooley-Tukey算法，是在DFT的定義

中代入n = n1 + n2N1 , k = k1N2 + k2，則

比PFA多了一些要乘的因子 (稱為twiddle factors )，但index較為簡單，且適用於任何N1、N2。在J. Cooley稍後發表的關於FFT歷史探討的論文中使用N = 24點FFT為例，顯示兩種作法在index結構上的不同。

 N1 與 N2 不互質情況 
，若 與  並不互質，仍可透過拆解得到運算所需的乘法數量。
離散傅立葉變換（DFT）的定義如下:

可以拆解成 個  DFTs 和  個  ，以及twiddle factor。

 算法 
令 ，。 ,    

可得出下列式子

上述的  被稱為twiddle factor，需要額外的乘法去做運算。

由於,    

twiddle factors的數量為 ，移去  以及  的情況，至多需要 個twiddle factors。

 分階段解析 

 Step1 
令 

 Step2 
固定 ，對  做  。

由於，所以有  個  

 Step3 
 (twiddle factors)

 Step4 
固定 ，對  做  。

由於，所以有  個  

 Step5 


 實際乘法量計算 

假設  DFT 的乘法量為 ，   的乘法量為 

且  中，

有  個值不為  以及  的倍數

有  個值為  或  的倍數，但不為  的倍數

則   的乘法量數量為  個。

 補充說明 
為一複數，則  一般需要 3個乘法，但若  =  或  =  則只需要2個乘法。

 簡單範例 
 , 

 needs 

 = 

 = 4 (1, 3, 3, 9),  = 4 (2, 2, 6, 6)

總計需要 

相關條目
快速傅立葉變換
中國剩餘定理
Bézout引理

 注釋 

參考文獻

 Jian-Jiun Ding, Advanced Digital Signal Processing class note,the Department of Electrical Engineering, National Taiwan University (NTU), Taipei, Taiwan, 2025

外部連結

fft note by Burrus
cnx

Category:快速傅立葉轉換演算法