DFT – Fast algorithms and C implementations - Part2
Radix-2 DFT
在我的上一篇博客里,已经介绍了基-2 离散傅里叶变换的基本原理(参见第4(4)部分),总结一下就是:
设N长序列的DFT为N长序列,若N被2整除,则:
radix-2算法将一个N长的DFT分解为两个N/2长的DFT的线性组合。如果N/2仍然可以被2整除,则可以继续对两个N/2长的子序列进行奇偶分解。如果序列长度为2的指数倍,即
则可以应用radix-2算法将N长序列逐渐分解,直至序列长度变成1为止。由于标量的DFT等于其自身(见我的上一篇博客),因此我们实际上已经不需要执行任何一次DFT变换——我们只需要执行几次radix-2变换即可。
下面从360图书馆借用两张图来说明这个计算过程:
上图显示的是N=16的DFT计算过程:基于radix-2算法,首先将序列分成偶数列和奇数列,由于两个子序列长度为8,可以进一步对各自进行奇偶分解,经过4次分解以后,我们得到了16组长度为1的子序列,这些序列的DFT等于其自身。下面我们先根据radix-2算法求取8个N=2长序列[0,8], [4,2], [2,10], [6,14], [1,9], [5,13], [3,11], [7,15]的DFT,e.g.,
然后再根据radix-2算法求取4个N=4长序列[0,4,8,12], [2,6,10,14], [1,5,9,13], [3,7,11,15]的DFT,e.g.,