commit-gnuradio
[Top][All Lists]
Advanced

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

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


From: trondeau
Subject: [Commit-gnuradio] r3577 - gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl
Date: Mon, 18 Sep 2006 20:58:59 -0600 (MDT)

Author: trondeau
Date: 2006-09-18 20:58:59 -0600 (Mon, 18 Sep 2006)
New Revision: 3577

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/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
Log:
work in progress

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-19 01:42:09 UTC (rev 3576)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/bpsk.py
        2006-09-19 02:58:59 UTC (rev 3577)
@@ -38,7 +38,7 @@
 
 class bpsk_mod(gr.hier_block):
 
-    def __init__(self, fg, spb, excess_bw, gray_code=True, verbose=True, 
debug=False):
+    def __init__(self, fg, spb, excess_bw=0.35, gray_code=True, verbose=True, 
debug=False):
         """
        Hierarchical block for RRC-filtered BPSK modulation.
 
@@ -92,14 +92,14 @@
 
        # Connect and Initialize base class
         self.fg.connect(self.bytes2chunks, self.chunks2symbols, 
self.rrc_filter)
-       gr.hier_block.__init__(self, self.fg, self.bytes2chunks, 
self.rrc_filter)
+       gr.hier_block.__init__(self, self._fg, self.bytes2chunks, 
self.rrc_filter)
 
     def samples_per_symbol(self):
-        return self.spb
+        return self._samples_per_symbol
 
-    def bits_per_baud(self=None):   # staticmethod that's also callable on an 
instance
+    def bits_per_symbol(self=None):   # staticmethod that's also callable on 
an instance
         return 1
-    bits_per_baud = staticmethod(bits_per_baud)      # make it a static 
method.  RTFM
+    bits_per_symbol = staticmethod(bits_per_symbol)      # make it a static 
method.  RTFM
 
     def verbose(self):
         print "bits per symbol = %d" % self.bits_per_baud()
@@ -107,17 +107,20 @@
 
     def debug(self):
         print "Modulation debugging turned on."
-        self.fg.connect(self.bytes2chunks,
-                        gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
-        self.fg.connect(self.chunks2symbols,
-                        gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
-        self.fg.connect(self.rrc_filter,
-                        gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
+        self._fg.connect(self.bytes2chunks,
+                         gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
+        self._fg.connect(self.chunks2symbols,
+                         gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
+        self._fg.connect(self.rrc_filter,
+                         gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
 
-    def arguments(self=None):
-        args = {'spb':2, 'excess_bw':0.3, 'gray_code':True, 'verbose':True, 
'debug':False}
-        return args
-    arguments = staticmethod(arguments)
+    def extract_kwargs_from_options(options):
+        """
+        Given command line options, create dictionary suitable for passing to 
__init__
+        """
+        return modulation_utils.extract_kwargs_from_options(
+                 bpsk_demod.__init__, ('self', 'fg'), options)
+    extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
 
     def add_options(parser):
         """
@@ -125,7 +128,7 @@
         """
         from optparse import OptionConflictError
         try:
-            parser.add_option("", "--excess-bw", type="float", default=0.3,
+            parser.add_option("", "--excess-bw", type="float", default=0.35,
                               help="set RRC excess bandwith factor 
[default=%default]")
             parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
                               help="Don't use gray coding on modulated bits 
[default=%default]")
@@ -135,7 +138,8 @@
 
 
 class bpsk_demod__coherent_detection_of_psk(gr.hier_block):
-    def __init__(self, fg, spb, excess_bw=0.35, costas_alpha=0.005, 
gain_mu=0.05, mu=0.5,
+    def __init__(self, fg, samples_per_symbol, excess_bw=0.35, 
costas_alpha=0.05,
+                 gain_mu=0.03, mu=0.05, omega_relative_limit=0.5,
                  gray_code=True, verbose=True, debug=False):
         """
        Hierarchical block for RRC-filtered BPSK demodulation
@@ -145,7 +149,7 @@
 
        @param fg: flow graph
        @type fg: flow graph
