快速傅里叶变换(蝶形算法c++源代码)

详细理论可以自行百度补充

快速傅里叶变换(蝶形算法c++源代码)_第1张图片

图1

快速傅里叶变换(蝶形算法c++源代码)_第2张图片

图2

为了方便处理数据,程序中会将图1中x[0],x[4],x[2]...x[7]进行倒序,也就是图2中的表。这里就直接上代码的。

    for(j = 0; j< N; j++)
    {
       nInter = 0;
        for(i = 0; i

从图1中,我们可以看得出,FFT蝶形算法会使用三重循环,下一层的数据都是由上一层计算得到的。这里直接在代码里面备注一下,比较好解释的。

    for(i = 0; i < k; i++)//第一重循环k=log2N,在这里N = 8,所以k = 2
    {
        step = 1<<(i + 1);
        factor_step = N>>(i + 1);//旋转因数变化速度
        //初始化旋转因子
        factor_real = 1.0;
        factor_imag = 0.0;

        for(j = 0; j < step/2 ; j++)
        {
            for(k1=j;k1


完整的代码可以见这里:

#include 
#include
#define PI 3.1415926
using namespace std;
void fit(double real[],double imag[],int N,int k,int inv)
{
    int i,j,k1,k2,m,step,factor_step;
    double temp_real,temp_imag,factor_real,factor_imag;

    if(inv!=1&&inv!=-1)
    {
        cout<<"FFT transformation require:inv=1"<>(i + 1);//旋转因数变化速度
        //初始化旋转因子
        factor_real = 1.0;
        factor_imag = 0.0;

        for(j = 0; j < step/2 ; j++)
        {
            for(k1=j;k1



你可能感兴趣的:(数字图像处理)