资源说明:我们要讨论的第一种精简必要乘法数量的算法就是Winograd DFT算法。Winograd DFT算法是Rader算法(是将DFT转换成循环卷积)与我们在前面实现快速运行FIR滤波器时使用过的Winograd[85]短卷积算法的结合。
因而长度被限制在质数或质数的幂范围内。表简要的给出了算法操作的必要数量。
表 带有实输入的Winograd DFT的效果表
下面N=5的示例详细地说明了构造Winograd DFT算法的步骤。
例 N=5的Winograd DFT算法
在由[5]给出的Rader算法的一个表达式中,用X[0]代替x[0]的形式如下:
如
Winograd离散傅里叶变换(DFT)算法是一种优化了乘法操作的快速傅里叶变换(FFT)算法,由S. M. Winograd在1978年提出。该算法通过结合Rader算法(将DFT转化为循环卷积)和Winograd的短卷积算法,减少了计算复数序列离散傅里叶变换所需的乘法数量,特别是在处理小尺寸数据时尤其有效。然而,它的应用范围被限制在了质数或质数的幂次长度上。
Rader算法的核心思想是利用傅里叶变换的性质,将DFT转化为一个长度为p-1的循环卷积问题,其中p是一个质数。这样,原始的DFT可以通过计算一个更小规模的卷积来解决,从而减少计算复杂度。
Winograd短卷积算法则进一步优化了这个过程,尤其是在处理小于或等于4的序列时,它可以显著减少乘法操作。对于长度为4的卷积,Winograd算法仅需要5次实数乘法,相比于普通的DFT计算,这是一个巨大的改进。
以N=5为例,Winograd DFT算法的构造步骤如下:
1. 将DFT转化为循环卷积,使用Rader算法。
2. 应用Winograd短卷积算法来处理这个小规模的卷积问题。
3. 这些步骤涉及输入序列的加法和乘法操作,以及对傅立叶系数的处理。
4. 结果再通过特定的组合和加法操作恢复成原始DFT的结果。
Winograd DFT算法通常使用矩阵表示,这有助于清晰地展示计算过程。矩阵形式的算法中,Al表示输入序列的加法,Bl包含傅立叶系数,而Cl代表输出序列的加法。尽管矩阵表示简洁,但它掩盖了具体执行短卷积算法的步骤,因为这些步骤在矩阵运算中被融合了。
Winograd DFT算法的最终目标是减少实数乘法的数量,使其成为实数FFT算法中最节省计算资源的一种。当与其他技术,如索引映射结合时,可以构建出Winograd FFT算法,这是已知实数乘法次数最少的FFT算法。
Winograd DFT算法是一种高效计算小规模DFT的方法,通过结合Rader和Winograd的短卷积算法,显著降低了乘法操作的需求,特别适合于那些对计算速度和资源消耗有严格要求的领域,例如数字信号处理、图像处理和通信系统。尽管它的适用范围相对有限,但在其设计的特定范围内,它提供了一种非常有效的计算手段。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。