您的位置:首页 > 其它

fftw_plan_dft_2d重复优化

2017-03-10 15:23 148 查看
原文:http://bbs.csdn.net/topics/330133751

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>

#include <time.h>

#include "fftw3.h"

#define NNx 1025

#define NNy 1025

// ================= Main ================= //

int main(int argc, char *argv[])

{

    fftw_complex *in, *out, *in2;

    fftw_plan p,q;

    clock_t start, end;

    int i=0, j=0, k=0;

    in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) *NNx*NNy );

    in2 = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) *NNx*NNy );

    out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) *NNx*NNy );

    for(  i=0; i < NNx*NNy; i++)

    {

        in[i][0] = i;

        in[i][1] = 0.0;

    }

    start=clock();

    for( k=0; k<100; k++)

    {

    p=fftw_plan_dft_2d( NNx, NNy, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

    q=fftw_plan_dft_2d( NNx, NNy, out, in2, FFTW_BACKWARD, FFTW_ESTIMATE);

    fftw_execute( p ); // repeat as needed//

    fftw_execute( q );

    }

    end=clock();

    printf(" FFTW : %f second\n", (double)  (end-start)/CLOCKS_PER_SEC  );

    fftw_destroy_plan(p);

    fftw_destroy_plan(q);

    fftw_free(in);

    fftw_free(out);

 system("PAUSE");

 return 0;
}

建议优化:

 
// 这里初始化plan可能要花费几秒钟


sign可以为正变换FFTW_FORWARD(-1),也可以为逆变换FFTW_BACKWORD(+1),实际上就是变换公式中指数项的符号。需注意FFTW的逆变换没有除以N,即数据正变换再反变换后是原始数据的N倍。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: