summaryrefslogtreecommitdiff
path: root/gr-fft/include/gnuradio/fft/fft.h
diff options
context:
space:
mode:
Diffstat (limited to 'gr-fft/include/gnuradio/fft/fft.h')
-rw-r--r--gr-fft/include/gnuradio/fft/fft.h286
1 files changed, 145 insertions, 141 deletions
diff --git a/gr-fft/include/gnuradio/fft/fft.h b/gr-fft/include/gnuradio/fft/fft.h
index 81cd51de21..d6f52d4c7d 100644
--- a/gr-fft/include/gnuradio/fft/fft.h
+++ b/gr-fft/include/gnuradio/fft/fft.h
@@ -32,168 +32,172 @@
#include <boost/thread.hpp>
namespace gr {
- namespace fft {
+namespace fft {
- /*! \brief Helper function for allocating complex* buffers
+/*! \brief Helper function for allocating complex* buffers
+ */
+FFT_API gr_complex* malloc_complex(int size);
+
+/*! \brief Helper function for allocating float* buffers
+ */
+FFT_API float* malloc_float(int size);
+
+/*! \brief Helper function for allocating double* buffers
+ */
+FFT_API double* malloc_double(int size);
+
+/*! \brief Helper function for freeing fft buffers
+ */
+FFT_API void free(void* b);
+
+/*!
+ * \brief Export reference to planner mutex for those apps that
+ * want to use FFTW w/o using the fft_impl_fftw* classes.
+ */
+class FFT_API planner
+{
+public:
+ typedef boost::mutex::scoped_lock scoped_lock;
+ /*!
+ * Return reference to planner mutex
+ */
+ static boost::mutex& mutex();
+};
+
+/*!
+ * \brief FFT: complex in, complex out
+ * \ingroup misc
+ */
+class FFT_API fft_complex
+{
+ int d_fft_size;
+ int d_nthreads;
+ gr_complex* d_inbuf;
+ gr_complex* d_outbuf;
+ void* d_plan;
+
+public:
+ fft_complex(int fft_size, bool forward = true, int nthreads = 1);
+ virtual ~fft_complex();
+
+ /*
+ * These return pointers to buffers owned by fft_impl_fft_complex
+ * into which input and output take place. It's done this way in
+ * order to ensure optimal alignment for SIMD instructions.
+ */
+ gr_complex* get_inbuf() const { return d_inbuf; }
+ gr_complex* get_outbuf() const { return d_outbuf; }
+
+ int inbuf_length() const { return d_fft_size; }
+ int outbuf_length() const { return d_fft_size; }
+
+ /*!
+ * Set the number of threads to use for caclulation.
+ */
+ void set_nthreads(int n);
+
+ /*!
+ * Get the number of threads being used by FFTW
*/
- FFT_API gr_complex* malloc_complex(int size);
+ int nthreads() const { return d_nthreads; }
- /*! \brief Helper function for allocating float* buffers
+ /*!
+ * compute FFT. The input comes from inbuf, the output is placed in
+ * outbuf.
+ */
+ void execute();
+};
+
+/*!
+ * \brief FFT: real in, complex out
+ * \ingroup misc
+ */
+class FFT_API fft_real_fwd
+{
+ int d_fft_size;
+ int d_nthreads;
+ float* d_inbuf;
+ gr_complex* d_outbuf;
+ void* d_plan;
+
+public:
+ fft_real_fwd(int fft_size, int nthreads = 1);
+ virtual ~fft_real_fwd();
+
+ /*
+ * These return pointers to buffers owned by fft_impl_fft_real_fwd
+ * into which input and output take place. It's done this way in
+ * order to ensure optimal alignment for SIMD instructions.
*/
- FFT_API float* malloc_float(int size);
+ float* get_inbuf() const { return d_inbuf; }
+ gr_complex* get_outbuf() const { return d_outbuf; }
- /*! \brief Helper function for allocating double* buffers
+ int inbuf_length() const { return d_fft_size; }
+ int outbuf_length() const { return d_fft_size / 2 + 1; }
+
+ /*!
+ * Set the number of threads to use for caclulation.
*/
- FFT_API double* malloc_double(int size);
+ void set_nthreads(int n);
- /*! \brief Helper function for freeing fft buffers
+ /*!
+ * Get the number of threads being used by FFTW
*/
- FFT_API void free(void *b);
+ int nthreads() const { return d_nthreads; }
/*!
- * \brief Export reference to planner mutex for those apps that
- * want to use FFTW w/o using the fft_impl_fftw* classes.
+ * compute FFT. The input comes from inbuf, the output is placed in
+ * outbuf.
+ */
+ void execute();
+};
+
+/*!
+ * \brief FFT: complex in, float out
+ * \ingroup misc
+ */
+class FFT_API fft_real_rev
+{
+ int d_fft_size;
+ int d_nthreads;
+ gr_complex* d_inbuf;
+ float* d_outbuf;
+ void* d_plan;
+
+public:
+ fft_real_rev(int fft_size, int nthreads = 1);
+ virtual ~fft_real_rev();
+
+ /*
+ * These return pointers to buffers owned by fft_impl_fft_real_rev
+ * into which input and output take place. It's done this way in
+ * order to ensure optimal alignment for SIMD instructions.
*/
- class FFT_API planner {
- public:
- typedef boost::mutex::scoped_lock scoped_lock;
- /*!
- * Return reference to planner mutex
- */
- static boost::mutex &mutex();
- };
+ gr_complex* get_inbuf() const { return d_inbuf; }
+ float* get_outbuf() const { return d_outbuf; }
+
+ int inbuf_length() const { return d_fft_size / 2 + 1; }
+ int outbuf_length() const { return d_fft_size; }
/*!
- * \brief FFT: complex in, complex out
- * \ingroup misc
+ * Set the number of threads to use for caclulation.
*/
- class FFT_API fft_complex {
- int d_fft_size;
- int d_nthreads;
- gr_complex *d_inbuf;
- gr_complex *d_outbuf;
- void *d_plan;
-
- public:
- fft_complex(int fft_size, bool forward = true, int nthreads=1);
- virtual ~fft_complex();
-
- /*
- * These return pointers to buffers owned by fft_impl_fft_complex
- * into which input and output take place. It's done this way in
- * order to ensure optimal alignment for SIMD instructions.
- */
- gr_complex *get_inbuf() const { return d_inbuf; }
- gr_complex *get_outbuf() const { return d_outbuf; }
-
- int inbuf_length() const { return d_fft_size; }
- int outbuf_length() const { return d_fft_size; }
-
- /*!
- * Set the number of threads to use for caclulation.
- */
- void set_nthreads(int n);
-
- /*!
- * Get the number of threads being used by FFTW
- */
- int nthreads() const { return d_nthreads; }
-
- /*!
- * compute FFT. The input comes from inbuf, the output is placed in
- * outbuf.
- */
- void execute();
- };
+ void set_nthreads(int n);
/*!
- * \brief FFT: real in, complex out
- * \ingroup misc
+ * Get the number of threads being used by FFTW
*/
- class FFT_API fft_real_fwd {
- int d_fft_size;
- int d_nthreads;
- float *d_inbuf;
- gr_complex *d_outbuf;
- void *d_plan;
-
- public:
- fft_real_fwd (int fft_size, int nthreads=1);
- virtual ~fft_real_fwd ();
-
- /*
- * These return pointers to buffers owned by fft_impl_fft_real_fwd
- * into which input and output take place. It's done this way in
- * order to ensure optimal alignment for SIMD instructions.
- */
- float *get_inbuf() const { return d_inbuf; }
- gr_complex *get_outbuf() const { return d_outbuf; }
-
- int inbuf_length() const { return d_fft_size; }
- int outbuf_length() const { return d_fft_size / 2 + 1; }
-
- /*!
- * Set the number of threads to use for caclulation.
- */
- void set_nthreads(int n);
-
- /*!
- * Get the number of threads being used by FFTW
- */
- int nthreads() const { return d_nthreads; }
-
- /*!
- * compute FFT. The input comes from inbuf, the output is placed in
- * outbuf.
- */
- void execute();
- };
+ int nthreads() const { return d_nthreads; }
/*!
- * \brief FFT: complex in, float out
- * \ingroup misc
+ * compute FFT. The input comes from inbuf, the output is placed in
+ * outbuf.
*/
- class FFT_API fft_real_rev {
- int d_fft_size;
- int d_nthreads;
- gr_complex *d_inbuf;
- float *d_outbuf;
- void *d_plan;
-
- public:
- fft_real_rev(int fft_size, int nthreads=1);
- virtual ~fft_real_rev();
-
- /*
- * These return pointers to buffers owned by fft_impl_fft_real_rev
- * into which input and output take place. It's done this way in
- * order to ensure optimal alignment for SIMD instructions.
- */
- gr_complex *get_inbuf() const { return d_inbuf; }
- float *get_outbuf() const { return d_outbuf; }
-
- int inbuf_length() const { return d_fft_size / 2 + 1; }
- int outbuf_length() const { return d_fft_size; }
-
- /*!
- * Set the number of threads to use for caclulation.
- */
- void set_nthreads(int n);
-
- /*!
- * Get the number of threads being used by FFTW
- */
- int nthreads() const { return d_nthreads; }
-
- /*!
- * compute FFT. The input comes from inbuf, the output is placed in
- * outbuf.
- */
- void execute();
- };
-
- } /* namespace fft */
+ void execute();
+};
+
+} /* namespace fft */
} /*namespace gr */
#endif /* _FFT_FFT_H_ */