-       @param spb: samples per baud >= 2
+       @param spb: samples per symbol >= 2
        @type spb: float
        @param excess_bw: Root-raised cosine filter excess bandwidth
        @type excess_bw: float
@@ -161,11 +165,13 @@
         @type debug: bool
        """
 
-        self.fg = fg
-        self.spb = spb
-        self.excess_bw = excess_bw
-        self.costas_alpha = costas_alpha
-        self.gain_mu = gain_mu
+        self._fg = fg
+        self._samples_per_symbol = _samples_per_symbol
+        self._excess_bw = excess_bw
+        self._costas_alpha = costas_alpha
+        self._gain_mu = gain_mu
+        self._mu = mu
+        self._omega_relative_limit = omega_relative_limit
 
         if spb < 2:
             raise TypeError, "sbp must be >= 2"
@@ -179,29 +185,26 @@
         # Costas loop (carrier tracking)
         # FIXME: need to decide how to handle this more generally; do we pull 
it from higher layer?
         costas_order = 2
-        self.costas_alpha *= 15   # 2nd order loop needs more gain
-        beta = .25 * costas_alpha * costas_alpha
-        self.costas_loop = gr.costas_loop_cc(self.costas_alpha, beta, 0.05, 
-0.05, costas_order)
+        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)
 
         # RRC data filter
         ntaps = 11 * spb
         self.rrc_taps = gr.firdes.root_raised_cosine(
-            1.0,                # gain 
-            spb,                # sampling rate
-            1.0,                # symbol rate
-            self.excess_bw,     # excess bandwidth (roll-off factor)
+            1.0,                 # gain 
+            samples_per_symbol,  # sampling rate
+            1.0,                 # symbol rate
+            self.excess_bw,      # excess bandwidth (roll-off factor)
             ntaps)
 
         self.rrc_filter=gr.fir_filter_ccf(1, self.rrc_taps)
 
         # symbol clock recovery
-        omega = spb
+        omega = _samples_per_symbol
         gain_omega = .25 * gain_mu * gain_mu
-        omega_rel_limit = 0.5
-        mu = 0.05
-        self.gain_mu = 0.1
         self.clock_recovery=gr.clock_recovery_mm_cc(omega, gain_omega,
-                                                    mu, self.gain_mu, 
omega_rel_limit)
+                                                    self._mu, self._gain_mu,
+                                                    self._omega_rel_limit)
 
         # find closest constellation point
         #rot = .707 + .707j
@@ -222,64 +225,66 @@
             self.debug()
 
         # Connect and Initialize base class
-        self.fg.connect(self.preamp, self.agc, self.costas_loop, 
self.rrc_filter, \
-                        self.clock_recovery, self.slicer, self.gray_decoder, 
self.unpack)
+        self._fg.connect(self.preamp, 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)
 
     def samples_per_symbol(self):
-        return self.spb
+        return self._samples_per_symbol
 
-    def bits_per_baud(self=None):   # staticmethod that's also callable on an 
instance
+    def bits_per_symbol(self=None):   # staticmethod that's also callable on 
an instance
         return 1
-    bits_per_baud = staticmethod(bits_per_baud)      # make it a static 
method.  RTFM
+    bits_per_symbol = staticmethod(bits_per_symbol)      # make it a static 
method.  RTFM
 
     def verbose(self):
-        print "bits per symbol = %d"         % self.bits_per_baud()
-        print "RRC roll-off factor = %.2f"   % self.excess_bw
-        print "Costas Loop alpha = %.5f"     % self.costas_alpha
-        print "M&M symbol sync gain  = %.5f" % self.gain_mu
+        print "bits per symbol = %d"        % self._samples_per_symbol
+        print "RRC roll-off factor = %.2f"  % self._excess_bw
+        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
 
     def debug(self):
-        print "Modulation debugging turned on."
-        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.rrc_filter,
-                        gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
-        self.fg.connect(self.clock_recovery,
-                        gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.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"))
-        self.fg.connect(self.unpack,
-                        gr.file_sink(gr.sizeof_char, "unpack.dat"))
+        print "Modulation logging turned on."
+        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.rrc_filter,
+                         gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
+        self._fg.connect(self.clock_recovery,
+                         gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.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"))
+        self._fg.connect(self.unpack,
+                         gr.file_sink(gr.sizeof_char, "unpack.dat"))
 
-    def arguments(self=None):
-        args = {'spb':2, 'excess_bw':0.3, 'costas_alpha':0.005, 
'gain_mu':0.05, 'mu':0.5,
-                'gray_code':True, 'verbose':True, 'debug':False}
-        return args
-    arguments = staticmethod(arguments)
+    def extract_kwargs_from_options(options):
+        """
+        Given command line options, create dictionary suitable for passing to 
__init__
+        """
+        return modulation_utils.extract_kwargs_from_options(
+                 bpsk_demod.__init__, ('self', 'fg'), options)
+    extract_kwargs_from_options=staticmethod(extract_kwargs_from_options)
 
     def add_options(parser):
         """
