commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] gnuradio-core ChangeLog src/lib/general/gr_cost...


From: Eric Blossom
Subject: [Commit-gnuradio] gnuradio-core ChangeLog src/lib/general/gr_cost...
Date: Wed, 21 Jun 2006 03:56:12 +0000

CVSROOT:        /sources/gnuradio
Module name:    gnuradio-core
Changes by:     Eric Blossom <eb>       06/06/21 03:56:11

Modified files:
        .              : ChangeLog 
        src/lib/general: gr_costas_loop_cc.cc gr_costas_loop_cc.h 
                         gr_costas_loop_cc.i 

Log message:
        modified to support BPSK and QPSK

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/ChangeLog?cvsroot=gnuradio&r1=1.240&r2=1.241
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc?cvsroot=gnuradio&r1=1.13&r2=1.14
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_costas_loop_cc.h?cvsroot=gnuradio&r1=1.6&r2=1.7
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_costas_loop_cc.i?cvsroot=gnuradio&r1=1.3&r2=1.4

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/ChangeLog,v
retrieving revision 1.240
retrieving revision 1.241
diff -u -b -r1.240 -r1.241
--- ChangeLog   21 Jun 2006 00:08:02 -0000      1.240
+++ ChangeLog   21 Jun 2006 03:56:11 -0000      1.241
@@ -1,3 +1,9 @@
+2006-06-20  Tom Rondeau  <address@hidden>
+
+       * src/lib/general/gr_costas_loop_cc.{h,cc,i}: modified to support
+       both BPSK and QPSK via "order" constructor argument.  Removed
+       unused ref_phase ctor arg.
+       
 2006-06-20  Eric Blossom  <address@hidden>
 
        * src/lib/general/gr_probe_avg_mag_sqrd_{f,c}.{h,cc,i}: added accessor

Index: src/lib/general/gr_costas_loop_cc.cc
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_costas_loop_cc.cc,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- src/lib/general/gr_costas_loop_cc.cc        23 May 2006 01:27:46 -0000      
1.13
+++ src/lib/general/gr_costas_loop_cc.cc        21 Jun 2006 03:56:11 -0000      
1.14
@@ -33,31 +33,56 @@
 #define M_TWOPI (2*M_PI)
 
 gr_costas_loop_cc_sptr
-gr_make_costas_loop_cc (float alpha, float beta, float max_freq, float 
min_freq, float ref_phase)
+gr_make_costas_loop_cc (float alpha, float beta,
+                       float max_freq, float min_freq,
+                       int order
+                       ) throw (std::invalid_argument)
 {
-  return gr_costas_loop_cc_sptr (new gr_costas_loop_cc (alpha, beta, max_freq, 
min_freq,ref_phase));
+  return gr_costas_loop_cc_sptr (new gr_costas_loop_cc (alpha, beta,
+                                                       max_freq, min_freq,
+                                                       order));
 }
 
 gr_costas_loop_cc::gr_costas_loop_cc (float alpha, float beta,
-                                     float max_freq, float min_freq, float 
ref_phase)
+                                     float max_freq, float min_freq,
+                                     int order
+                                     ) throw (std::invalid_argument)
   : gr_sync_block ("costas_loop_cc",
                   gr_make_io_signature (1, 1, sizeof (gr_complex)),
                   gr_make_io_signature (1, 1, sizeof (gr_complex))),
     d_alpha(alpha), d_beta(beta), 
     d_max_freq(max_freq), d_min_freq(min_freq),
     d_phase(0), d_freq((max_freq+min_freq)/2),
-    d_ref_phase(ref_phase)
+    d_order(order), d_phase_detector(0)
 {
+  switch(d_order) {
+  case 2:
+    d_phase_detector = &gr_costas_loop_cc::phase_detector_2;
+    break;
+
+  case 4:
+    d_phase_detector = &gr_costas_loop_cc::phase_detector_4;
+    break;
+
+  default: 
+    throw std::invalid_argument("order must be 2 or 4");
+    break;
+  }
 }
 
 
 float
-gr_costas_loop_cc::phase_detector(gr_complex sample,float ref_phase)
+gr_costas_loop_cc::phase_detector_4(gr_complex sample) const
 {
 
   return ((sample.real()>0 ? 1.0 : -1.0) * sample.imag() -
          (sample.imag()>0 ? 1.0 : -1.0) * sample.real());
+}
 
