热门问题
时间线
聊天
视角

互质因子算法

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

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