winogradFFT浅谈

如题所述

第1个回答  2024-04-19

winogradFFT,由winograd博士提出,全称为Winograd快速傅里叶变换,旨在通过减少DFT中的乘法操作次数,特别适用于2、3、4、5、7、8、9和16点序列。当处理多点数时,它常与混合基算法和素因子算法联手工作,以优化计算效率。


熟悉DFT的人都知道,有限序列的离散傅里叶变换可以表示为



其中,k的取值范围是0到\( n-1 \)。这可以进一步表示为矩阵形式:




X(k) = [x(0) x(1) ... x(n-1)]^T



特别地,当\( N \)为上述特定数值时,W矩阵可以分解为三个简单矩阵的乘积,A和C由0和±1构成,B是对角阵,包含实数和虚数部分。


理解W矩阵的关键在于,它通过改变矩阵的行列顺序,揭示了循环卷积的特性。利用循环卷积的算法,如通过最小乘法次数减少计算,这背后源于数论中的原根计算,尽管原理复杂,但我们只需知道它如何调整输入和输出顺序,让DFT可以借助winogradFFT高效实现。


让我们从两点循环卷积开始,对比计算方式的效率差异:原来四次乘法与简化后只需两次(不计常数项)。例如,三点DFT的矩阵表达式中,循环矩阵部分展示了这一点:



3点DFT = [x(0) x(1) x(2)]^T W ,

其中W包含一个循环卷积结构,可简化为:



利用这种方法,五点WFT并非仅基于三点循环卷积,而是winograd博士独立发现的创新。同样,五点DFT通过序列重排隐藏了四点循环卷积的线索。


更深入探讨,八、九、十六点的WFT,winograd博士直接提供了计算方法,它们的W矩阵由ABC三个矩阵相乘,且乘法次数达到了最小。


值得注意的是,九点DFT中的W矩阵通过输入序列重排,包含了一个六点循环卷积,这在大N点处理中显得尤为重要。


面对大N的WFTA,混合基算法和素因子算法就显得至关重要。素因子算法是混合基算法的一种特殊情况,例如12点的情况:



    首先,确定映射关系:...
    接着,对输入和输出数据进行重排:...

以15点DFT为例,通过空间计算流图,可以进一步简化乘法步骤,将计算复杂度降到与3点和5点WFT乘法次数的乘积。


总的来说,winogradFFT是一个巧妙的优化工具,它结合了数论的智慧,为高效计算提供了可能。尽管这只是对其算法冰山一角的理解,但希望对有志于此者提供一些启示。让我们一起探索这一领域的更多奥秘。