+float
+gr_costas_loop_cc::phase_detector_2(gr_complex sample) const
+{
+  return (sample.real()*sample.imag());
 }
 
 int
@@ -75,7 +100,7 @@
     nco_out = gr_expj(-d_phase);
     optr[i] = iptr[i] * nco_out;
 
-    error = phase_detector(optr[i], d_ref_phase);
+    error = (*this.*d_phase_detector)(optr[i]);
     
     d_freq = d_freq + d_beta * error;
     d_phase = d_phase + d_freq + d_alpha * error;

Index: src/lib/general/gr_costas_loop_cc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_costas_loop_cc.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -b -r1.6 -r1.7
--- src/lib/general/gr_costas_loop_cc.h 10 Mar 2006 20:29:24 -0000      1.6
+++ src/lib/general/gr_costas_loop_cc.h 21 Jun 2006 03:56:11 -0000      1.7
@@ -25,26 +25,42 @@
 #define INCLUDED_GR_COSTAS_LOOP_CC_H
 
 #include <gr_sync_block.h>
+#include <stdexcept>
 
 class gr_costas_loop_cc;
 typedef boost::shared_ptr<gr_costas_loop_cc> gr_costas_loop_cc_sptr;
 
-gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta,
-                                              float max_freq, float min_freq, 
float ref_phase);
+gr_costas_loop_cc_sptr 
+gr_make_costas_loop_cc (float alpha, float beta,
+                       float max_freq, float min_freq, 
+                       int order
+                       ) throw (std::invalid_argument);
+
 
 /*!
  * \brief Carrier tracking PLL for QPSK
  * input: complex; output: complex
+ *
+ * \p order must be 2 or 4.
  */
 class gr_costas_loop_cc : public gr_sync_block
 {
   friend gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float 
beta,
-                                                       float max_freq, float 
min_freq, float ref_phase);
-
-  float d_alpha, d_beta, d_max_freq, d_min_freq, d_phase, d_freq, d_ref_phase;
-
-  gr_costas_loop_cc (float alpha, float beta, float max_freq, float min_freq, 
float ref_phase);
-  float phase_detector(gr_complex sample,float ref_phase);
+                                                       float max_freq, float 
min_freq, 
+                                                       int order
+                                                       ) throw 
(std::invalid_argument);
+
+  float d_alpha, d_beta, d_max_freq, d_min_freq, d_phase, d_freq;
+  int d_order;
+
+  gr_costas_loop_cc (float alpha, float beta,
+                    float max_freq, float min_freq, 
+                    int order
+                    ) throw (std::invalid_argument);
+
+  float phase_detector_4(gr_complex sample) const;    // for QPSK
+  float phase_detector_2(gr_complex sample) const;    // for BPSK
+  float (gr_costas_loop_cc::*d_phase_detector)(gr_complex sample) const;
 
 public:
 

Index: src/lib/general/gr_costas_loop_cc.i
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_costas_loop_cc.i,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- src/lib/general/gr_costas_loop_cc.i 27 Jan 2006 18:05:07 -0000      1.3
+++ src/lib/general/gr_costas_loop_cc.i 21 Jun 2006 03:56:11 -0000      1.4
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2005 Free Software Foundation, Inc.
+ * Copyright 2005,2006 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -20,13 +20,18 @@
  * Boston, MA 02111-1307, USA.
  */
 
-GR_SWIG_BLOCK_MAGIC(gr,costas_loop_cc)
+GR_SWIG_BLOCK_MAGIC(gr,costas_loop_cc);
+
+gr_costas_loop_cc_sptr
+gr_make_costas_loop_cc (float alpha, float beta, 
+                       float max_freq, float min_freq,
+                       int order
+                       ) throw (std::invalid_argument);
 
-  gr_costas_loop_cc_sptr gr_make_costas_loop_cc (float alpha, float beta, 
-                                                float max_freq, float 
min_freq, float ref_phase);
 
 class gr_costas_loop_cc : public gr_sync_block
 {
  private:
-  gr_costas_loop_cc (float alpha, float beta, float max_freq, float min_freq, 
float ref_phase);
+  gr_costas_loop_cc (float alpha, float beta,
+                    float max_freq, float min_freq, int order);
 };




reply via email to

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