diff options
Diffstat (limited to 'gr-fft/lib/fft_vcc_fftw.cc')
-rw-r--r-- | gr-fft/lib/fft_vcc_fftw.cc | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/gr-fft/lib/fft_vcc_fftw.cc b/gr-fft/lib/fft_vcc_fftw.cc index 0d9b7d1c6b..404ffc538e 100644 --- a/gr-fft/lib/fft_vcc_fftw.cc +++ b/gr-fft/lib/fft_vcc_fftw.cc @@ -52,18 +52,16 @@ fft_vcc_fftw::fft_vcc_fftw(int fft_size, io_signature::make(1, 1, fft_size * sizeof(gr_complex))), d_fft_size(fft_size), d_forward(forward), + d_fft(fft_size, forward, nthreads), d_shift(shift) { - d_fft = new fft_complex(d_fft_size, forward, nthreads); if (!set_window(window)) throw std::runtime_error("fft_vcc: window not the same length as fft_size"); } -fft_vcc_fftw::~fft_vcc_fftw() { delete d_fft; } +void fft_vcc_fftw::set_nthreads(int n) { d_fft.set_nthreads(n); } -void fft_vcc_fftw::set_nthreads(int n) { d_fft->set_nthreads(n); } - -int fft_vcc_fftw::nthreads() const { return d_fft->nthreads(); } +int fft_vcc_fftw::nthreads() const { return d_fft.nthreads(); } bool fft_vcc_fftw::set_window(const std::vector<float>& window) { @@ -90,7 +88,7 @@ int fft_vcc_fftw::work(int noutput_items, // copy input into optimally aligned buffer if (!d_window.empty()) { - gr_complex* dst = d_fft->get_inbuf(); + gr_complex* dst = d_fft.get_inbuf(); if (!d_forward && d_shift) { unsigned int offset = (!d_forward && d_shift) ? (d_fft_size / 2) : 0; int fft_m_offset = d_fft_size - offset; @@ -103,30 +101,30 @@ int fft_vcc_fftw::work(int noutput_items, } } else { if (!d_forward && d_shift) { // apply an ifft shift on the data - gr_complex* dst = d_fft->get_inbuf(); + gr_complex* dst = d_fft.get_inbuf(); unsigned int len = (unsigned int)(floor( d_fft_size / 2.0)); // half length of complex array memcpy(&dst[0], &in[len], sizeof(gr_complex) * (d_fft_size - len)); memcpy(&dst[d_fft_size - len], &in[0], sizeof(gr_complex) * len); } else { - memcpy(d_fft->get_inbuf(), in, input_data_size); + memcpy(d_fft.get_inbuf(), in, input_data_size); } } // compute the fft - d_fft->execute(); + d_fft.execute(); // copy result to our output if (d_forward && d_shift) { // apply a fft shift on the data unsigned int len = (unsigned int)(ceil(d_fft_size / 2.0)); memcpy(&out[0], - &d_fft->get_outbuf()[len], + &d_fft.get_outbuf()[len], sizeof(gr_complex) * (d_fft_size - len)); memcpy(&out[d_fft_size - len], - &d_fft->get_outbuf()[0], + &d_fft.get_outbuf()[0], sizeof(gr_complex) * len); } else { - memcpy(out, d_fft->get_outbuf(), output_data_size); + memcpy(out, d_fft.get_outbuf(), output_data_size); } in += d_fft_size; |