-        Adds modulation-specific options to the standard parser
+        Adds BPSK-specific options to the standard parser
         """
-        from optparse import OptionConflictError
-        try:
-            parser.add_option("", "--excess-bw", type="float", default=0.3,
-                              help="set RRC excess bandwith factor 
[default=%default]")
-            parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
-                              help="Don't use gray coding on modulated bits 
[default=%default]")
-            parser.add_option("", "--costas-alpha", type="float", 
default=0.005,
-                              help="set Costas loop alpha value 
[default=%default]")
-            parser.add_option("", "--gain-mu", type="float", default=0.05,
-                              help="set M&M symbol sync loop gain mu value 
[default=%default]")
-            parser.add_option("", "--mu", type="float", default=0.5,
-                              help="set M&M symbol sync loop mu value 
[default=%default]")
-        except OptionConflictError:
-            pass
+        parser.add_option("", "--excess-bw", type="float", default=0.3,
+                          help="set RRC excess bandwith factor 
[default=%default]")
+        parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
+                          help="Don't use gray coding on modulated bits 
[default=%default]")
+        parser.add_option("", "--costas-alpha", type="float", default=0.005,
+                          help="set Costas loop alpha value 
[default=%default]")
+        parser.add_option("", "--gain-mu", type="float", default=0.05,
+                          help="set M&M symbol sync loop gain mu value 
[default=%default] (GMSK/PSK)")
+        parser.add_option("", "--mu", type="float", default=0.5,
+                          help="set M&M symbol sync loop mu value 
[default=%default] (GMSK/PSK)")
+        parser.add_option("", "--omega-relative-limit", type="float", 
default=0.0002,
+                          help="M&M clock recovery omega relative limit 
[default=%default] (GMSK/PSK)")
     add_options=staticmethod(add_options)
     
 bpsk_demod = bpsk_demod__coherent_detection_of_psk

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-19 01:42:09 UTC (rev 3576)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py
       2006-09-19 02:58:59 UTC (rev 3577)
@@ -39,9 +39,9 @@
 
 class dbpsk_mod(gr.hier_block):
     def __init__(self, fg, samples_per_symbol=2, excess_bw=0.35,
-                 gray_code=True, verbose=True, debug=False):
+                 gray_code=True, verbose=True, log=False):
         """
-       Hierarchical block for RRC-filtered QPSK modulation.
+       Hierarchical block for RRC-filtered differential BPSK modulation.
 
        The input is a byte stream (unsigned char) and the
        output is the complex modulated signal at baseband.
@@ -56,8 +56,8 @@
         @type gray_code: bool
         @param verbose: Print information about modulator?
         @type verbose: bool
-        @param debug: Log modulation data to files?
-        @type debug: bool
+        @param log: Log modulation data to files?
+        @type log: bool
        """
 
         self._fg = fg
@@ -103,7 +103,7 @@
         if verbose:
             self._print_verbage()
             
-        if debug:
+        if log:
             self._setup_logging()
             
        # Initialize base class
@@ -121,7 +121,7 @@
         Adds DBPSK modulation-specific options to the standard parser
         """
         from optparse import OptionConflictError
