commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] gnuradio-core/src/lib/general gr_agc_cc.cc gr_a...


From: Johnathan Corgan
Subject: [Commit-gnuradio] gnuradio-core/src/lib/general gr_agc_cc.cc gr_a...
Date: Sun, 02 Jul 2006 07:37:27 +0000

CVSROOT:        /sources/gnuradio
Module name:    gnuradio-core
Changes by:     Johnathan Corgan <jcorgan>      06/07/02 07:37:27

Modified files:
        src/lib/general: gr_agc_cc.cc gr_agc_cc.h gr_agc_cc.i 
                         gr_agc_ff.cc gr_agc_ff.h gr_agc_ff.i gri_agc.h 
                         gri_agc.i gri_agc_cc.h gri_agc_cc.i 

Log message:
        Add max_gain parameter to AGC blocks.  Default is not to cap the gain, 
to
        preserve existing code behavior.  This parameter can be used to avoid 
the
        gain excursions and recovery transients when an AGC block follows a 
        squelch block.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_cc.cc?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_cc.h?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_cc.i?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_ff.cc?cvsroot=gnuradio&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_ff.h?cvsroot=gnuradio&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gr_agc_ff.i?cvsroot=gnuradio&r1=1.2&r2=1.3
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gri_agc.h?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gri_agc.i?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gri_agc_cc.h?cvsroot=gnuradio&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/gnuradio-core/src/lib/general/gri_agc_cc.i?cvsroot=gnuradio&r1=1.1&r2=1.2

Patches:
Index: gr_agc_cc.cc
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_cc.cc,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gr_agc_cc.cc        23 Feb 2006 21:26:29 -0000      1.1
+++ gr_agc_cc.cc        2 Jul 2006 07:37:27 -0000       1.2
@@ -29,16 +29,16 @@
 #include <gri_agc_cc.h>
 
 gr_agc_cc_sptr
-gr_make_agc_cc (float rate, float reference, float gain)
+gr_make_agc_cc (float rate, float reference, float gain, float max_gain)
 {
-  return gr_agc_cc_sptr (new gr_agc_cc (rate, reference, gain));
+  return gr_agc_cc_sptr (new gr_agc_cc (rate, reference, gain, max_gain));
 }
 
-gr_agc_cc::gr_agc_cc (float rate, float reference, float gain)
+gr_agc_cc::gr_agc_cc (float rate, float reference, float gain, float max_gain)
   : gr_sync_block ("gr_agc_cc",
                   gr_make_io_signature (1, 1, sizeof (gr_complex)),
                   gr_make_io_signature (1, 1, sizeof (gr_complex)))
-  , gri_agc_cc (rate,  reference, gain)
+  , gri_agc_cc (rate,  reference, gain, max_gain)
 {
 }
 

Index: gr_agc_cc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_cc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gr_agc_cc.h 23 Feb 2006 21:26:29 -0000      1.1
+++ gr_agc_cc.h 2 Jul 2006 07:37:27 -0000       1.2
@@ -29,7 +29,7 @@
 typedef boost::shared_ptr<gr_agc_cc> gr_agc_cc_sptr;
 
 gr_agc_cc_sptr
-gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
 /*!
  * \brief high performance Automatic Gain Control class
  *
@@ -38,8 +38,8 @@
 
 class gr_agc_cc : public gr_sync_block, public gri_agc_cc
 {
-  friend gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference, float 
gain);
-  gr_agc_cc (float rate, float reference, float gain);
+  friend gr_agc_cc_sptr gr_make_agc_cc (float rate, float reference, float 
gain, float max_gain);
+  gr_agc_cc (float rate, float reference, float gain, float max_gain);
 
  public:
   virtual int work (int noutput_items,
@@ -47,5 +47,4 @@
                    gr_vector_void_star &output_items);
 };
 
-
 #endif /* INCLUDED_GR_AGC_CC_H */

