Revision b53bc139 gnuradio-core/src/python/gnuradio/blks2impl/dqpsk2.py
| b/gnuradio-core/src/python/gnuradio/blks2impl/dqpsk2.py | ||
|---|---|---|
| 25 | 25 |
differential QPSK modulation and demodulation. |
| 26 | 26 |
""" |
| 27 | 27 |
|
| 28 |
from gnuradio import gr, gru, modulation_utils |
|
| 28 |
from gnuradio import gr, gru, modulation_utils2
|
|
| 29 | 29 |
from math import pi, sqrt |
| 30 | 30 |
import psk |
| 31 | 31 |
import cmath |
| ... | ... | |
| 39 | 39 |
_def_log = False |
| 40 | 40 |
|
| 41 | 41 |
_def_freq_alpha = 0.010 |
| 42 |
_def_costas_alpha = 0.01
|
|
| 42 |
_def_phase_alpha = 0.01
|
|
| 43 | 43 |
_def_timing_alpha = 0.100 |
| 44 | 44 |
_def_timing_beta = 0.010 |
| 45 | 45 |
_def_timing_max_dev = 1.5 |
| ... | ... | |
| 168 | 168 |
""" |
| 169 | 169 |
Given command line options, create dictionary suitable for passing to __init__ |
| 170 | 170 |
""" |
| 171 |
return modulation_utils.extract_kwargs_from_options(dqpsk2_mod.__init__, |
|
| 171 |
return modulation_utils2.extract_kwargs_from_options(dqpsk2_mod.__init__,
|
|
| 172 | 172 |
('self',), options)
|
| 173 | 173 |
extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) |
| 174 | 174 |
|
| ... | ... | |
| 185 | 185 |
samples_per_symbol=_def_samples_per_symbol, |
| 186 | 186 |
excess_bw=_def_excess_bw, |
| 187 | 187 |
freq_alpha=_def_freq_alpha, |
| 188 |
costas_alpha=_def_costas_alpha,
|
|
| 188 |
phase_alpha=_def_phase_alpha,
|
|
| 189 | 189 |
timing_alpha=_def_timing_alpha, |
| 190 | 190 |
timing_max_dev=_def_timing_max_dev, |
| 191 | 191 |
gray_code=_def_gray_code, |
| ... | ... | |
| 204 | 204 |
@type excess_bw: float |
| 205 | 205 |
@param freq_alpha: loop filter gain for frequency recovery |
| 206 | 206 |
@type freq_alpha: float |
| 207 |
@param costas_alpha: loop filter gain
|
|
| 208 |
@type costas_alphas: float
|
|
| 207 |
@param phase_alpha: loop filter gain
|
|
| 208 |
@type phase_alphas: float
|
|
| 209 | 209 |
@param timing_alpha: timing loop alpha gain |
| 210 | 210 |
@type timing_alpha: float |
| 211 | 211 |
@param timing_max: timing loop maximum rate deviations |
| ... | ... | |
| 230 | 230 |
self._excess_bw = excess_bw |
| 231 | 231 |
self._freq_alpha = freq_alpha |
| 232 | 232 |
self._freq_beta = 0.25*self._freq_alpha**2 |
| 233 |
self._costas_alpha = costas_alpha
|
|
| 233 |
self._phase_alpha = phase_alpha
|
|
| 234 | 234 |
self._timing_alpha = timing_alpha |
| 235 | 235 |
self._timing_beta = _def_timing_beta |
| 236 | 236 |
self._timing_max_dev=timing_max_dev |
| ... | ... | |
| 264 | 264 |
|
| 265 | 265 |
|
| 266 | 266 |
# Perform phase / fine frequency correction |
| 267 |
self._costas_beta = 0.25 * self._costas_alpha * self._costas_alpha
|
|
| 267 |
self._phase_beta = 0.25 * self._phase_alpha * self._phase_alpha
|
|
| 268 | 268 |
# Allow a frequency swing of +/- half of the sample rate |
| 269 | 269 |
fmin = -0.5 |
| 270 | 270 |
fmax = 0.5 |
| 271 | 271 |
|
| 272 |
self.phase_recov = gr.costas_loop_cc(self._costas_alpha,
|
|
| 273 |
self._costas_beta,
|
|
| 272 |
self.phase_recov = gr.costas_loop_cc(self._phase_alpha,
|
|
| 273 |
self._phase_beta,
|
|
| 274 | 274 |
fmax, fmin, arity) |
| 275 | 275 |
|
| 276 | 276 |
|
| ... | ... | |
| 315 | 315 |
print "Gray code: %s" % self._gray_code |
| 316 | 316 |
print "RRC roll-off factor: %.2f" % self._excess_bw |
| 317 | 317 |
print "FLL gain: %.2f" % self._freq_alpha |
| 318 |
print "Costas Loop alpha: %.2e" % self._costas_alpha |
|
| 319 |
print "Costas Loop beta: %.2e" % self._costas_beta |
|
| 320 | 318 |
print "Timing alpha gain: %.2f" % self._timing_alpha |
| 321 | 319 |
print "Timing beta gain: %.2f" % self._timing_beta |
| 322 | 320 |
print "Timing max dev: %.2f" % self._timing_max_dev |
| 321 |
print "Phase track alpha: %.2e" % self._phase_alpha |
|
| 322 |
print "Phase track beta: %.2e" % self._phase_beta |
|
| 323 | 323 |
|
| 324 | 324 |
def _setup_logging(self): |
| 325 | 325 |
print "Modulation logging turned on." |
| ... | ... | |
| 342 | 342 |
|
| 343 | 343 |
def add_options(parser): |
| 344 | 344 |
""" |
| 345 |
Adds modulation-specific options to the standard parser |
|
| 345 |
Adds DQPSK demodulation-specific options to the standard parser
|
|
| 346 | 346 |
""" |
| 347 | 347 |
parser.add_option("", "--excess-bw", type="float", default=_def_excess_bw,
|
| 348 | 348 |
help="set RRC excess bandwith factor [default=%default] (PSK)") |
| ... | ... | |
| 351 | 351 |
help="disable gray coding on modulated bits (PSK)") |
| 352 | 352 |
parser.add_option("", "--freq-alpha", type="float", default=_def_freq_alpha,
|
| 353 | 353 |
help="set frequency lock loop alpha gain value [default=%default] (PSK)") |
| 354 |
parser.add_option("", "--costas-alpha", type="float", default=_def_costas_alpha,
|
|
| 355 |
help="set Costas loop alpha value [default=%default] (PSK)")
|
|
| 356 |
parser.add_option("", "--gain-alpha", type="float", default=_def_timing_alpha,
|
|
| 354 |
parser.add_option("", "--phase-alpha", type="float", default=_def_phase_alpha,
|
|
| 355 |
help="set phase tracking loop alpha value [default=%default] (PSK)")
|
|
| 356 |
parser.add_option("", "--timing-alpha", type="float", default=_def_timing_alpha,
|
|
| 357 | 357 |
help="set timing symbol sync loop gain alpha value [default=%default] (GMSK/PSK)") |
| 358 |
parser.add_option("", "--gain-beta", type="float", default=_def_timing_beta,
|
|
| 358 |
parser.add_option("", "--timing-beta", type="float", default=_def_timing_beta,
|
|
| 359 | 359 |
help="set timing symbol sync loop gain beta value [default=%default] (GMSK/PSK)") |
| 360 | 360 |
parser.add_option("", "--timing-max-dev", type="float", default=_def_timing_max_dev,
|
| 361 | 361 |
help="set timing symbol sync loop maximum deviation [default=%default] (GMSK/PSK)") |
| ... | ... | |
| 365 | 365 |
""" |
| 366 | 366 |
Given command line options, create dictionary suitable for passing to __init__ |
| 367 | 367 |
""" |
| 368 |
return modulation_utils.extract_kwargs_from_options( |
|
| 368 |
return modulation_utils2.extract_kwargs_from_options(
|
|
| 369 | 369 |
dqpsk2_demod.__init__, ('self',), options)
|
| 370 | 370 |
extract_kwargs_from_options=staticmethod(extract_kwargs_from_options) |
| 371 | 371 |
|
| ... | ... | |
| 373 | 373 |
# |
| 374 | 374 |
# Add these to the mod/demod registry |
| 375 | 375 |
# |
| 376 |
modulation_utils.add_type_1_mod('dqpsk2', dqpsk2_mod)
|
|
| 377 |
modulation_utils.add_type_1_demod('dqpsk2', dqpsk2_demod)
|
|
| 376 |
modulation_utils2.add_type_1_mod('dqpsk2', dqpsk2_mod)
|
|
| 377 |
modulation_utils2.add_type_1_demod('dqpsk2', dqpsk2_demod)
|
|
Also available in: Unified diff