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

Reply via email to