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?

有帮助吗?

解决方案

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top