commit-gnuradio
[Top][All Lists]
Advanced

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

[Commit-gnuradio] r4099 - gnuradio/branches/developers/trondeau/digital-


From: trondeau
Subject: [Commit-gnuradio] r4099 - gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl
Date: Sat, 16 Dec 2006 00:53:19 -0700 (MST)

Author: trondeau
Date: 2006-12-16 00:53:19 -0700 (Sat, 16 Dec 2006)
New Revision: 4099

Modified:
   
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/d8psk.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/psk.py
Log:
wip: working on PSK demodulators

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/d8psk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/d8psk.py
       2006-12-16 07:26:48 UTC (rev 4098)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/d8psk.py
       2006-12-16 07:53:19 UTC (rev 4099)
@@ -40,9 +40,9 @@
 _def_log = False
 
 _def_costas_alpha = None
-_def_gain_mu = 0.03
-_def_mu = 0.05
-_def_omega_relative_limit = 0.005
+_def_gain_mu = 8.5e-4
+_def_mu = 0.00
+_def_omega_relative_limit = 0.001
 
 
 # /////////////////////////////////////////////////////////////////////////////
@@ -100,8 +100,7 @@
             
         self.diffenc = gr.diff_encoder_bb(arity)
 
-        #rot = .707 + .707j
-        rot = 1.0
+        rot = 1
         rotated_const = map(lambda pt: pt * rot, psk.constellation[arity])
         self.chunks2symbols = gr.chunks_to_symbols_bc(rotated_const)
 
@@ -122,7 +121,7 @@
             self._setup_logging()
             
        # Connect & Initialize base class
