Hi,
I have the same problem using inverse FFT in GNURADIO. The code works on 32bit
only.
My call:
d_invfft = new gri_fft_real_rev(NFFT);
[...]
d_invfft->execute();
an the code of gri_fft;
gri_fft_complex::gri_fft_complex (int fft_size, bool forward)
{
// Hold global mutex during plan construction and destruction.
gri_fft_planner::scoped_lock lock(gri_fft_planner::mutex());
assert (sizeof (fftwf_complex) == sizeof (gr_complex));
if (fft_size <= 0)
throw std::out_of_range ("gri_fftw: invalid fft_size");
d_fft_size = fft_size;
d_inbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * inbuf_length ());
if (d_inbuf == 0)
throw std::runtime_error ("fftwf_malloc");
d_outbuf = (gr_complex *) fftwf_malloc (sizeof (gr_complex) * outbuf_length
());
if (d_outbuf == 0){
fftwf_free (d_inbuf);
throw std::runtime_error ("fftwf_malloc");
}
gri_fftw_import_wisdom (); // load prior wisdom from disk
d_plan = fftwf_plan_dft_1d (fft_size,
reinterpret_cast<fftwf_complex *>(d_inbuf),
reinterpret_cast<fftwf_complex *>(d_outbuf),
forward ? FFTW_FORWARD : FFTW_BACKWARD,
FFTW_MEASURE);
if (d_plan == NULL) {
fprintf(stderr, "gri_fft_complex: error creating plan\n");
throw std::runtime_error ("fftwf_plan_dft_1d failed");
}
gri_fftw_export_wisdom (); // store new wisdom to disk
}
and
void
gri_fft_complex::execute ()
{
fftwf_execute ((fftwf_plan) d_plan);
}
so I have no f_plan or b_plan variables
best regards
Michael