diff options
author | Tom Rondeau | 2012-03-15 18:03:49 -0400 |
---|---|---|
committer | Tom Rondeau | 2012-03-15 18:03:49 -0400 |
commit | ac9cd0eba188e25d724878f3071a30ae6da47e48 (patch) | |
tree | 6576c9de73667ca9f967cde7c82e7236618eb558 /gnuradio-core | |
parent | c4c985b2aed889bc49a4e30b1e8866bb214b03a2 (diff) | |
parent | 29ac4f1f19c66d413db7876af7e58a9f983cae7d (diff) | |
download | gnuradio-ac9cd0eba188e25d724878f3071a30ae6da47e48.tar.gz gnuradio-ac9cd0eba188e25d724878f3071a30ae6da47e48.tar.bz2 gnuradio-ac9cd0eba188e25d724878f3071a30ae6da47e48.zip |
Merge branch 'master' into next
Diffstat (limited to 'gnuradio-core')
6 files changed, 39 insertions, 6 deletions
diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc index c894d62aa..1a9273af0 100644 --- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc +++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.cc @@ -45,6 +45,7 @@ gri_fft_filter_ccc_generic::~gri_fft_filter_ccc_generic () { delete d_fwdfft; delete d_invfft; + gri_fft_free(d_xformed_taps); } #if 0 @@ -115,7 +116,7 @@ gri_fft_filter_ccc_generic::compute_sizes(int ntaps) delete d_invfft; d_fwdfft = new gri_fft_complex(d_fftsize, true, d_nthreads); d_invfft = new gri_fft_complex(d_fftsize, false, d_nthreads); - d_xformed_taps.resize(d_fftsize); + d_xformed_taps = gri_fft_malloc_complex(d_fftsize); } } @@ -152,7 +153,7 @@ gri_fft_filter_ccc_generic::filter (int nitems, const gr_complex *input, gr_comp d_fwdfft->execute(); // compute fwd xform gr_complex *a = d_fwdfft->get_outbuf(); - gr_complex *b = &d_xformed_taps[0]; + gr_complex *b = d_xformed_taps; gr_complex *c = d_invfft->get_inbuf(); volk_32fc_x2_multiply_32fc_a(c, a, b, d_fftsize); diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h index 217b9ab83..899b59e03 100644 --- a/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h +++ b/gnuradio-core/src/lib/filter/gri_fft_filter_ccc_generic.h @@ -44,8 +44,8 @@ class GR_CORE_API gri_fft_filter_ccc_generic gri_fft_complex *d_invfft; // inverse "plan" int d_nthreads; // number of FFTW threads to use std::vector<gr_complex> d_tail; // state carried between blocks for overlap-add - std::vector<gr_complex> d_xformed_taps; // Fourier xformed taps std::vector<gr_complex> d_new_taps; + gr_complex *d_xformed_taps; // Fourier xformed taps void compute_sizes(int ntaps); int tailsize() const { return d_ntaps - 1; } diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc index e7f66b714..0989c9621 100644 --- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc +++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.cc @@ -44,6 +44,7 @@ gri_fft_filter_fff_generic::~gri_fft_filter_fff_generic () { delete d_fwdfft; delete d_invfft; + gri_fft_free(d_xformed_taps); } /* @@ -102,7 +103,7 @@ gri_fft_filter_fff_generic::compute_sizes(int ntaps) delete d_invfft; d_fwdfft = new gri_fft_real_fwd(d_fftsize); d_invfft = new gri_fft_real_rev(d_fftsize); - d_xformed_taps.resize(d_fftsize/2+1); + d_xformed_taps = gri_fft_malloc_complex(d_fftsize/2+1); } } @@ -139,7 +140,7 @@ gri_fft_filter_fff_generic::filter (int nitems, const float *input, float *outpu d_fwdfft->execute(); // compute fwd xform gr_complex *a = d_fwdfft->get_outbuf(); - gr_complex *b = &d_xformed_taps[0]; + gr_complex *b = d_xformed_taps; gr_complex *c = d_invfft->get_inbuf(); volk_32fc_x2_multiply_32fc_a(c, a, b, d_fftsize/2+1); diff --git a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h index be31068aa..6ac30cef5 100644 --- a/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h +++ b/gnuradio-core/src/lib/filter/gri_fft_filter_fff_generic.h @@ -41,8 +41,8 @@ class GR_CORE_API gri_fft_filter_fff_generic gri_fft_real_rev *d_invfft; // inverse "plan" int d_nthreads; // number of FFTW threads to use std::vector<float> d_tail; // state carried between blocks for overlap-add - std::vector<gr_complex> d_xformed_taps; // Fourier xformed taps std::vector<float> d_new_taps; + gr_complex *d_xformed_taps; // Fourier xformed taps void compute_sizes(int ntaps); diff --git a/gnuradio-core/src/lib/general/gri_fft.cc b/gnuradio-core/src/lib/general/gri_fft.cc index 63e307776..2edb5f5aa 100644 --- a/gnuradio-core/src/lib/general/gri_fft.cc +++ b/gnuradio-core/src/lib/general/gri_fft.cc @@ -47,6 +47,24 @@ static int my_fftw_read_char(void *f) { return fgetc((FILE *) f); } #include <boost/filesystem/path.hpp> namespace fs = boost::filesystem; +gr_complex * +gri_fft_malloc_complex(int size) +{ + return (gr_complex*)fftwf_malloc(sizeof(gr_complex)*size); +} + +float * +gri_fft_malloc_float(int size) +{ + return (float*)fftwf_malloc(sizeof(float)*size); +} + +void +gri_fft_free(void *b) +{ + fftwf_free(b); +} + boost::mutex & gri_fft_planner::mutex() { diff --git a/gnuradio-core/src/lib/general/gri_fft.h b/gnuradio-core/src/lib/general/gri_fft.h index ed80badf1..f77a18e52 100644 --- a/gnuradio-core/src/lib/general/gri_fft.h +++ b/gnuradio-core/src/lib/general/gri_fft.h @@ -30,6 +30,19 @@ #include <gr_complex.h> #include <boost/thread.hpp> +/*! \brief Helper function for allocating complex fft buffers + */ +gr_complex* gri_fft_malloc_complex(int size); + +/*! \brief Helper function for allocating float fft buffers + */ +float* gri_fft_malloc_float(int size); + +/*! \brief Helper function for freeing fft buffers + */ +void gri_fft_free(void *b); + + /*! * \brief Export reference to planner mutex for those apps that * want to use FFTW w/o using the gri_fftw* classes. |