傅里叶变换 ~ 基 2 时间抽取 FFT 算法
文章目录
1、基2时间抽取FFT算法原理
将一个长序列的DFT,表达为2个短序列的DFT。按照奇偶下标进行拆分,原理如下图所示:
注意:采用基 2 时间抽取方法的 N 必须是2的整次幂。
上面推导不仅使用了周期性,还使用了对称性:
所以就可以得到短序列合成长序列的DFT:
对于基2的时间抽取,分解到最后一级,就是两点的时域序列,两点序列求DFT,用下面的表达式:
然后再不断合成,2点合成4点,4点合成8点,不断向回推。对于基2的时间抽取,只有一级是实现时域到频域的转化,剩下的其他运算,都是利用短序列的 DFT 来合成长序列的 DFT 。上图的两个矩阵是一样的,为后面实现 DFT 的流图能够统一奠定了基础。右边的图是为了辅助理解的。
2、基2时间抽取FFT算法流图
2.1、示例1 ~ 4点的序列表示成两个2点的DFT
演示一个4点的序列 FFT 流图,如下图所示:在上图中,只标注了-1的地方,凡是1的地方都没有标注,这样使得图更简洁。
2.2、示例2 ~ 8点的序列表示成两个2点的DFT
演示一个8点的序列 FFT 流图,如下图所示:然后再将 4 点序列的 DFT 分解为2 个 2 点序列的DFT。
上图中只有 2点DFT 是实现从时域到频域的变换,后面都是短序列的DFT合成长序列的DFT。
由于时域上 2 点序列计算 DFT 和用两个短序列合成长序列的DFT的矩阵是一样的,
所以整个图看起来就非常对称,实际上就是完全对称的,如下所示:将这个图完整地表达出来,就是这样的:
对于8点的序列来说,一共分为3级;
第一级是把时域的序列转化为它对应的DFT的值;
第二级是两个2点序列DFT合成一个4点序列DFT;
第二级是两个4点序列DFT合成一个8点序列DFT;
库利-图基的这个基二时间抽取FFT算法是一个非常精妙之处就在于它的这个算法结构非常对称。这个算法效率高,而且易于硬件实现。
2.3、实例演示
最终得出结果:
3、基2时间抽取FFT算法流图特点
3.1、蝶形图的关系
第一级的时候,蝶形图的间隔都是1;
3.2、旋转因子的规律
旋转因子到最后一级一定是N0,N1,N2,… N/2 - 1。
旋转因子的规律如下:
3.3、序列关系
这个图告诉我们,将原本的下标0,1,2,3,4,5,6,7二进制表示之后,将这个二进制序列倒一下个,就得到它对应的所要的下标。
所以FFT在实现的时候,我们都用这样倒序的方式来实现。
3.4、原位运算
FFT还有一个非常奇妙的地方,它可以实现原位运算。
原位预算就是后面一级的数据会自动覆盖前面一级的数据。
输入序列是8点序列,在整个运算过程中始终占着8个位置,无需存储中间计算结果。
4、基2时间抽取FFT算法的复杂度
复数乘法的次数变化:
当然这要求N应该等于2的M次,如果不满足,那就补0,补到满足为止。
可以通过具体的数据直观展示:
有了FFT算法之后,让本来难以实时完成的DFT运算,可以实时完成。
通过程序实际体验:
FFT算法只占DFT算法不到它原来的0.04%。这个效率是非常可观的。
更多推荐
所有评论(0)