-        self._fg.connect(self.bytes2chunks, self.symbol_mapper, self.diffenc,
+        self._fg.connect(self.bytes2chunks, self.symbol_mapper, #self.diffenc,
                          self.chunks2symbols, self.rrc_filter)
        gr.hier_block.__init__(self, self._fg, self.bytes2chunks, 
self.rrc_filter)
 
@@ -136,20 +135,20 @@
     def _print_verbage(self):
         print "bits per symbol = %d" % self.bits_per_symbol()
         print "Gray code = %s" % self._gray_code
-        print "RRS roll-off factor = %f" % self._excess_bw
+        print "RS roll-off factor = %f" % self._excess_bw
 
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.bytes2chunks,
-                         gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat"))
         self._fg.connect(self.symbol_mapper,
-                         gr.file_sink(gr.sizeof_char, "graycoder.dat"))
-        self._fg.connect(self.diffenc,
-                         gr.file_sink(gr.sizeof_char, "diffenc.dat"))        
+                         gr.file_sink(gr.sizeof_char, "tx_graycoder.dat"))
+#        self._fg.connect(self.diffenc,
+#                         gr.file_sink(gr.sizeof_char, "tx_diffenc.dat"))      
  
         self._fg.connect(self.chunks2symbols,
-                         gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_chunks2symbols.dat"))
         self._fg.connect(self.rrc_filter,
-                         gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_rrc_filter.dat"))
 
     def add_options(parser):
         """
@@ -237,18 +236,19 @@
         self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
         #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100)
         self.agc = gr.feedforward_agc_cc(16, 1.0)
-       
-        # Costas loop (carrier tracking)
-        if self._costas_alpha is None:   # If no alpha value was specified by 
the user
-            alpha_dir = {2:0.075, 3:0.09, 4:0.09, 5:0.095, 6:0.10, 7:0.105}
-            self._costas_alpha = alpha_dir[self._samples_per_symbol]
+
+        if 0:
+            # Costas loop (carrier tracking)
+            if self._costas_alpha is None:   # If no alpha value was specified 
by the user
+                alpha_dir = {2:0.075, 3:0.09, 4:0.09, 5:0.095, 6:0.10, 7:0.105}
+                self._costas_alpha = alpha_dir[self._samples_per_symbol]
         
-        costas_order = 4        
-        # The value of beta is now set to be underdamped; this value can have 
a huge impact on the
-        # performance of QPSK. Set to 0.25 for critically damped or higher for 
underdamped responses.
-        beta = .35 * self._costas_alpha * self._costas_alpha
-        self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.02, 
-0.02, costas_order)
-
+            costas_order = 4        
+            # The value of beta is now set to be underdamped; this value can 
have a huge impact on the
+            # performance of QPSK. Set to 0.25 for critically damped or higher 
for underdamped responses.
+            beta = .35 * self._costas_alpha * self._costas_alpha
+            self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 
0.02, -0.02, costas_order)
+        
         # RRC data filter
         ntaps = 11 * samples_per_symbol
         self.rrc_taps = gr.firdes.root_raised_cosine(
@@ -267,15 +267,11 @@
                                                     self._mu, self._gain_mu,
                                                     self._omega_relative_limit)
 
-        self.diffdec = gr.diff_phasor_cc()
-        #self.diffdec = gr.diff_decoder_bb(arity)
+        self.diffdec = gr.diff_decoder_bb(arity)
 
         # find closest constellation point
         rot = 1
-        #rot = .707 + .707j
         rotated_const = map(lambda pt: pt * rot, psk.constellation[arity])
-        #print "rotated_const = %s" % rotated_const
-
         self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity))
 
         if self._gray_code:
@@ -294,24 +290,30 @@
             self._setup_logging()
  
         # Connect & Initialize base class
-        self._fg.connect(self.pre_scaler, self.agc, self.costas_loop,
-                         self.rrc_filter, self.clock_recovery,
-                         self.diffdec, self.slicer, self.symbol_mapper,
-                         self.unpack)
+        if 0:
+            self._fg.connect(self.pre_scaler, self.agc, #self.costas_loop,
+                             self.rrc_filter, self.clock_recovery,
+                             self.diffdec, self.slicer, self.symbol_mapper,
+                             self.unpack)
+        else:
+            self._fg.connect(self.pre_scaler, self.agc, #self.costas_loop,
+                             self.rrc_filter, self.clock_recovery,
+                             self.slicer, self.symbol_mapper,
+                             self.unpack)
         gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
 
     def samples_per_symbol(self):
         return self._samples_per_symbol
 
     def bits_per_symbol(self=None):   # staticmethod that's also callable on 
an instance
-        return 2
+        return 3
     bits_per_symbol = staticmethod(bits_per_symbol)      # make it a static 
method.  RTFM
 
     def _print_verbage(self):
         print "bits per symbol = %d"         % self.bits_per_symbol()
         print "Gray code = %s"               % self._gray_code
         print "RRC roll-off factor = %.2f"   % self._excess_bw
-        print "Costas Loop alpha = %.5f"     % self._costas_alpha
+#        print "Costas Loop alpha = %.5f"     % self._costas_alpha
         print "M&M symbol sync gain = %.5f"  % self._gain_mu
         print "M&M symbol sync mu = %.5f"    % self._mu
         print "M&M omega relative limit = %.5f" % self._omega_relative_limit
@@ -320,27 +322,27 @@
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.pre_scaler,
-                         gr.file_sink(gr.sizeof_gr_complex, "prescaler.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"rx_prescaler.dat"))
         self._fg.connect(self.agc,
-                         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"))
-        self._fg.connect((self.costas_loop,1),
-                         gr.file_sink(gr.sizeof_gr_complex, 
"costas_error.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, "rx_agc.dat"))
+#        self._fg.connect(self.costas_loop,
+#                         gr.file_sink(gr.sizeof_gr_complex, 
"rx_costas_loop.dat"))
+#        self._fg.connect((self.costas_loop,1),
+#                         gr.file_sink(gr.sizeof_gr_complex, 
"rx_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, 
"rx_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, 
"rx_clock_recovery.dat"))
         self._fg.connect((self.clock_recovery,1),
-                        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, 
"rx_clock_recovery_error.dat"))
         self._fg.connect(self.slicer,
-                         gr.file_sink(gr.sizeof_char, "slicer.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_slicer.dat"))
+#        self._fg.connect(self.diffdec,
+#                         gr.file_sink(gr.sizeof_char, "rx_diffdec.dat"))      
  
         self._fg.connect(self.symbol_mapper,
-                         gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_gray_decoder.dat"))
         self._fg.connect(self.unpack,
-                         gr.file_sink(gr.sizeof_char, "unpack.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_unpack.dat"))
 
     def add_options(parser):
         """
@@ -364,7 +366,7 @@
         Given command line options, create dictionary suitable for passing to 
__init__
         """
         return modulation_utils.extract_kwargs_from_options(
-            dqpsk_demod.__init__, ('self', 'fg'), options)
+            d8psk_demod.__init__, ('self', 'fg'), options)
     extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
 
 
@@ -372,4 +374,4 @@
 # Add these to the mod/demod registry
 #
 modulation_utils.add_type_1_mod('d8psk', d8psk_mod)
-#modulation_utils.add_type_1_demod('d8psk', d8psk_demod)
+modulation_utils.add_type_1_demod('d8psk', d8psk_demod)

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-12-16 07:26:48 UTC (rev 4098)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
       2006-12-16 07:53:19 UTC (rev 4099)
@@ -88,7 +88,7 @@
        ntaps = 11 * self._samples_per_symbol
 
         arity = pow(2,self.bits_per_symbol())
-       
+        
         # turn bytes into k-bit vectors
         self.bytes2chunks = \
           gr.packed_to_unpacked_bb(self.bits_per_symbol(), gr.GR_MSB_FIRST)
@@ -99,18 +99,18 @@
             self.symbol_mapper = gr.map_bb(psk.binary_to_ungray[arity])
 
         self.diffenc = gr.diff_encoder_bb(arity)
-        
+
+        print psk.constellation[arity]
         self.chunks2symbols = gr.chunks_to_symbols_bc(psk.constellation[arity])
 
         # pulse shaping filter
        self.rrc_taps = gr.firdes.root_raised_cosine(
-           self._samples_per_symbol, # gain  (samples_per_symbol since we're
-                                      # interpolating by samples_per_symbol)
-           self._samples_per_symbol, # sampling rate
-           1.0,                      # symbol rate
-           self._excess_bw,          # excess bandwidth (roll-off factor)
+           self._samples_per_symbol,   # gain (samples_per_symbol since we're
+                                        # interpolating by samples_per_symbol)
+           self._samples_per_symbol,   # sampling rate
+           1.0,                        # symbol rate
+           self._excess_bw,            # excess bandwidth (roll-off factor)
             ntaps)
-
        self.rrc_filter = gr.interp_fir_filter_ccf(self._samples_per_symbol,
                                                    self.rrc_taps)
 
@@ -162,15 +162,15 @@
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.bytes2chunks,
-                         gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat"))
         self._fg.connect(self.symbol_mapper,
-                         gr.file_sink(gr.sizeof_char, "graycoder.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_graycoder.dat"))
         self._fg.connect(self.diffenc,
-                         gr.file_sink(gr.sizeof_char, "diffenc.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_diffenc.dat"))
         self._fg.connect(self.chunks2symbols,
-                         gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_chunks2symbols.dat"))
         self._fg.connect(self.rrc_filter,
-                         gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_rrc_filter.dat"))
               
 
 # /////////////////////////////////////////////////////////////////////////////
@@ -299,7 +299,7 @@
             self._fg.connect(self.pre_scaler, self.agc,
                              self.rrc_filter, self.clock_recovery, 
self.diffdec,
                              self.slicer, self.symbol_mapper, self.unpack)
-
+        self._fg.connect(self.agc, gr.file_sink(gr.sizeof_gr_complex, 
"dbpsk_in.dat"))
         gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
 
     def samples_per_symbol(self):
@@ -373,7 +373,6 @@
         return modulation_utils.extract_kwargs_from_options(
                  dbpsk_demod.__init__, ('self', 'fg'), options)
     extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
-
 #
 # Add these to the mod/demod registry
 #

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-12-16 07:26:48 UTC (rev 4098)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
       2006-12-16 07:53:19 UTC (rev 4099)
@@ -40,8 +40,8 @@
 _def_log = False
 
 _def_costas_alpha = None
-_def_gain_mu = 0.03
-_def_mu = 0.05
+_def_gain_mu = 0.01
+_def_mu = 0.00
 _def_omega_relative_limit = 0.005
 
 
@@ -140,15 +140,15 @@
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.bytes2chunks,
-                         gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_bytes2chunks.dat"))
         self._fg.connect(self.symbol_mapper,
-                         gr.file_sink(gr.sizeof_char, "graycoder.dat"))
+                         gr.file_sink(gr.sizeof_char, "tx_graycoder.dat"))
         self._fg.connect(self.diffenc,
-                         gr.file_sink(gr.sizeof_char, "diffenc.dat"))        
+                         gr.file_sink(gr.sizeof_char, "tx_diffenc.dat"))       
 
         self._fg.connect(self.chunks2symbols,
-                         gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_chunks2symbols.dat"))
         self._fg.connect(self.rrc_filter,
-                         gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"tx_rrc_filter.dat"))
 
     def add_options(parser):
         """
@@ -234,7 +234,6 @@
         # Automatic gain control
         scale = (1.0/16384.0)
         self.pre_scaler = gr.multiply_const_cc(scale)   # scale the signal 
from full-range to +-1
-        #self.agc = gr.agc2_cc(0.6e-1, 1e-3, 1, 1, 100)
         self.agc = gr.feedforward_agc_cc(16, 1.0)
        
         # Costas loop (carrier tracking)
@@ -266,14 +265,12 @@
                                                     self._mu, self._gain_mu,
                                                     self._omega_relative_limit)
 
-        self.diffdec = gr.diff_phasor_cc()
-        #self.diffdec = gr.diff_decoder_bb(arity)
+        self.diffdec = gr.diff_decoder_bb(arity)
 
         # find closest constellation point
         rot = 1
-        #rot = .707 + .707j
+        rot = .707 + .707j
         rotated_const = map(lambda pt: pt * rot, psk.constellation[arity])
-        #print "rotated_const = %s" % rotated_const
 
         self.slicer = gr.constellation_decoder_cb(rotated_const, range(arity))
 
@@ -281,7 +278,6 @@
             self.symbol_mapper = gr.map_bb(psk.gray_to_binary[arity])
         else:
             self.symbol_mapper = gr.map_bb(psk.ungray_to_binary[arity])
-
         
         # unpack the k bit vector into a stream of bits
         self.unpack = gr.unpack_k_bits_bb(self.bits_per_symbol())
@@ -295,7 +291,7 @@
         # Connect & Initialize base class
         self._fg.connect(self.pre_scaler, self.agc, self.costas_loop,
                          self.rrc_filter, self.clock_recovery,
-                         self.diffdec, self.slicer, self.symbol_mapper,
+                         self.slicer, self.diffdec, self.symbol_mapper,
                          self.unpack)
         gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack)
 
