diff options
author | trondeau | 2006-11-05 21:14:00 +0000 |
---|---|---|
committer | trondeau | 2006-11-05 21:14:00 +0000 |
commit | d09833bc3db07e18e245426f5d8fd20bfa3d0b67 (patch) | |
tree | b1c5609d1626f6f8a6cbdd6da0d3c792d4822d04 /gnuradio-core | |
parent | 6f41f8088e3548e25729a74b42ebe03b53e819ae (diff) | |
download | gnuradio-d09833bc3db07e18e245426f5d8fd20bfa3d0b67.tar.gz gnuradio-d09833bc3db07e18e245426f5d8fd20bfa3d0b67.tar.bz2 gnuradio-d09833bc3db07e18e245426f5d8fd20bfa3d0b67.zip |
merging from trondeau/digital-wip for improved dbpsk and dqpsk receivers
git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@3946 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-core')
-rw-r--r-- | gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py | 32 | ||||
-rw-r--r-- | gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py | 16 | ||||
-rw-r--r-- | gnuradio-core/src/python/gnuradio/packet_utils.py | 2 |
3 files changed, 31 insertions, 19 deletions
diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py b/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py index 7df4f240c..e0c0054a6 100644 --- a/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py +++ b/gnuradio-core/src/python/gnuradio/blksimpl/dbpsk.py @@ -39,7 +39,7 @@ _def_gray_code = True _def_verbose = False _def_log = False -_def_costas_alpha = 0.05 +_def_costas_alpha = 0.00 _def_gain_mu = 0.03 _def_mu = 0.05 _def_omega_relative_limit = 0.005 @@ -241,10 +241,12 @@ class dbpsk_demod(gr.hier_block): # 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.002, -0.002, costas_order) + # The Costas loop is not needed for BPSK, though it can help. Turn the Costas loop on + # by setting an alpha value of something greater than 0 (e.g., 0.1) + if self._costas_alpha > 0.0: + costas_order = 2 + beta = .25 * self._costas_alpha * self._costas_alpha + self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.002, -0.002, costas_order) # RRC data filter ntaps = 11 * self._samples_per_symbol @@ -289,9 +291,14 @@ class dbpsk_demod(gr.hier_block): self._setup_logging() # Connect and 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 self._costas_alpha > 0.0: # With Costas Loop + 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: # Without Costas Loop + self._fg.connect(self.pre_scaler, self.agc, + self.rrc_filter, self.clock_recovery, self.diffdec, + self.slicer, self.symbol_mapper, self.unpack) gr.hier_block.__init__(self, self._fg, self.pre_scaler, self.unpack) @@ -317,10 +324,11 @@ class dbpsk_demod(gr.hier_block): gr.file_sink(gr.sizeof_gr_complex, "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")) + if self._costas_alpha > 0.0: + 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")) self._fg.connect(self.rrc_filter, gr.file_sink(gr.sizeof_gr_complex, "rrc_filter.dat")) self._fg.connect(self.clock_recovery, diff --git a/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py b/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py index 3b60f2242..88b3f1e73 100644 --- a/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py +++ b/gnuradio-core/src/python/gnuradio/blksimpl/dqpsk.py @@ -39,7 +39,7 @@ _def_gray_code = True _def_verbose = False _def_log = False -_def_costas_alpha = 0.10 +_def_costas_alpha = 0.0 _def_gain_mu = 0.03 _def_mu = 0.05 _def_omega_relative_limit = 0.005 @@ -238,11 +238,15 @@ class dqpsk_demod(gr.hier_block): self.agc = gr.feedforward_agc_cc(16, 1.0) # Costas loop (carrier tracking) - # FIXME: need to decide how to handle this more generally; do we pull it from higher layer? - costas_order = 4 - beta = .25 * self._costas_alpha * self._costas_alpha - #self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.1, -0.1, costas_order) - self.costas_loop = gr.costas_loop_cc(self._costas_alpha, beta, 0.002, -0.002, costas_order) + if self._costas_alpha == 0.0: # If no alpha value was specified by the user + alpha_dir = {2:0.075, 3:0.075, 4:0.105, 5:0.105, 6:0.125, 7:0.130} + self._costas_alpha = alpha_dir[self._samples_per_symbol] + + costas_order = 4 + # The value of beta is now set to be overdamped; 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 = .15 * 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 diff --git a/gnuradio-core/src/python/gnuradio/packet_utils.py b/gnuradio-core/src/python/gnuradio/packet_utils.py index 1dab48ab4..59b135366 100644 --- a/gnuradio-core/src/python/gnuradio/packet_utils.py +++ b/gnuradio-core/src/python/gnuradio/packet_utils.py @@ -72,7 +72,7 @@ def conv_1_0_string_to_packed_binary_string(s): 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') + conv_packed_binary_string_to_1_0_string('\x6C\xC6\x6C\xC6\x6C\xC6\x6C\xC6') def is_1_0_string(s): if not isinstance(s, str): |