FFTW的使用

FFTW是C语言的FFT库,之前用matlab想跑一个FFT ,因为频率很高,结果发现频谱分析如果要达到1Hz的分辨率,信号的时间是1s,采样率上M,导致数据点很多,matlab完全跑不过来了,于是折腾了几天,用上了FFTW,这个库似乎支持任意信号长度,跑起来果然快太多。

官网: http://www.fftw.org/

我是win7 64位,也没看网上的怎么配置,直接解压了 fftw-3.3.3-dll32,然后就在这个文件夹里写代码了,反正只是试试而已。


其实很简单,只列出几个主要函数了。

fftw3 里有个 ffw_real 实际就是double,所以我直接用double了。


#include "fftw3.h"
#define PI 3.14159

    double *in;
       fftw_complex *out;
    fftw_plan p;
        
   in = (double*) fftw_malloc(sizeof(double) * N);
    out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);

for(i=0;i<N;i++)

    in[i]=3*sin(2*PI*2.4*((double)i)/N*2);

    p=fftw_plan_dft_r2c_1d(N,in,out,FFTW_ESTIMATE);

    fftw_execute(p); /* repeat as needed*/
    fp=fopen("out.txt","w+");
      for(j = 0;freqOut < saveDataFreq ;j++)
    {

   freq=((double)j)/N;
            mag=sqrt(pow(out[j][0],2)+pow(out[j][1],2))*2/N;
        fprintf(fp,"%6.2lf  %6.2lf\n",freq,mag);
    //    printf("%6.2f ",out[j][0]);
    }
    fclose(fp);

    fftw_destroy_plan(p);
    //fftw_free(in);
    free(in);
    fftw_free(out);
    return 0;
}

posted @ 2013-09-10 23:26  tofixer  阅读(1953)  评论(0编辑  收藏  举报