commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] r3513 - in gnuradio/trunk/gnuradio-core/src: lib/gener


From: eb
Subject: [Commit-gnuradio] r3513 - in gnuradio/trunk/gnuradio-core/src: lib/general python/gnuradio/gr
Date: Sun, 10 Sep 2006 13:21:33 -0600 (MDT)

Author: eb
Date: 2006-09-10 13:21:33 -0600 (Sun, 10 Sep 2006)
New Revision: 3513

Modified:
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
   gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.i
   gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_complex_to_xxx.py
Log:
added gr.complex_to_mag_squared block

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc   
2006-09-10 19:20:13 UTC (rev 3512)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.cc   
2006-09-10 19:21:33 UTC (rev 3513)
@@ -169,6 +169,39 @@
 
 // ----------------------------------------------------------------
 
+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)
 {

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.h
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.h    
2006-09-10 19:20:13 UTC (rev 3512)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.h    
2006-09-10 19:21:33 UTC (rev 3513)
@@ -30,18 +30,21 @@
 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 @@
 };
 
 /*!
+ * \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)

Modified: gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.i
===================================================================
--- gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.i    
2006-09-10 19:20:13 UTC (rev 3512)
+++ gnuradio/trunk/gnuradio-core/src/lib/general/gr_complex_to_xxx.i    
2006-09-10 19:21:33 UTC (rev 3513)
@@ -39,8 +39,8 @@
 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 @@
   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

Modified: 
gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_complex_to_xxx.py
===================================================================
--- gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_complex_to_xxx.py    
2006-09-10 19:20:13 UTC (rev 3512)
+++ gnuradio/trunk/gnuradio-core/src/python/gnuradio/gr/qa_complex_to_xxx.py    
2006-09-10 19:21:33 UTC (rev 3513)
@@ -96,6 +96,18 @@
         actual_result = dst.data ()
         self.assertFloatTuplesAlmostEqual (expected_result, actual_result,5)
 
+    def test_complex_to_mag_squared (self):
+        src_data = (0, 1, -1, 3+4j, -3-4j, -3+4j)
+        expected_result = (0, 1, 1, 25, 25, 25)
+        src = gr.vector_source_c (src_data)
+        op = gr.complex_to_mag_squared ()
+        dst = gr.vector_sink_f ()
+        self.fg.connect (src, op)
+        self.fg.connect (op, dst)
+        self.fg.run ()
+        actual_result = dst.data ()
+        self.assertFloatTuplesAlmostEqual (expected_result, actual_result,5)
+
     def test_complex_to_arg (self):
         pi = math.pi
         expected_result = (0, pi/6, pi/4, pi/2, 3*pi/4, 7*pi/8,





reply via email to

[Prev in Thread] Current Thread [Next in Thread]