-        parser.add_option("", "--excess-bw", type="float", default=0.3,
+        parser.add_option("", "--excess-bw", type="float", default=0.35,
                           help="set RRC excess bandwith factor 
[default=%default]")
         parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
                           help="Don't use gray coding on modulated bits 
[default=%default]")
@@ -161,25 +161,29 @@
 # /////////////////////////////////////////////////////////////////////////////
 
 class dbpsk_demod(gr.hier_block):
-    def __init__(self, fg, samples_per_symbol, excess_bw=0.35,
-                 costas_alpha=0.005, gain_mu=0.05, mu=0.5,
-                 gray_code=True, verbose=True, debug=False):
+    def __init__(self, fg, samples_per_symbol, excess_bw=0.35, 
costas_alpha=0.05,
+                 gain_mu=0.03, mu=0.05, omega_relative_limit=0.5,
+                 gray_code=True, verbose=True, log=False):
         """
-       Hierarchical block for RRC-filtered dBPSK demodulation
+       Hierarchical block for RRC-filtered differential BPSK demodulation
 
        The input is the complex modulated signal at baseband.
        The output is a stream of bits packed 1 bit per byte (LSB)
 
        @param fg: flow graph
        @type fg: flow graph
-       @param samples_per_symbol: samples per baud >= 2
+       @param samples_per_symbol: samples per symbol >= 2
        @type samples_per_symbol: float
        @param excess_bw: Root-raised cosine filter excess bandwidth
        @type excess_bw: float
         @param costas_alpha: loop filter gain
         @type costas_alphas: float
-        @param gain_mu:
+        @param gain_mu: for M&M block
         @type gain_mu: float
+        @param mu: for M&M block
+        @type mu: float
+        @param omega_relative_limit: for M&M block
+        @type omega_relative_limit: float
         @param gray_code: Tell modulator to Gray code the bits
         @type gray_code: bool
         @param verbose: Print information about modulator?
@@ -193,6 +197,8 @@
         self._excess_bw = excess_bw
         self._costas_alpha = costas_alpha
         self._gain_mu = gain_mu
+        self._mu = mu
+        self._omega_relative_limit = omega_relative_limit
         
         if samples_per_symbol < 2:
             raise TypeError, "samples_per_symbol must be >= 2, is %r" % 
(samples_per_symbol,)
@@ -206,8 +212,7 @@
         # Costas loop (carrier tracking)
         # FIXME: need to decide how to handle this more generally; do we pull 
it from higher layer?
         costas_order = 2
-        self._costas_alpha *= 15   # 2nd order loop needs more gain
-        beta = .25 * costas_alpha * costas_alpha
+        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)
 
         # RRC data filter
@@ -224,11 +229,9 @@
         # symbol clock recovery
         omega = self._samples_per_symbol
         gain_omega = .25 * self._gain_mu * self._gain_mu
-        omega_rel_limit = 0.5
-        mu = 0.05
         self.clock_recovery=gr.clock_recovery_mm_cc(omega, gain_omega,
-                                                    mu, self._gain_mu,
-                                                    omega_rel_limit)
+                                                    self._mu, self._gain_mu,
+                                                    self._omega_relative_limit)
 
         # find closest constellation point
         #rot = .707 + .707j
@@ -248,8 +251,8 @@
         if verbose:
             self._print_verbage()
 
-        if debug:
-            self._enable_logging()
+        if log:
+            self._setup_logging()
 
         # Connect and Initialize base class
         self._fg.connect(self.preamp, self.agc, self.costas_loop, 
self.rrc_filter, self.clock_recovery,
@@ -294,16 +297,18 @@
         """
         Adds DBPSK demodulation-specific options to the standard parser
         """
-        parser.add_option("", "--excess-bw", type="float", default=0.3,
+        parser.add_option("", "--excess-bw", type="float", default=0.35,
                           help="set RRC excess bandwith factor 
[default=%default] (PSK)")
         parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
                           help="Don't use gray coding on modulated bits 
[default=%default] (PSK)")
         parser.add_option("", "--costas-alpha", type="float", default=0.005,
                           help="set Costas loop alpha value [default=%default] 
(PSK)")
         parser.add_option("", "--gain-mu", type="float", default=0.05,
-                          help="set M&M symbol sync loop gain mu value 
[default=%default] (PSK)")
+                          help="set M&M symbol sync loop gain mu value 
[default=%default] (GMSK/PSK)")
         parser.add_option("", "--mu", type="float", default=0.5,
-                          help="set M&M symbol sync loop mu value 
[default=%default] (PSK)")
+                          help="set M&M symbol sync loop mu value 
[default=%default] (GMSK/PSK)")
+        parser.add_option("", "--omega-relative-limit", type="float", 
default=0.0002,
+                          help="M&M clock recovery omega relative limit 
[default=%default] (GMSK/PSK)")
     add_options=staticmethod(add_options)
     
     def extract_kwargs_from_options(options):

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-19 01:42:09 UTC (rev 3576)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py
       2006-09-19 02:58:59 UTC (rev 3577)
@@ -39,7 +39,7 @@
 class dqpsk_mod(gr.hier_block):
 
     def __init__(self, fg, samples_per_symbol=2, excess_bw=0.35,
-                 gray_code=True, verbose=True, debug=False):
+                 gray_code=True, verbose=True, log=False):
         """
        Hierarchical block for RRC-filtered QPSK modulation.
 
@@ -86,18 +86,18 @@
 
         # pulse shaping filter
        self.rrc_taps = gr.firdes.root_raised_cosine(
-           samples_per_symbol, # gain  (samples_per_symbol since we're 
interpolating by samples_per_symbol)
+           1.0,                # gain  (samples_per_symbol since we're 
interpolating by samples_per_symbol)
             samples_per_symbol, # sampling rate
             1.0,               # symbol rate
             excess_bw,          # excess bandwidth (roll-off factor)
             ntaps)
 
