commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r3592 - in gnuradio/branches/developers/trondeau/digit


From: trondeau
Subject: [Commit-gnuradio] r3592 - in gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src: lib/general python/gnuradio python/gnuradio/blksimpl
Date: Wed, 20 Sep 2006 11:12:14 -0600 (MDT)

Author: trondeau
Date: 2006-09-20 11:12:14 -0600 (Wed, 20 Sep 2006)
New Revision: 3592

Modified:
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
Log:
added second rate to AGC (probably should be better named than rate1, rate2); 
dbpsk, dqpsk, gmsk all work in dicontinuous mode

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
        2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.cc
        2006-09-20 17:12:14 UTC (rev 3592)
@@ -29,23 +29,25 @@
 #include <gri_agc_cc.h>
 
 gr_agc_cc_sptr
-gr_make_agc_cc (float rate, float reference, float gain, float max_gain)
+gr_make_agc_cc (float rate1, float rate2, float reference, 
+               float gain, float max_gain)
 {
-  return gr_agc_cc_sptr (new gr_agc_cc (rate, reference, gain, max_gain));
+  return gr_agc_cc_sptr (new gr_agc_cc (rate1, rate2, reference, gain, 
max_gain));
 }
 
-gr_agc_cc::gr_agc_cc (float rate, float reference, float gain, float max_gain)
+gr_agc_cc::gr_agc_cc (float rate1, float rate2, 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, max_gain)
+                  gr_make_io_signature (1, 1, sizeof (gr_complex))), 
+    gri_agc_cc (rate1,  rate2, reference, gain, max_gain)
 {
 }
 
 int
 gr_agc_cc::work (int noutput_items,
-                        gr_vector_const_void_star &input_items,
-                        gr_vector_void_star &output_items)
+                gr_vector_const_void_star &input_items,
+                gr_vector_void_star &output_items)
 {
   const gr_complex *in = (const gr_complex *) input_items[0];
   gr_complex *out = (gr_complex *) output_items[0];

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
 2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.h
 2006-09-20 17:12:14 UTC (rev 3592)
@@ -29,7 +29,8 @@
 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, 
float max_gain = 0.0);
+gr_make_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0, 
+               float gain = 1.0, float max_gain = 1000.0);
 /*!
  * \brief high performance Automatic Gain Control class
  *
@@ -38,8 +39,10 @@
 
 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, float max_gain);
-  gr_agc_cc (float rate, float reference, float gain, float max_gain);
+  friend gr_agc_cc_sptr gr_make_agc_cc (float rate1, float rate2, float 
reference, 
+                                       float gain, float max_gain);
+  gr_agc_cc (float rate1, float rate2, float reference, 
+            float gain, float max_gain);
 
  public:
   virtual int work (int noutput_items,

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
 2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gr_agc_cc.i
 2006-09-20 17:12:14 UTC (rev 3592)
@@ -25,9 +25,11 @@
 %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, 
float max_gain = 0.0);
+gr_make_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0, 
+               float gain = 1.0, float max_gain = 1000.0);
 
 class gr_agc_cc : public gr_sync_block , public gri_agc_cc
 {
-  gr_agc_cc (float rate, float reference, float gain, float max_gain);
+  gr_agc_cc (float rate1, float rate2, float reference, 
+             float gain, float max_gain);
 };

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
        2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.h
        2006-09-20 17:12:14 UTC (rev 3592)
@@ -34,23 +34,33 @@
 class gri_agc_cc {
 
  public:
-  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) {};
+  gri_agc_cc (float rate1 = 1e-1, float rate2 = 1e-2, float reference = 1.0, 
+              float gain = 1.0, float max_gain = 1000.0)
+    : _rate1(rate1), _rate2(rate2), _reference(reference),
+      _gain(gain), _max_gain(max_gain) {};
 
-  float rate () const      { return _rate; }
+  float rate1 () const     { return _rate1; }
+  float rate2 () const     { return _rate2; }
   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_rate1 (float rate) { _rate1 = rate; }
+  void set_rate2 (float rate) { _rate2 = 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, 
-                                                     //note that abs is 
computationally more intensive then norm for a complex number
+    
+    float tmp = (_reference - sqrt(output.real()*output.real() + 
+                            output.imag()*output.imag()));
+    float rate = _rate1;
+    if(tmp > _gain)
+       rate = _rate2;
+    _gain += tmp*rate;
+    
     if (_max_gain > 0.0 && _gain > _max_gain)
        _gain = _max_gain;                                                   
     return output;
@@ -62,7 +72,8 @@
   }
   
  protected:
-  float _rate;                 // adjustment rate
+  float _rate1;                        // adjustment rate
+  float _rate2;                        // decay rate
   float        _reference;             // reference value
   float        _gain;                  // current gain
   float _max_gain;             // max allowable gain

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
        2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/lib/general/gri_agc_cc.i
        2006-09-20 17:12:14 UTC (rev 3592)
@@ -32,8 +32,10 @@
 class gri_agc_cc {
 
  public:
-  gri_agc_cc (float rate = 1e-4, float reference = 1.0, float gain = 1.0, 
float max_gain = 0.0);
-  float rate ();
+  gri_agc_cc (float rate1 = 1e-2, float rate2 = 1e-2, float reference = 1.0, 
+              float gain = 1.0, float max_gain = 1000.0);
+  float rate1 ();
+  float rate2 ();
   float reference ();
   float gain ();
   float max_gain ();

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
        2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
        2006-09-20 17:12:14 UTC (rev 3592)
@@ -179,8 +179,9 @@
         arity = pow(2,self.bits_per_baud())
 
         # Automatic gain control
-        self.preamp = gr.multiply_const_cc(10e-5)
-        self.agc = gr.agc_cc(1e-3, 1, 1)
+        scale = (1.0/16384.0)
+        self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
+        self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
         
         # Costas loop (carrier tracking)
         # FIXME: need to decide how to handle this more generally; do we pull 
it from higher layer?
@@ -225,9 +226,9 @@
             self.debug()
 
         # Connect and Initialize base class
-        self._fg.connect(self.preamp, self.agc, self.costas_loop, 
self.rrc_filter, \
+        self._fg.connect(self.pre_scaler, self.agc, self.costas_loop, 
self.rrc_filter, \
                          self.clock_recovery, self.slicer, self.gray_decoder, 
self.unpack)
-        gr.hier_block.__init__(self, self.fg, self.preamp, self.unpack)
+        gr.hier_block.__init__(self, self.fg, self.pre_scaler, self.unpack)
 
     def samples_per_symbol(self):
         return self._samples_per_symbol

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
       2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
       2006-09-20 17:12:14 UTC (rev 3592)
@@ -206,15 +206,15 @@
         arity = pow(2,self.bits_per_symbol())
 
         # Automatic gain control
-        self.preamp = gr.multiply_const_cc(10e-5)
-        #self.agc = gr.agc_cc(1e-4, 1, 1, 1000)
-        self.agc = gr.multiply_const_cc(1)
+        scale = (1.0/16384.0)
+        self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
+        self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
         
         # Costas loop (carrier tracking)
         # FIXME: need to decide how to handle this more generally; do we pull 
it from higher layer?
         costas_order = 2
         beta = .25 * self._costas_alpha * self._costas_alpha
-        self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.5, 
-0.5, costas_order)
+        self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.05, 
-0.05, costas_order)
 
         # RRC data filter
         ntaps = 11 * self._samples_per_symbol
@@ -255,9 +255,9 @@
             self._setup_logging()
 
         # Connect and Initialize base class
-        self._fg.connect(self.preamp, self.agc, self.costas_loop, 
self.rrc_filter, self.clock_recovery,
+        self._fg.connect(self.pre_scaler, self.agc, self.costas_loop, 
self.rrc_filter, self.clock_recovery,
                          self.diffdec, self.slicer, self.gray_decoder, 
self.unpack)
-        gr.hier_block.__init__(self, self._fg, self.preamp, self.unpack)
+        gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
 
     def samples_per_symbol(self):
         return self._samples_per_symbol
@@ -277,25 +277,25 @@
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.agc,
-                        gr.file_sink(gr.sizeof_gr_complex, "agc.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, "agc.dat"))
         self._fg.connect(self.costas_loop,
-                        gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, "costas_loop.dat"))
         self._fg.connect((self.costas_loop,1),
-                        gr.file_sink(gr.sizeof_gr_complex, "costas_error.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"costas_error.dat"))
         self._fg.connect(self.rrc_filter,
-                        gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
         self._fg.connect(self.clock_recovery,
-                        gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.dat"))
         self._fg.connect((self.clock_recovery,1),
-                        gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery_error.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery_error.dat"))
         self._fg.connect(self.diffdec,
-                        gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat"))     
   
+                         gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat"))    
    
         self._fg.connect(self.slicer,
                         gr.file_sink(gr.sizeof_char, "slicer.dat"))
         self._fg.connect(self.gray_decoder,
-                        gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
+                         gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
         self._fg.connect(self.unpack,
-                        gr.file_sink(gr.sizeof_char, "unpack.dat"))
+                         gr.file_sink(gr.sizeof_char, "unpack.dat"))
         
     def add_options(parser):
         """

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
       2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
       2006-09-20 17:12:14 UTC (rev 3592)
@@ -203,9 +203,9 @@
         arity = pow(2,self.bits_per_symbol())
  
         # Automatic gain control
-        self.preamp = gr.multiply_const_cc(10e-5)
-        #self.agc = gr.agc_cc(1e-3, 1, 1)
-        self.agc = gr.multiply_const_cc(1)
+        scale = (1.0/16384.0)
+        self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
+        self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
         
         # Costas loop (carrier tracking)
         # FIXME: need to decide how to handle this more generally; do we pull 
it from higher layer?
@@ -253,9 +253,9 @@
             self._setup_logging()
  
         # Connect & Initialize base class
-        self._fg.connect(self.preamp, self.agc, self.costas_loop, 
self.rrc_filter, self.clock_recovery,
+        self._fg.connect(self.pre_scaler, self.agc, self.costas_loop, 
self.rrc_filter, self.clock_recovery,
                          self.diffdec, self.slicer, self.gray_decoder, 
self.unpack)
-        gr.hier_block.__init__(self, self._fg, self.preamp, self.unpack)
+        gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
 
     def samples_per_symbol(self):
         return self._samples_per_symbol

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
        2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
        2006-09-20 17:12:14 UTC (rev 3592)
@@ -195,8 +195,9 @@
        self._gain_omega = .25 * self._gain_mu * self._gain_mu        # 
critically damped
 
         # Automatic gain control
-        self.preamp = gr.multiply_const_cc(10e-5)
-        self.agc = gr.agc_cc(1e-3, 1, 1, 1000)
+        scale = (1.0/16384.0)
+        self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
+        self.agc = gr.agc_cc(0.1, 0.01, 1, 1, 1000)
 
        # Demodulate FM
        sensitivity = (pi / 2) / samples_per_symbol
@@ -218,8 +219,8 @@
             self._setup_logging()
 
        # Connect & Initialize base class
-       self._fg.connect(self.preamp, self.agc, self.fmdemod, 
self.clock_recovery, self.slicer)
-       gr.hier_block.__init__(self, self._fg, self.preamp, self.slicer)
+       self._fg.connect(self.pre_scaler, self.agc, self.fmdemod, 
self.clock_recovery, self.slicer)
+       gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.slicer)
 
     def samples_per_symbol(self):
         return self._samples_per_symbol

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
 2006-09-20 04:39:58 UTC (rev 3591)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/packet_utils.py
 2006-09-20 17:12:14 UTC (rev 3592)
@@ -71,8 +71,9 @@
 
 default_access_code = \
   conv_packed_binary_string_to_1_0_string('\xAC\xDD\xA4\xE2\xF2\x8C\x20\xFC')
+preamble = \
+  conv_packed_binary_string_to_1_0_string('\xAA\xAA\xAA\xAB')
 
-
 def is_1_0_string(s):
     if not isinstance(s, str):
         return False
@@ -115,6 +116,7 @@
         raise ValueError, "access_code must be a string containing only 0's 
and 1's (%r)" % (access_code,)
 
     (packed_access_code, padded) = 
conv_1_0_string_to_packed_binary_string(access_code)
+    (packed_preamble) = conv_1_0_string_to_packed_binary_string(preamble)
     
     payload_with_crc = gru.gen_and_append_crc32(payload)
     #print "outbound crc =", string_to_hex_list(payload_with_crc[-4:])
@@ -124,7 +126,8 @@
     if L > MAXLEN:
         raise ValueError, "len(payload) must be in [0, %d]" % (MAXLEN,)
 
-    pkt = ''.join((packed_access_code, make_header(L), 
whiten(payload_with_crc), '\x55'))
+#    pkt = ''.join((packed_access_code, make_header(L), 
whiten(payload_with_crc), '\x55'))
+    pkt = ''.join((packed_preamble, packed_access_code, make_header(L), 
whiten(payload_with_crc), '\x55'))
     if pad_for_usrp:
         pkt = pkt + (_npadding_bytes(len(pkt), samples_per_symbol, 
bits_per_symbol) * '\x55')
 





reply via email to

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