Winograd FFT算法

时间:2008-12-18

  Winograd FFT算法[85]是建立在对N1×N2维逆DFT矩阵(没有前因子N-1)的观察基础上,gcd(N1,N2)=1,也就是:

  这两个公式可以用两个分别是N1和N2维的二次IDFT矩阵的Kronecker乘积重写。如同GoodThomas算法的映射一样,我们必须将X[k]和X[n]的索引写成二维帧格式,然后逐行读出索引。下面给出一个N=12的示例来说明这些步骤。

  例 使用Kronecker乘积且N=12的IDFT

  令N1=4和N2=3,然后根据Good,Thomas索引映射进行输出索引变换k=9k1+4k2 mod 12:

  接下来构造长度为12的IDFT:

  到目前为止,我们已经用Kronecker乘积(重新)定义了IDFT。利用速记符号X代替改变的序列x,就可以用下面的矩阵/向量表示:

  其中Al合并了输入加法,Bl是一个傅立叶系数的对角矩阵,而0包括了输出加法。现在将(6.47)代入(6.46),运用这一结论就可以改变矩阵乘法和Kronecker乘积的计算顺序,变成:

  由于矩阵Al和Cl是简单的加法矩阵,所以也同样适用于其Kronecker乘积,A1⊙A2和C1⊙C2。很明显,两个分别为N1和N2维的二次对角矩阵的Kronecker乘积也可以给出一个N1N2维的对角矩阵。如果M1和M2分别是根据表计算较小Winograd DFT的乘法次数,则总计需要计算的长发次数B=B1⊙B2对角元素的数量(也就是M1M2),是相同的。

  现在我们将上述不同的步骤组合起来就构成了Winograd FFT。

  在Winograd FFT算法成功构造之后,我们就可以采取下面3个步骤来计算Winograd FFT:

  接下来我们看—个示例,详细地了解一下长度为12的Winograd FFT的构造。

  例 长度为12的Winograd FFT

  要构造Winograd FFT,我们要根据法则6.17计算变换中需要使用的矩阵。N1=3和N2=4时,就可以得到下面的矩阵:

  根据(6.48)合并这些矩阵,得到Winograd FFT算法。输入和输出加法不需要乘法器就可以实现,实数乘法的总数是2×3×4=24。

  到目前为止,我们已经用Winograd FFT计算了IDFT。如果要借助IDFT计算DFT,就可以采用(6,6)中用到的技术,并借助于DFT计算IDFT。利用矩阵/向量表示就是:

  如果WN=[e2πjnk/N](其中n、k∈ZN)是DFT就可以用DFT按如下步骤计算:计算输入入序列的共轭复数,将序列用IDFT算法转换,计算输出序列的共轭复数。

  也可以采用Kronecker乘积算法,也就是Winograd FFT,直接计算DFT。生成一个平滑修正的输出索引映射,如下例所示。

  例 用Kronecker乘积公式计算12点DFT

  输入序列x[n]被看成是Good-Thomas映射的顺序,在X[k]的(频率)输出索引映射中,与Good-Thomas映射相比,每个和第三个元素互换了位置。

  欢迎转载,信息来源维库电子市场网(www.dzsc.com


  
上一篇:单片机接口描述符
下一篇:单片机端点描述符

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料