-       self.rrc_filter = gr.interp_fir_filter_ccf(samples_per_symbol, 
self.rrc_taps)
+       self.rrc_filter = gr.interp_fir_filter_ccf(1, self.rrc_taps)
 
         if verbose:
             self._print_verbage()
         
-        if debug:
+        if log:
             self._setup_logging()
             
        # Connect & Initialize base class
@@ -118,22 +118,22 @@
 
     def _setup_logging(self):
         print "Modulation logging turned on."
-        self.fg.connect(self.bytes2chunks,
-                        gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
-        self.fg.connect(self.gray_coder,
-                        gr.file_sink(gr.sizeof_char, "graycoder.dat"))
-        self.fg.connect(self.diffenc,
-                        gr.file_sink(gr.sizeof_char, "diffenc.dat"))        
-        self.fg.connect(self.chunks2symbols,
-                        gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
-        self.fg.connect(self.rrc_filter,
-                        gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
+        self._fg.connect(self.bytes2chunks,
+                         gr.file_sink(gr.sizeof_char, "bytes2chunks.dat"))
+        self._fg.connect(self.gray_coder,
+                         gr.file_sink(gr.sizeof_char, "graycoder.dat"))
+        self._fg.connect(self.diffenc,
+                         gr.file_sink(gr.sizeof_char, "diffenc.dat"))        
+        self._fg.connect(self.chunks2symbols,
+                         gr.file_sink(gr.sizeof_gr_complex, 
"chunks2symbols.dat"))
+        self._fg.connect(self.rrc_filter,
+                         gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat"))
 
     def add_options(parser):
         """
         Adds QPSK modulation-specific options to the standard parser
         """
-        parser.add_option("", "--excess-bw", type="float", default=0.3,
+        parser.add_option("", "--excess-bw", type="float", default=0.35,
                           help="set RRC excess bandwith factor 
[default=%default] (PSK)")
         parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
                           help="Don't use gray coding on modulated bits 
[default=%default] (PSK)")
@@ -156,9 +156,9 @@
 # /////////////////////////////////////////////////////////////////////////////
 
 class dqpsk_demod(gr.hier_block):
-    def __init__(self, fg, samples_per_symbol, excess_bw=0.35,
-                 costas_alpha=0.005, gain_mu=0.05, mu=0.5,
-                 gray_code=True, verbose=True, debug=False):
+    def __init__(self, fg, samples_per_symbol, excess_bw=0.35, 
costas_alpha=0.05,
+                 gain_mu=0.03, mu=0.05, omega_relative_limit=0.5,
+                 gray_code=True, verbose=True, log=False):
         """
        Hierarchical block for RRC-filtered DQPSK demodulation
 
@@ -173,8 +173,12 @@
        @type excess_bw: float
         @param costas_alpha: loop filter gain
         @type costas_alphas: float
-        @param gain_mu:
+        @param gain_mu: for M&M block
         @type gain_mu: float
+        @param mu: for M&M block
+        @type mu: float
+        @param omega_relative_limit: for M&M block
+        @type omega_relative_limit: float
         @param gray_code: Tell modulator to Gray code the bits
         @type gray_code: bool
         @param verbose: Print information about modulator?
@@ -188,6 +192,8 @@
         self._excess_bw = excess_bw
         self._costas_alpha = costas_alpha
         self._gain_mu = gain_mu
+        self._mu = mu
+        self._omega_relative_limit = omega_relative_limit
 
         if samples_per_symbol < 2:
             raise TypeError, "sbp must be >= 2, is %d" % samples_per_symbol
@@ -218,12 +224,9 @@
         # symbol clock recovery
         omega = samples_per_symbol
         gain_omega = .25 * gain_mu * gain_mu
-        omega_rel_limit = 0.5
-        mu = 0.05
-        gain_mu = 0.1
         self.clock_recovery=gr.clock_recovery_mm_cc(omega, gain_omega,
-                                                    mu, self._gain_mu,
-                                                    omega_rel_limit)
+                                                    self._mu, self._gain_mu,
+                                                    self._omega_relative_limit)
 
         # find closest constellation point
         #rot = .707 + .707j
@@ -243,7 +246,7 @@
         if verbose:
             self._print_verbage()
         
-        if debug:
+        if log:
             self._setup_logging()
  
         # Connect & Initialize base class
@@ -266,31 +269,31 @@
 
     def _setup_logging(self):
         print "Modulation logging turned on."
-        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.rrc_filter,
-                        gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
-        self.fg.connect(self.clock_recovery,
-                        gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.dat"))
-        self.fg.connect(self.diffdec,
-                        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"))
-        self.fg.connect(self.unpack,
-                        gr.file_sink(gr.sizeof_char, "unpack.dat"))
-        self.fg.connect((self.costas_loop,1),
-                        gr.file_sink(gr.sizeof_gr_complex, "costas.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.rrc_filter,
+                         gr.file_sink(gr.sizeof_gr_complex, "rrc.dat"))
+        self._fg.connect(self.clock_recovery,
+                         gr.file_sink(gr.sizeof_gr_complex, 
"clock_recovery.dat"))
+        self._fg.connect(self.diffdec,
+                         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"))
+        self._fg.connect(self.unpack,
+                         gr.file_sink(gr.sizeof_char, "unpack.dat"))
+        self._fg.connect((self.costas_loop,1),
+                         gr.file_sink(gr.sizeof_gr_complex, "costas.dat"))
 
 
     def add_options(parser):
         """
         Adds modulation-specific options to the standard parser
         """
-        parser.add_option("", "--excess-bw", type="float", default=0.3,
+        parser.add_option("", "--excess-bw", type="float", default=0.35,
                           help="set RRC excess bandwith factor 
[default=%default] (PSK)")
         parser.add_option("", "--no-gray-code", action="store_false", 
default=True,
                           help="Don't use gray coding on modulated bits 
[default=%default] (PSK)")

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-19 01:42:09 UTC (rev 3576)
+++ 
gnuradio/branches/developers/trondeau/digital-wip/gnuradio-core/src/python/gnuradio/blksimpl/gmsk.py
        2006-09-19 02:58:59 UTC (rev 3577)
@@ -37,7 +37,7 @@
 
 class gmsk_mod(gr.hier_block):
 
-    def __init__(self, fg, samples_per_symbol=2, bt=0.3, verbose=True, 
debug=False):
+    def __init__(self, fg, samples_per_symbol=2, bt=0.35, verbose=True, 
log=False):
         """
        Hierarchical block for Gaussian Minimum Shift Key (GMSK)
        modulation.
@@ -73,10 +73,10 @@
        # Form Gaussian filter
         # Generate Gaussian response (Needs to be convolved with window below).
        self.gaussian_taps = gr.firdes.gaussian(
-               1,              # gain
-               samples_per_symbol,            # symbol_rate
-               bt,             # bandwidth * symbol time
-               ntaps           # number of taps
+               1,                     # gain
+               samples_per_symbol,    # symbol_rate
+               bt,                    # bandwidth * symbol time
+               ntaps                  # number of taps
                )
 
        self.sqwave = (1,) * samples_per_symbol       # rectangular window
@@ -89,7 +89,7 @@
         if verbose:
             self._print_verbage()
          
-        if debug:
+        if log:
             self._setup_logging()
 
        # Connect & Initialize base class
@@ -123,7 +123,7 @@
         """
         Adds GMSK modulation-specific options to the standard parser
         """
-        parser.add_option("", "--bt", type="float", default=0.3,
+        parser.add_option("", "--bt", type="float", default=0.35,
                           help="set bandwidth-time product [default=%default] 
(GMSK)")
     add_options=staticmethod(add_options)
 
@@ -144,9 +144,10 @@
 
 class gmsk_demod(gr.hier_block):
 
-    def __init__(self, fg, samples_per_symbol=2, omega=None, gain_mu=0.03, 
mu=0.5,
+    def __init__(self, fg, samples_per_symbol=2,
+                 omega=None, gain_mu=0.03, mu=0.5,
                  omega_relative_limit=0.000200, freq_error=0.0,
-                 verbose=True, debug=False):
+                 verbose=True, log=False):
         """
        Hierarchical block for Gaussian Minimum Shift Key (GMSK)
        demodulation.
@@ -160,8 +161,8 @@
        @type samples_per_symbol: integer
         @param verbose: Print information about modulator?
         @type verbose: bool
-        @param debug: Print modualtion data to files?
-        @type debug: bool 
+        @param log: Print modualtion data to files?
+        @type log: bool 
 
         Clock recovery parameters.  These all have reasonble defaults.
         
@@ -213,7 +214,7 @@
         if verbose:
             self._print_verbage()
          
-        if debug:
+        if log:
             self._setup_logging()
 
        # Connect & Initialize base class
@@ -255,11 +256,11 @@
         parser.add_option("", "--omega", type="float", default=None,
                           help="M&M clock recovery omega [default=%default] 
(GMSK)")
         parser.add_option("", "--gain-mu", type="float", default=0.03,
-                          help="M&M clock recovery gain mu [default=%default] 
(GMSK)")
+                          help="M&M clock recovery gain mu [default=%default] 
(GMSK/PSK)")
         parser.add_option("", "--mu", type="float", default=0.5,
-                          help="M&M clock recovery mu [default=%default] 
(GMSK)")
+                          help="M&M clock recovery mu [default=%default] 
(GMSK/PSK)")
         parser.add_option("", "--omega-relative-limit", type="float", 
default=0.0002,
-                          help="M&M clock recovery omega relative limit 
[default=%default] (GMSK)")
+                          help="M&M clock recovery omega relative limit 
[default=%default] (GMSK/PSK)")
         parser.add_option("", "--freq-error", type="float", default=0.0,
                           help="M&M clock recovery frequency error 
[default=%default] (GMSK)")
     add_options=staticmethod(add_options)





reply via email to

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