对于变换长度为N的序列x(n)其傅立叶变换可以表示如下:

 

N

nk

X(k)=DFT[x(n)] =         Σx(n)W

 

n="0"

 

                     式(1)


其中,W="exp"(-2π/N)

在下面的源码里,对应函数为 DFT

 

算法导论 里介绍了一种递归计算fft地方法, 函数为FFT_recursive

主要利用了 DFT(x) = DFT[0](x) + w*DFT[1](x)

继而导出迭代的fft计算方法,就是现在最常用的,函数为FFT_Iter

步骤为:

将输入数组元素反置变换

for 树的每一层:

    for 这一层上需要计算的每一对数据:

        根据这一对数据,及蝶形公式,计算上一层的数据

 另外,代码里写了一个简单的复数类和向量计算函数

 

  1FFT算法#include <vector>
  2FFT算法#include <math.h>
  3FFT算法#include <assert.h>
  4FFT算法//#include <windows.h>
  5FFT算法
  6FFT算法using namespace std;
  7FFT算法
  8FFT算法//************************************/
  9FFT算法// Fushu
 10}

相关文章: