summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/general
diff options
context:
space:
mode:
authoreb2006-09-10 19:21:33 +0000
committereb2006-09-10 19:21:33 +0000
commitb15586bbab01e39cc5b888413abbc4c2a19d1ab4 (patch)
tree58aa5ba4990809ed98ca118a9934f424582769bb /gnuradio-core/src/lib/general
parentd663513cd3fd9012b1bb6e6240691d6ddcc31f74 (diff)
downloadgnuradio-b15586bbab01e39cc5b888413abbc4c2a19d1ab4.tar.gz
gnuradio-b15586bbab01e39cc5b888413abbc4c2a19d1ab4.tar.bz2
gnuradio-b15586bbab01e39cc5b888413abbc4c2a19d1ab4.zip
added gr.complex_to_mag_squared block
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@3513 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-core/src/lib/general')
-rw-r--r--gnuradio-core/src/lib/general/gr_complex_to_xxx.cc33
-rw-r--r--gnuradio-core/src/lib/general/gr_complex_to_xxx.h21
-rw-r--r--gnuradio-core/src/lib/general/gr_complex_to_xxx.i11
3 files changed, 63 insertions, 2 deletions
diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc b/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc
index 727f44f07..222357cd0 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc
+++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc
@@ -169,6 +169,39 @@ gr_complex_to_mag::work (int noutput_items,
// ----------------------------------------------------------------
+gr_complex_to_mag_squared_sptr
+gr_make_complex_to_mag_squared (unsigned int vlen)
+{
+ return gr_complex_to_mag_squared_sptr (new gr_complex_to_mag_squared (vlen));
+}
+
+gr_complex_to_mag_squared::gr_complex_to_mag_squared (unsigned int vlen)
+ : gr_sync_block ("complex_to_mag_squared",
+ gr_make_io_signature (1, 1, sizeof (gr_complex) * vlen),
+ gr_make_io_signature (1, 1, sizeof (float) * vlen)),
+ d_vlen(vlen)
+{
+}
+
+int
+gr_complex_to_mag_squared::work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const gr_complex *in = (const gr_complex *) input_items[0];
+ float *out = (float *) output_items[0];
+ int noi = noutput_items * d_vlen;
+
+ for (int i = 0; i < noi; i++){
+ const float __x = in[i].real();
+ const float __y = in[i].imag();
+ out[i] = __x * __x + __y * __y;
+ }
+ return noutput_items;
+}
+
+// ----------------------------------------------------------------
+
gr_complex_to_arg_sptr
gr_make_complex_to_arg (unsigned int vlen)
{
diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
index 02a9fc8fd..d9acdb8ab 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
+++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
@@ -30,18 +30,21 @@ class gr_complex_to_float;
class gr_complex_to_real;
class gr_complex_to_imag;
class gr_complex_to_mag;
+class gr_complex_to_mag_squared;
class gr_complex_to_arg;
typedef boost::shared_ptr<gr_complex_to_float> gr_complex_to_float_sptr;
typedef boost::shared_ptr<gr_complex_to_real> gr_complex_to_real_sptr;
typedef boost::shared_ptr<gr_complex_to_imag> gr_complex_to_imag_sptr;
typedef boost::shared_ptr<gr_complex_to_mag> gr_complex_to_mag_sptr;
+typedef boost::shared_ptr<gr_complex_to_mag_squared> gr_complex_to_mag_squared_sptr;
typedef boost::shared_ptr<gr_complex_to_arg> gr_complex_to_arg_sptr;
gr_complex_to_float_sptr gr_make_complex_to_float (unsigned int vlen=1);
gr_complex_to_real_sptr gr_make_complex_to_real (unsigned int vlen=1);
gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
+gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1);
/*!
@@ -117,6 +120,24 @@ class gr_complex_to_mag : public gr_sync_block
};
/*!
+ * \brief complex in, magnitude squared out (float)
+ * \ingroup converter
+ * \param vlen vector len (default 1)
+ */
+class gr_complex_to_mag_squared : public gr_sync_block
+{
+ friend gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen);
+ gr_complex_to_mag_squared (unsigned int vlen);
+
+ unsigned int d_vlen;
+
+ public:
+ virtual int work (int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+/*!
* \brief complex in, angle out (float)
* \ingroup converter
* \param vlen vector len (default 1)
diff --git a/gnuradio-core/src/lib/general/gr_complex_to_xxx.i b/gnuradio-core/src/lib/general/gr_complex_to_xxx.i
index 06f1020a0..e6d00cc8b 100644
--- a/gnuradio-core/src/lib/general/gr_complex_to_xxx.i
+++ b/gnuradio-core/src/lib/general/gr_complex_to_xxx.i
@@ -39,8 +39,8 @@ gr_complex_to_imag_sptr gr_make_complex_to_imag (unsigned int vlen=1);
class gr_complex_to_imag : public gr_sync_block
{
gr_complex_to_imag (unsigned int vlen);
-}
- ;
+};
+
GR_SWIG_BLOCK_MAGIC(gr,complex_to_mag);
gr_complex_to_mag_sptr gr_make_complex_to_mag (unsigned int vlen=1);
class gr_complex_to_mag : public gr_sync_block
@@ -48,6 +48,13 @@ class gr_complex_to_mag : public gr_sync_block
gr_complex_to_mag (unsigned int vlen);
};
+GR_SWIG_BLOCK_MAGIC(gr,complex_to_mag_squared);
+gr_complex_to_mag_squared_sptr gr_make_complex_to_mag_squared (unsigned int vlen=1);
+class gr_complex_to_mag_squared : public gr_sync_block
+{
+ gr_complex_to_mag_squared (unsigned int vlen);
+};
+
GR_SWIG_BLOCK_MAGIC(gr,complex_to_arg);
gr_complex_to_arg_sptr gr_make_complex_to_arg (unsigned int vlen=1);
class gr_complex_to_arg : public gr_sync_block