summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib')
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc.cc20
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc.h11
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc.i10
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc27
-rw-r--r--gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h15
5 files changed, 69 insertions, 14 deletions
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.cc b/gnuradio-core/src/lib/general/gr_fft_vcc.cc
index d07f6fa07..64dda2491 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.cc
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.cc
@@ -32,9 +32,12 @@
#include <string.h>
gr_fft_vcc_sptr
-gr_make_fft_vcc (int fft_size, bool forward,const std::vector<float> &window, bool shift)
+gr_make_fft_vcc (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift, int nthreads)
{
- return gr_make_fft_vcc_fftw(fft_size, forward, window, shift);
+ return gr_make_fft_vcc_fftw(fft_size, forward,
+ window, shift, nthreads);
}
gr_fft_vcc::gr_fft_vcc (const std::string &name,
@@ -62,3 +65,16 @@ gr_fft_vcc::set_window(const std::vector<float> &window)
else
return false;
}
+
+void
+gr_fft_vcc::set_nthreads(int n)
+{
+ throw std::runtime_error("gr_fft_vcc::set_nthreads not implemented.");
+}
+
+int
+gr_fft_vcc::nthreads() const
+{
+ throw std::runtime_error("gr_fft_vcc::nthreads not implemented.");
+ return 0;
+}
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.h b/gnuradio-core/src/lib/general/gr_fft_vcc.h
index a7c8e1162..6c3985987 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.h
@@ -30,7 +30,9 @@ class gr_fft_vcc;
typedef boost::shared_ptr<gr_fft_vcc> gr_fft_vcc_sptr;
GR_CORE_API gr_fft_vcc_sptr
-gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
+gr_make_fft_vcc (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift=false, int nthreads=1);
/*!
* \brief Compute forward or reverse FFT. complex vector in / complex vector out.
@@ -42,7 +44,9 @@ class GR_CORE_API gr_fft_vcc : public gr_sync_block
{
protected:
friend GR_CORE_API gr_fft_vcc_sptr
- gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift);
+ gr_make_fft_vcc (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift);
unsigned int d_fft_size;
std::vector<float> d_window;
@@ -55,6 +59,9 @@ protected:
public:
~gr_fft_vcc ();
+ virtual void set_nthreads(int n);
+ virtual int nthreads() const;
+
bool set_window(const std::vector<float> &window);
};
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc.i b/gnuradio-core/src/lib/general/gr_fft_vcc.i
index f35316e70..0dc5353b2 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc.i
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc.i
@@ -23,13 +23,19 @@
GR_SWIG_BLOCK_MAGIC(gr, fft_vcc)
gr_fft_vcc_sptr
-gr_make_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
+gr_make_fft_vcc (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift=false, int nthreads=1);
class gr_fft_vcc : public gr_sync_block
{
protected:
- gr_fft_vcc (int fft_size, bool forward, const std::vector<float> &window, bool shift);
+ gr_fft_vcc (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift);
public:
bool set_window(const std::vector<float> &window);
+ void set_nthreads(int n);
+ int nthreads() const;
};
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc
index 948ab20b9..e6032ad9e 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.cc
@@ -31,16 +31,21 @@
#include <string.h>
gr_fft_vcc_sptr
-gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift)
+gr_make_fft_vcc_fftw (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift, int nthreads)
{
- return gnuradio::get_initial_sptr(new gr_fft_vcc_fftw (fft_size, forward, window, shift));
+ return gnuradio::get_initial_sptr(new gr_fft_vcc_fftw
+ (fft_size, forward, window,
+ shift, nthreads));
}
gr_fft_vcc_fftw::gr_fft_vcc_fftw (int fft_size, bool forward,
- const std::vector<float> &window, bool shift)
+ const std::vector<float> &window,
+ bool shift, int nthreads)
: gr_fft_vcc("fft_vcc_fftw", fft_size, forward, window, shift)
{
- d_fft = new gri_fft_complex (d_fft_size, forward);
+ d_fft = new gri_fft_complex (d_fft_size, forward, nthreads);
}
gr_fft_vcc_fftw::~gr_fft_vcc_fftw ()
@@ -48,6 +53,18 @@ gr_fft_vcc_fftw::~gr_fft_vcc_fftw ()
delete d_fft;
}
+void
+gr_fft_vcc_fftw::set_nthreads(int n)
+{
+ d_fft->set_nthreads(n);
+}
+
+int
+gr_fft_vcc_fftw::nthreads() const
+{
+ return d_fft->nthreads();
+}
+
int
gr_fft_vcc_fftw::work (int noutput_items,
gr_vector_const_void_star &input_items,
@@ -70,7 +87,7 @@ gr_fft_vcc_fftw::work (int noutput_items,
if(!d_forward && d_shift){
int offset = (!d_forward && d_shift)?(d_fft_size/2):0;
int fft_m_offset = d_fft_size - offset;
- for (unsigned int i = 0; i < offset; i++) // apply window
+ for (int i = 0; i < offset; i++) // apply window
dst[i+fft_m_offset] = in[i] * d_window[i];
for (unsigned int i = offset; i < d_fft_size; i++) // apply window
dst[i-offset] = in[i] * d_window[i];
diff --git a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
index 8535d133c..82b7512d7 100644
--- a/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
+++ b/gnuradio-core/src/lib/general/gr_fft_vcc_fftw.h
@@ -29,7 +29,9 @@
class gri_fft_complex;
GR_CORE_API gr_fft_vcc_sptr
-gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift=false);
+gr_make_fft_vcc_fftw (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift=false, int nthreads=1);
/*!
* \brief Compute forward or reverse FFT. complex vector in / complex vector out.
@@ -40,15 +42,22 @@ gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &wind
class GR_CORE_API gr_fft_vcc_fftw : public gr_fft_vcc
{
friend GR_CORE_API gr_fft_vcc_sptr
- gr_make_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift);
+ gr_make_fft_vcc_fftw (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift, int nthreads);
gri_fft_complex *d_fft;
- gr_fft_vcc_fftw (int fft_size, bool forward, const std::vector<float> &window, bool shift);
+ gr_fft_vcc_fftw (int fft_size, bool forward,
+ const std::vector<float> &window,
+ bool shift, int nthreads=1);
public:
~gr_fft_vcc_fftw ();
+ void set_nthreads(int n);
+ int nthreads() const;
+
int work (int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);