diff options
Diffstat (limited to 'gr-digital/examples/narrowband/digital_bert_rx.py')
-rw-r--r--[-rwxr-xr-x] | gr-digital/examples/narrowband/digital_bert_rx.py | 56 |
1 files changed, 30 insertions, 26 deletions
diff --git a/gr-digital/examples/narrowband/digital_bert_rx.py b/gr-digital/examples/narrowband/digital_bert_rx.py index c04c76762f..aaa8b3e9ea 100755..100644 --- a/gr-digital/examples/narrowband/digital_bert_rx.py +++ b/gr-digital/examples/narrowband/digital_bert_rx.py @@ -20,6 +20,10 @@ # Boston, MA 02110-1301, USA. # +from __future__ import print_function +from __future__ import division +from __future__ import unicode_literals + from gnuradio import gr, eng_notation from optparse import OptionParser from gnuradio.eng_option import eng_option @@ -44,8 +48,8 @@ class status_thread(_threading.Thread): def run(self): while not self.done: - print "Freq. Offset: {0:5.0f} Hz Timing Offset: {1:10.1f} ppm Estimated SNR: {2:4.1f} dB BER: {3:g}".format( - tb.frequency_offset(), tb.timing_offset()*1e6, tb.snr(), tb.ber()) + print("Freq. Offset: {0:5.0f} Hz Timing Offset: {1:10.1f} ppm Estimated SNR: {2:4.1f} dB BER: {3:g}".format( + tb.frequency_offset(), tb.timing_offset()*1e6, tb.snr(), tb.ber())) try: time.sleep(1.0) except KeyboardInterrupt: @@ -63,10 +67,10 @@ class bert_receiver(gr.hier_block2): gr.hier_block2.__init__(self, "bert_receive", gr.io_signature(1, 1, gr.sizeof_gr_complex), # Input signature gr.io_signature(0, 0, 0)) # Output signature - + self._bitrate = bitrate - self._demod = digital.generic_demod(constellation, differential, + self._demod = digital.generic_demod(constellation, differential, samples_per_symbol, gray_coded, excess_bw, freq_bw, timing_bw, phase_bw, @@ -77,15 +81,15 @@ class bert_receiver(gr.hier_block2): # Add an SNR probe on the demodulated constellation self._snr_probe = digital.probe_mpsk_snr_est_c(digital.SNR_EST_M2M4, 1000, - alpha=10.0/self._symbol_rate) + alpha=10.0 / self._symbol_rate) self.connect(self._demod.time_recov, self._snr_probe) - + # Descramble BERT sequence. A channel error will create 3 incorrect bits self._descrambler = digital.descrambler_bb(0x8A, 0x7F, 7) # CCSDS 7-bit descrambler # Measure BER by the density of 0s in the stream - self._ber = digital.probe_density_b(1.0/self._symbol_rate) - + self._ber = digital.probe_density_b(1.0 / self._symbol_rate) + self.connect(self, self._demod, self._descrambler, self._ber) def frequency_offset(self): @@ -98,22 +102,22 @@ class bert_receiver(gr.hier_block2): return self._snr_probe.snr() def ber(self): - return (1.0-self._ber.density())/3.0 + return (1.0-self._ber.density()) / 3.0 class rx_psk_block(gr.top_block): def __init__(self, demod, options): - gr.top_block.__init__(self, "rx_mpsk") + gr.top_block.__init__(self, "rx_mpsk") self._demodulator_class = demod # Get demod_kwargs demod_kwargs = self._demodulator_class.extract_kwargs_from_options(options) - + # demodulator - self._demodulator = self._demodulator_class(**demod_kwargs) + self._demodulator = self._demodulator_class(**demod_kwargs) if(options.rx_freq is not None): symbol_rate = options.bitrate / self._demodulator.bits_per_symbol() @@ -131,17 +135,17 @@ class rx_psk_block(gr.top_block): # Create the BERT receiver self._receiver = bert_receiver(options.bitrate, - self._demodulator._constellation, + self._demodulator._constellation, options.samples_per_symbol, - options.differential, - options.excess_bw, + options.differential, + options.excess_bw, gray_coded=True, freq_bw=options.freq_bw, timing_bw=options.timing_bw, phase_bw=options.phase_bw, verbose=options.verbose, log=options.log) - + self.connect(self._source, self._receiver) def snr(self): @@ -149,7 +153,7 @@ class rx_psk_block(gr.top_block): def mag(self): return self._receiver.signal_mean() - + def var(self): return self._receiver.noise_variance() @@ -158,19 +162,19 @@ class rx_psk_block(gr.top_block): def frequency_offset(self): return self._receiver.frequency_offset() - + def timing_offset(self): return self._receiver.timing_offset() - + def get_options(demods): parser = OptionParser(option_class=eng_option, conflict_handler="resolve") parser.add_option("","--from-file", default=None, help="input file of samples to demod") - parser.add_option("-m", "--modulation", type="choice", choices=demods.keys(), + parser.add_option("-m", "--modulation", type="choice", choices=list(demods.keys()), default='psk', help="Select modulation from: %s [default=%%default]" - % (', '.join(demods.keys()),)) + % (', '.join(list(demods.keys())),)) parser.add_option("-r", "--bitrate", type="eng_float", default=250e3, help="Select modulation bit rate (default=%default)") parser.add_option("-S", "--samples-per-symbol", type="float", default=2, @@ -184,14 +188,14 @@ def get_options(demods): uhd_receiver.add_options(parser) demods = digital.modulation_utils.type_1_demods() - for mod in demods.values(): + for mod in list(demods.values()): mod.add_options(parser) - + (options, args) = parser.parse_args() if len(args) != 0: parser.print_help() sys.exit(1) - + return (options, args) @@ -203,8 +207,8 @@ if __name__ == "__main__": demod = demods[options.modulation] tb = rx_psk_block(demod, options) - print "\n*** SNR estimator is inaccurate below about 7dB" - print "*** BER estimator is inaccurate above about 10%\n" + print("\n*** SNR estimator is inaccurate below about 7dB") + print("*** BER estimator is inaccurate above about 10%\n") updater = status_thread(tb) try: |