Index: gr_agc_cc.i
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_cc.i,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gr_agc_cc.i 23 Feb 2006 21:26:29 -0000      1.1
+++ gr_agc_cc.i 2 Jul 2006 07:37:27 -0000       1.2
@@ -25,9 +25,9 @@
 %include <gri_agc_cc.i>
 
 gr_agc_cc_sptr
-gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+gr_make_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
 
 class gr_agc_cc : public gr_sync_block , public gri_agc_cc
 {
-  gr_agc_cc (float rate, float reference, float gain);
+  gr_agc_cc (float rate, float reference, float gain, float max_gain);
 };

Index: gr_agc_ff.cc
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_ff.cc,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- gr_agc_ff.cc        20 Dec 2005 04:21:28 -0000      1.2
+++ gr_agc_ff.cc        2 Jul 2006 07:37:27 -0000       1.3
@@ -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
  * 
@@ -29,16 +29,16 @@
 #include <gri_agc.h>
 
 gr_agc_ff_sptr
-gr_make_agc_ff (float rate, float reference, float gain)
+gr_make_agc_ff (float rate, float reference, float gain, float max_gain)
 {
-  return gr_agc_ff_sptr (new gr_agc_ff (rate, reference, gain));
+  return gr_agc_ff_sptr (new gr_agc_ff (rate, reference, gain, max_gain));
 }
 
-gr_agc_ff::gr_agc_ff (float rate, float reference, float gain)
+gr_agc_ff::gr_agc_ff (float rate, float reference, float gain, float max_gain)
   : gr_sync_block ("gr_agc_ff",
                   gr_make_io_signature (1, 1, sizeof (float)),
                   gr_make_io_signature (1, 1, sizeof (float)))
-  , gri_agc (rate,  reference, gain)
+  , gri_agc (rate,  reference, gain, max_gain)
 {
 }
 

Index: gr_agc_ff.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_ff.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- gr_agc_ff.h 20 Dec 2005 04:21:28 -0000      1.2
+++ gr_agc_ff.h 2 Jul 2006 07:37:27 -0000       1.3
@@ -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
  * 
@@ -29,7 +29,7 @@
 typedef boost::shared_ptr<gr_agc_ff> gr_agc_ff_sptr;
 
 gr_agc_ff_sptr
-gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
 /*!
  * \brief high performance Automatic Gain Control class
  *
@@ -38,8 +38,8 @@
 
 class gr_agc_ff : public gr_sync_block, public gri_agc
 {
-  friend gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference, float 
gain);
-  gr_agc_ff (float rate, float reference, float gain);
+  friend gr_agc_ff_sptr gr_make_agc_ff (float rate, float reference, float 
gain, float max_gain);
+  gr_agc_ff (float rate, float reference, float gain, float max_gain);
 
  public:
   virtual int work (int noutput_items,
@@ -47,5 +47,4 @@
                    gr_vector_void_star &output_items);
 };
 
-
 #endif /* INCLUDED_GR_FLOAT_AGC_FF_H */

Index: gr_agc_ff.i
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gr_agc_ff.i,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- gr_agc_ff.i 20 Dec 2005 04:21:28 -0000      1.2
+++ gr_agc_ff.i 2 Jul 2006 07:37:27 -0000       1.3
@@ -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
  * 
@@ -25,9 +25,9 @@
 %include <gri_agc.i>
 
 gr_agc_ff_sptr
-gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+gr_make_agc_ff (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
 
 class gr_agc_ff : public gr_sync_block , public gri_agc
 {
-  gr_agc_ff (float rate, float reference, float gain);
+  gr_agc_ff (float rate, float reference, float gain, float max_gain);
 };

Index: gri_agc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gri_agc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gri_agc.h   20 Dec 2005 04:21:28 -0000      1.1
+++ gri_agc.h   2 Jul 2006 07:37:27 -0000       1.2
@@ -1,6 +1,6 @@
 /* -*- c++ -*- */
 /*
- * Copyright 2002 Free Software Foundation, Inc.
+ * Copyright 2002,2006 Free Software Foundation, Inc.
  * 
  * This file is part of GNU Radio
  * 
@@ -34,20 +34,24 @@
 class gri_agc {
 
  public:
-  gri_agc (float rate = 1e-4, float reference = 1.0, float gain = 1.0)
-    : _rate(rate), _reference(reference), _gain(gain) {};
+  gri_agc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, float 
max_gain = 0.0)
+    : _rate(rate), _reference(reference), _gain(gain), _max_gain(max_gain) {};
 
   float rate () const      { return _rate; }
   float reference () const { return _reference; }
   float gain () const     { return _gain;  }
+  float max_gain () const  { return _max_gain; }
 
   void set_rate (float rate) { _rate = rate; }
   void set_reference (float reference) { _reference = reference; }
   void set_gain (float gain) { _gain = gain; }
+  void set_max_gain (float max_gain) { _max_gain = max_gain; }
 
   float scale (float input){
     float output = input * _gain;
     _gain += (_reference - fabsf (output)) * _rate;
+    if (_max_gain > 0.0 && _gain > _max_gain)
+      _gain = _max_gain;
     return output;
   }
 
@@ -60,6 +64,7 @@
   float _rate;                 // adjustment rate
   float        _reference;             // reference value
   float        _gain;                  // current gain
+  float _max_gain;             // maximum gain
 };
 
 #endif /* _GRI_AGC_H_ */

Index: gri_agc.i
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gri_agc.i,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gri_agc.i   20 Dec 2005 04:21:28 -0000      1.1
+++ gri_agc.i   2 Jul 2006 07:37:27 -0000       1.2
@@ -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
  * 
@@ -32,5 +32,5 @@
 class gri_agc {
 
  public:
-  gri_agc (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+  gri_agc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, float 
max_gain = 0.0);
   };

Index: gri_agc_cc.h
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gri_agc_cc.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gri_agc_cc.h        23 Feb 2006 21:26:29 -0000      1.1
+++ gri_agc_cc.h        2 Jul 2006 07:37:27 -0000       1.2
@@ -34,21 +34,25 @@
 class gri_agc_cc {
 
  public:
-  gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0)
-    : _rate(rate), _reference(reference), _gain(gain) {};
+  gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0)
+    : _rate(rate), _reference(reference), _gain(gain), _max_gain(max_gain) {};
 
   float rate () const      { return _rate; }
   float reference () const { return _reference; }
   float gain () const     { return _gain;  }
+  float max_gain() const   { return _max_gain; }
 
   void set_rate (float rate) { _rate = rate; }
   void set_reference (float reference) { _reference = reference; }
   void set_gain (float gain) { _gain = gain; }
+  void set_max_gain(float max_gain) { _max_gain = max_gain; }
 
   gr_complex scale (gr_complex input){
     gr_complex output = input * _gain;
-    _gain += (_reference - 
sqrt(output.real()*output.real()+output.imag()*output.imag())) * _rate;//use 
abs or cabs to get approximation by absolute value, 
+    _gain += (_reference - 
sqrt(output.real()*output.real()+output.imag()*output.imag())) * _rate; //use 
abs or cabs to get approximation by absolute value, 
                                                  //note that abs is 
computationally more intensive then norm for a complex number
+    if (_max_gain > 0.0 && _gain > _max_gain)
+       _gain = _max_gain;                                                   
     return output;
   }
 
@@ -61,6 +65,7 @@
   float _rate;                 // adjustment rate
   float        _reference;             // reference value
   float        _gain;                  // current gain
+  float _max_gain;             // max allowable gain
 };
 
 #endif /* _GRI_AGC_CC_H_ */

Index: gri_agc_cc.i
===================================================================
RCS file: /sources/gnuradio/gnuradio-core/src/lib/general/gri_agc_cc.i,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gri_agc_cc.i        23 Feb 2006 21:26:29 -0000      1.1
+++ gri_agc_cc.i        2 Jul 2006 07:37:27 -0000       1.2
@@ -32,8 +32,9 @@
 class gri_agc_cc {
 
  public:
-  gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0);
+  gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
   float rate ();
   float reference ();
   float gain ();
+  float max_gain ();
   };




reply via email to

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