Question

I read, that FFTW plans take a few seconds, so it's better to call it once, and in the for loop call execute(). This is my case. But of course, in every loop, the input data are different, but the size is the same, So how can I improve it? Is it better solved with boolean variables or not?

fftw_plan my_plan;

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


my_plan =fftw_plan_dft_r2c_1d(N,v,out,FFTW_ESTIMATE);
fftw_execute(my_plan);


fftw_destroy_plan(my_plan);

Also, this r2c of dft is only forward?

Was it helpful?

Solution

You can either re-use the same buffers for each FFT (often you need to copy data to/from the in/out buffers and perhaps convert between integer and floating point anyway) or you can use one of the "many" FFTW plans from the advanced interface, using e.g. fftw_plan_many_dft().

For an inverse FFT you probably want a C2R plan using either of the above methods and use the FFTW_BACKWARD flag when creating the plan.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top