@@ -319,27 +315,27 @@
     def _setup_logging(self):
         print "Modulation logging turned on."
         self._fg.connect(self.pre_scaler,
-                         gr.file_sink(gr.sizeof_gr_complex, "prescaler.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, 
"rx_prescaler.dat"))
         self._fg.connect(self.agc,
-                         gr.file_sink(gr.sizeof_gr_complex, "agc.dat"))
+                         gr.file_sink(gr.sizeof_gr_complex, "rx_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, 
"rx_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, 
"rx_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, 
"rx_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, 
"rx_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, 
"rx_clock_recovery_error.dat"))
         self._fg.connect(self.diffdec,
-                         gr.file_sink(gr.sizeof_gr_complex, "diffdec.dat"))    
    
+                         gr.file_sink(gr.sizeof_char, "rx_diffdec.dat"))       
 
         self._fg.connect(self.slicer,
-                         gr.file_sink(gr.sizeof_char, "slicer.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_slicer.dat"))
         self._fg.connect(self.symbol_mapper,
-                         gr.file_sink(gr.sizeof_char, "gray_decoder.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_gray_decoder.dat"))
         self._fg.connect(self.unpack,
-                         gr.file_sink(gr.sizeof_char, "unpack.dat"))
+                         gr.file_sink(gr.sizeof_char, "rx_unpack.dat"))
 
     def add_options(parser):
         """

Modified: 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/psk.py
===================================================================
--- 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/psk.py
 2006-12-16 07:26:48 UTC (rev 4098)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/psk.py
 2006-12-16 07:53:19 UTC (rev 4099)
@@ -73,7 +73,7 @@
 # identity mapping
 binary_to_ungray = {
     2 : range(2),
-    4 : range(4),
+    4 : range(4), #[0, 1, 3, 2],
     8 : range(8)
     }
     





reply via email to

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