hello i'm really sorry for what will seem to most people in this forum as a trivial question, but i am having trouble using the FFTW library. everything compiles correctly, but for some reason when i run the program it crashes. i worked out that the problem comes from when i read the data into the input array, but i really don't know what i am doing wrong. here is the code. i know that this forum isn't supposed to check code...but i am really stuck. // FFT the text vector double *text_in, *text_out; fftw_plan p1; int nx = Element.size(); // Allocate the input and output arrays, and create the plan text_in = (double*)fftw_malloc(sizeof(double) * nx ); text_out = (double*)fftw_malloc(sizeof(double) * nx); fftw_plan_dft_r2c_1d(nx, text_in, text_out, FFTW_FORWARD); fftw_plan_dft_c2r_1d(nx, text_in, text_out, FFTW_BACKWARD); // Fill the input array with the input data for (int i = 0; i < Element.size(); i++) { text_in[i] = Element[i]; // Real part text_in[i] = 0.0; /* Imaginary part */ } // Execute plan on the input data i.e FFT the data fftw_execute(p1); // destroy plan fftw_destroy_plan(p1); fftw_free(text_in); fftw_free(text_out); have i misunderstood how to use the fftw plans? am i right in assuming that the only problem is in filling the input array with the input data, or are there more problems? thanx in advance, and really sorry once again, but i don't know who else to ask. This message was sent using the Comp.DSP web interface on www.DSPRelated.com

# FFTW plans

Started by ●April 17, 2005

Reply by ●April 17, 20052005-04-17

katz wrote:> hello > > i'm really sorry for what will seem to most people in this forum as a > trivial question, but i am having trouble using the FFTW library. > everything compiles correctly, but for some reason when i run the program > it crashes. i worked out that the problem comes from when i read the data > into the input array, but i really don't know what i am doing wrong. here > is the code. i know that this forum isn't supposed to check code...but i > am really stuck. > > // FFT the text vector > double *text_in, *text_out; > fftw_plan p1;p1 is never assigned the value of a plan> int nx = Element.size(); > > // Allocate the input and output arrays, and create the plan > text_in = (double*)fftw_malloc(sizeof(double) * nx ); > text_out = (double*)fftw_malloc(sizeof(double) * nx);You need nx+2 to account for the nyquist bin.> > fftw_plan_dft_r2c_1d(nx, text_in, text_out, FFTW_FORWARD); > fftw_plan_dft_c2r_1d(nx, text_in, text_out, FFTW_BACKWARD);The forward, or backward direction is implied by the 'r2c' or 'c2r'. You want something like FFTW_ESTIMATE for the last arg.> > // Fill the input array with the input data > for (int i = 0; i < Element.size(); i++) > { text_in[i] = Element[i]; // Real part > text_in[i] = 0.0; /* Imaginary part */ > }The first assignment is overwritten by the second.> > // Execute plan on the input data i.e FFT the data > fftw_execute(p1);again, nothing was ever assigned to p1> > // destroy plan > fftw_destroy_plan(p1); > fftw_free(text_in); > fftw_free(text_out); > > have i misunderstood how to use the fftw plans? am i right in assuming > that the only problem is in filling the input array with the input data, > or are there more problems? > > thanx in advance, and really sorry once again, but i don't know who else > to ask.