summaryrefslogtreecommitdiff
path: root/gr-fft/lib/fft_vcc_fftw.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-fft/lib/fft_vcc_fftw.cc')
-rw-r--r--gr-fft/lib/fft_vcc_fftw.cc22
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;