热门问题
时间线
聊天
视角

互質因子算法

来自维基百科,自由的百科全书

Remove ads

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

較流行的Cooley-Tukey算法經由mixed-radix一般化後,也是把N = N1N2大小的離散傅立葉變換分割為N1N2大小的轉換,但和互質因子算法 (PFA)作法並不相同,不應混淆。Cooley-Tukey算法N1N2不需互質,可以是任何整數。然而有個缺點是比PFA多出一些乘法,和單位根twiddle factors相乘。相對的,PFA的缺點則是N1N2互質 (例如N 是2次方就不適用),而且要藉由中國剩餘定理來進行較複雜的re-indexing。互質因子算法 (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結果。剛開始的時候人們對這兩種作法是否不同有點困惑。

Remove ads

算法

離散傅立葉變換(DFT)的定義如下:

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

Remove ads

Re-indexing

N = N1N2N1N2兩者互質,然後把輸入n 和輸出k 一一對應

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

舉例來說:

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

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

其中N1-1表示N1N2之下的反元素N2-1反之。

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

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

Remove ads

DFT re-expression

表示方法一:

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

( 因為ei = 1,所以兩個指數的k 部份可以分別N1N2 )。剩下的部分變成

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

表示方法二:

如果令

相當於取 的餘數,,

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

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

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

假設 點的 需要 個乘法器,

假設 點的 需要 個乘法器,

則總共需要 個乘法器。

Remove ads

範例

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

Thumb
N1 = 2, N2 = 3
Thumb
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較為簡單,且適用於任何N1N2。在J. Cooley稍後發表的關於FFT歷史探討的論文[4]中使用N = 24點FFT為例,顯示兩種作法在index結構上的不同。

Remove ads

N1 與 N2 不互質情況

,若 並不互質,仍可透過拆解得到運算所需的乘法數量。 離散傅立葉變換(DFT)的定義如下: 可以拆解成 DFTs 和 ,以及twiddle factor

Remove ads

算法

,

可得出下列式子

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

由於,

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

Remove ads

分階段解析

Step1

Step2

固定 ,對

由於,所以有

Remove ads

Step3

(twiddle factors)

Remove ads

Step4

固定 ,對

由於,所以有

Step5

實際乘法量計算

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

中,

個值不為 以及 的倍數

個值為 的倍數,但不為 的倍數

的乘法量數量為 個。

補充說明:

為一複數,則 一般需要 3個乘法,但若 = = 則只需要2個乘法。

簡單範例

,

needs

=

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

總計需要

相關條目

注釋

參考文獻

外部連結

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads