def __init__(self, ebn0_db=3.3, spread_factor=2**10, tailbiting=True): gr.top_block.__init__(self, "LECIM DSSS TxRx BER test") Qt.QWidget.__init__(self) self.setWindowTitle("LECIM DSSS TxRx BER test") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "dsss_sim_perfekt_sync_fg") self.restoreGeometry(self.settings.value("geometry").toByteArray()) self._lock = threading.RLock() ################################################## # Parameters ################################################## self.ebn0_db = ebn0_db self.spread_factor = spread_factor self.tailbiting = tailbiting ################################################## # Variables ################################################## self.cc_poly = cc_poly = [121, 91] self.pdu_size = pdu_size = 32 self.noise = noise = ( np.sqrt(1 * spread_factor / 10**(ebn0_db / 10.0)) * 1.0) self.len_tag_var = len_tag_var = "packet_len" self.cc_encoder_terminated = cc_encoder_terminated = map( (lambda a: fec.cc_encoder_make(32 * 8, 7, 2, (cc_poly), 0, fec. CC_TERMINATED, True)), range(0, 1)) self.cc_encoder_tailbiting = cc_encoder_tailbiting = map( (lambda a: fec.cc_encoder_make(32 * 8, 7, 2, (cc_poly), 0, fec. CC_TAILBITING, False)), range(0, 1)) self.cc_decoder_terminated = cc_decoder_terminated = map( (lambda a: fec.cc_decoder.make(32 * 8, 7, 2, (cc_poly), 0, -1, fec. CC_TERMINATED, True)), range(0, 1)) self.cc_decoder_tailbiting = cc_decoder_tailbiting = map( (lambda a: fec.cc_decoder.make(32 * 8, 7, 2, (cc_poly), 0, -1, fec. CC_TAILBITING, False)), range(0, 1)) ################################################## # Blocks ################################################## self.qtgui_number_sink_0_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0_0.set_update_time(0.10) self.qtgui_number_sink_0_0.set_title("BER") labels = ['', '', '', '', '', '', '', '', '', ''] units = ['', '', '', '', '', '', '', '', '', ''] colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")] factor = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in xrange(1): self.qtgui_number_sink_0_0.set_min(i, -1) self.qtgui_number_sink_0_0.set_max(i, 1) self.qtgui_number_sink_0_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0_0.set_label(i, labels[i]) self.qtgui_number_sink_0_0.set_unit(i, units[i]) self.qtgui_number_sink_0_0.set_factor(i, factor[i]) self.qtgui_number_sink_0_0.enable_autoscale(False) self._qtgui_number_sink_0_0_win = sip.wrapinstance( self.qtgui_number_sink_0_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_0_win) self.probe_ber_running = blocks.probe_signal_f() self.lpwan_dsss_spreading_bb_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, 123456, False, 0, 0) self.lpwan_dsss_normalize_ff_0 = lpwan.dsss_normalize_ff(len_tag_var) self.lpwan_dsss_interleaver_bb_0 = lpwan.dsss_interleaver_bb( len_tag_var) self.lpwan_dsss_diff_decoding_ff_0 = lpwan.dsss_diff_decoding_ff( len_tag_var, False, 0) self.lpwan_dsss_diff_coding_bb_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.lpwan_dsss_despread_simple_cc_0 = lpwan.dsss_despread_simple_cc( len_tag_var, spread_factor, 123456, False, 0, 0) self.lpwan_dsss_deinterleaver_ff_0 = lpwan.dsss_deinterleaver_ff( len_tag_var) self.fec_extended_tagged_encoder_0 = fec.extended_tagged_encoder( encoder_obj_list=cc_encoder_tailbiting if tailbiting else cc_encoder_terminated, puncpat='11', lentagname=len_tag_var, mtu=32) self.fec_extended_tagged_decoder_0 = self.fec_extended_tagged_decoder_0 = fec_extended_tagged_decoder_0 = fec.extended_tagged_decoder( decoder_obj_list=cc_decoder_tailbiting if tailbiting else cc_decoder_terminated, ann=None, puncpat='11', integration_period=10000, lentagname=len_tag_var, mtu=32) self.fec_ber_running = fec.ber_bf(False, 100, -7.0) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( ([-1, 1]), 1) self.blocks_stream_to_tagged_stream_0 = blocks.stream_to_tagged_stream( gr.sizeof_char, 1, pdu_size, len_tag_var) self.blocks_repack_bits_bb_0_0 = blocks.repack_bits_bb( 1, 8, len_tag_var, False, gr.GR_LSB_FIRST) self.blocks_repack_bits_bb_0 = blocks.repack_bits_bb( 8, 1, len_tag_var, False, gr.GR_LSB_FIRST) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_0 = blocks.add_vcc(1) (self.blocks_add_xx_0).set_min_output_buffer(2097152) self.analog_random_source_x_0 = blocks.vector_source_b( map(int, numpy.random.randint(0, 256, 10000000)), True) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, noise, rnd.randint(0, 10000)) ################################################## # Connections ################################################## self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.analog_random_source_x_0, 0), (self.blocks_stream_to_tagged_stream_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.lpwan_dsss_despread_simple_cc_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.lpwan_dsss_deinterleaver_ff_0, 0)) self.connect((self.blocks_repack_bits_bb_0, 0), (self.fec_extended_tagged_encoder_0, 0)) self.connect((self.blocks_repack_bits_bb_0_0, 0), (self.fec_ber_running, 1)) self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.blocks_repack_bits_bb_0, 0)) self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.fec_ber_running, 0)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.fec_ber_running, 0), (self.probe_ber_running, 0)) self.connect((self.fec_ber_running, 0), (self.qtgui_number_sink_0_0, 0)) self.connect((self.fec_extended_tagged_decoder_0, 0), (self.blocks_repack_bits_bb_0_0, 0)) self.connect((self.fec_extended_tagged_encoder_0, 0), (self.lpwan_dsss_interleaver_bb_0, 0)) self.connect((self.lpwan_dsss_deinterleaver_ff_0, 0), (self.lpwan_dsss_normalize_ff_0, 0)) self.connect((self.lpwan_dsss_despread_simple_cc_0, 0), (self.lpwan_dsss_diff_decoding_ff_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0, 0), (self.lpwan_dsss_spreading_bb_0, 0)) self.connect((self.lpwan_dsss_diff_decoding_ff_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.lpwan_dsss_interleaver_bb_0, 0), (self.lpwan_dsss_diff_coding_bb_0, 0)) self.connect((self.lpwan_dsss_normalize_ff_0, 0), (self.fec_extended_tagged_decoder_0, 0)) self.connect((self.lpwan_dsss_spreading_bb_0, 0), (self.digital_chunks_to_symbols_xx_0, 0))
def __init__(self, chiprate=2000000, data_seed_tx=2645625, fec_tailbiting=True, ovsf_code_index=0, ovsf_spreading_factor=0, preamble_len=32, preamble_seed_tx=54321, psdu_len=16, roll_off=1, sfd_present=False, spread_factor=2**10, sps=4): gr.top_block.__init__(self, "LECIM DSSS tx") Qt.QWidget.__init__(self) self.setWindowTitle("LECIM DSSS tx") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "tx") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.chiprate = chiprate self.data_seed_tx = data_seed_tx self.fec_tailbiting = fec_tailbiting self.ovsf_code_index = ovsf_code_index self.ovsf_spreading_factor = ovsf_spreading_factor self.preamble_len = preamble_len self.preamble_seed_tx = preamble_seed_tx self.psdu_len = psdu_len self.roll_off = roll_off self.sfd_present = sfd_present self.spread_factor = spread_factor self.sps = sps ################################################## # Variables ################################################## self.sfd = sfd = lpwan.dsss_const.sfd32 if preamble_len == 32 else lpwan.dsss_const.sfd16 self.preamble = preamble = lpwan.dsss_const.preamble32 if preamble_len == 32 else lpwan.dsss_const.preamble16 self.taps_num = taps_num = 32 self.shr = shr = np.append(preamble, sfd) if sfd_present else preamble self.len_tag_var = len_tag_var = "packet_len" ################################################## # Blocks ################################################## self.lpwan_dsss_spreading_bb_0_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, preamble_seed_tx, True, ovsf_code_index, ovsf_spreading_factor) self.lpwan_dsss_spreading_bb_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, data_seed_tx, False, ovsf_code_index, ovsf_spreading_factor) self.lpwan_dsss_interleaver_bb_0 = lpwan.dsss_interleaver_bb( len_tag_var) self.lpwan_dsss_diff_coding_bb_0_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.lpwan_dsss_diff_coding_bb_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.dsss_oqpsk_mod_0_0 = dsss_oqpsk_mod( burst_tag="burst", num_of_taps=taps_num, packet_length=(psdu_len * 8 * 2 + len(shr)) * spread_factor, roll_off=roll_off, sps=sps, ) self.dsss_fec_enc_b_0_0 = dsss_fec_enc_b( len_tag_var=len_tag_var, tailbiting=fec_tailbiting, ) self.digital_crc32_async_bb_0 = digital.crc32_async_bb(False) self.blocks_vector_source_x_0_0 = blocks.vector_source_b( shr.tolist(), True, 1, [ gr.tag_utils.python_to_tag( (0, pmt.intern(len_tag_var), pmt.from_long(len(shr)))) ]) self.blocks_stream_mux_0 = blocks.stream_mux( gr.sizeof_char * 1, (len(shr) * spread_factor, psdu_len * 2 * 8 * spread_factor)) self.blocks_random_pdu_0 = blocks.random_pdu(psdu_len - 4, psdu_len - 4, chr(0xFF), 1) self.blocks_message_strobe_0 = blocks.message_strobe( pmt.intern("generate"), 50) self.blocks_file_sink_0 = blocks.file_sink( gr.sizeof_gr_complex * 1, '/Users/victorguipont/Developpement-informatique/GNU-radio/sf1024', False) self.blocks_file_sink_0.set_unbuffered(False) ################################################## # Connections ################################################## self.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.blocks_random_pdu_0, 'generate')) self.msg_connect((self.blocks_random_pdu_0, 'pdus'), (self.digital_crc32_async_bb_0, 'in')) self.msg_connect((self.digital_crc32_async_bb_0, 'out'), (self.dsss_fec_enc_b_0_0, 'in')) self.connect((self.blocks_stream_mux_0, 0), (self.dsss_oqpsk_mod_0_0, 0)) self.connect((self.blocks_vector_source_x_0_0, 0), (self.lpwan_dsss_diff_coding_bb_0_0, 0)) self.connect((self.dsss_fec_enc_b_0_0, 0), (self.lpwan_dsss_interleaver_bb_0, 0)) self.connect((self.dsss_oqpsk_mod_0_0, 0), (self.blocks_file_sink_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0, 0), (self.lpwan_dsss_spreading_bb_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0_0, 0), (self.lpwan_dsss_spreading_bb_0_0, 0)) self.connect((self.lpwan_dsss_interleaver_bb_0, 0), (self.lpwan_dsss_diff_coding_bb_0, 0)) self.connect((self.lpwan_dsss_spreading_bb_0, 0), (self.blocks_stream_mux_0, 1)) self.connect((self.lpwan_dsss_spreading_bb_0_0, 0), (self.blocks_stream_mux_0, 0))
def __init__(self, chiprate=2000000, data_seed_rx=2345432, data_seed_tx=2345432, fec_tailbiting=True, max_freq_hypo=2, ovsf_code_index=0, ovsf_spreading_factor=0, preamble_len=32, preamble_seed_rx=54321, preamble_seed_tx=54321, psdu_len=32, roll_off=1, sfd_present=False, spread_factor=2**10, sps=4): gr.top_block.__init__(self, "my personal playground") Qt.QWidget.__init__(self) self.setWindowTitle("my personal playground") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "playground") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Parameters ################################################## self.chiprate = chiprate self.data_seed_rx = data_seed_rx self.data_seed_tx = data_seed_tx self.fec_tailbiting = fec_tailbiting self.max_freq_hypo = max_freq_hypo self.ovsf_code_index = ovsf_code_index self.ovsf_spreading_factor = ovsf_spreading_factor self.preamble_len = preamble_len self.preamble_seed_rx = preamble_seed_rx self.preamble_seed_tx = preamble_seed_tx self.psdu_len = psdu_len self.roll_off = roll_off self.sfd_present = sfd_present self.spread_factor = spread_factor self.sps = sps ################################################## # Variables ################################################## self.sfd = sfd = lpwan.dsss_const.sfd32 if preamble_len == 32 else lpwan.dsss_const.sfd16 self.preamble = preamble = lpwan.dsss_const.preamble32 if preamble_len == 32 else lpwan.dsss_const.preamble16 self.taps_num_0 = taps_num_0 = 64 self.taps_num = taps_num = 64 self.shr = shr = np.append(preamble, sfd) if sfd_present else preamble self.len_tag_var = len_tag_var = "packet_len" self.freq_vec = freq_vec = lpwan.dsss_const.gen_freq_hypo_vec( spread_factor, chiprate, max_freq_hypo) ################################################## # Blocks ################################################## self.root_raised_cosine_filter_0 = filter.fir_filter_ccf( 1, firdes.root_raised_cosine(1, sps, 1, 1, taps_num)) self.qtgui_time_sink_x_3_0 = qtgui.time_sink_f( 1024000, #size 1, #samp_rate "", #name 2 #number of inputs ) self.qtgui_time_sink_x_3_0.set_update_time(0.10) self.qtgui_time_sink_x_3_0.set_y_axis(-1, 2e6) self.qtgui_time_sink_x_3_0.set_y_label('Amplitude', "") self.qtgui_time_sink_x_3_0.enable_tags(-1, True) self.qtgui_time_sink_x_3_0.set_trigger_mode(qtgui.TRIG_MODE_AUTO, qtgui.TRIG_SLOPE_POS, 200, 40000, 0, "PSDU") self.qtgui_time_sink_x_3_0.enable_autoscale(True) self.qtgui_time_sink_x_3_0.enable_grid(False) self.qtgui_time_sink_x_3_0.enable_axis_labels(True) self.qtgui_time_sink_x_3_0.enable_control_panel(True) if not True: self.qtgui_time_sink_x_3_0.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "green", "black", "cyan", "magenta", "yellow", "dark red", "dark green", "blue" ] styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(2): if len(labels[i]) == 0: self.qtgui_time_sink_x_3_0.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_time_sink_x_3_0.set_line_label(i, labels[i]) self.qtgui_time_sink_x_3_0.set_line_width(i, widths[i]) self.qtgui_time_sink_x_3_0.set_line_color(i, colors[i]) self.qtgui_time_sink_x_3_0.set_line_style(i, styles[i]) self.qtgui_time_sink_x_3_0.set_line_marker(i, markers[i]) self.qtgui_time_sink_x_3_0.set_line_alpha(i, alphas[i]) self._qtgui_time_sink_x_3_0_win = sip.wrapinstance( self.qtgui_time_sink_x_3_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_time_sink_x_3_0_win) self.qtgui_number_sink_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0.set_update_time(0.10) self.qtgui_number_sink_0.set_title("") labels = ['', '', '', '', '', '', '', '', '', ''] units = ['', '', '', '', '', '', '', '', '', ''] colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")] factor = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in xrange(1): self.qtgui_number_sink_0.set_min(i, 0) self.qtgui_number_sink_0.set_max(i, 1) self.qtgui_number_sink_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0.set_label(i, labels[i]) self.qtgui_number_sink_0.set_unit(i, units[i]) self.qtgui_number_sink_0.set_factor(i, factor[i]) self.qtgui_number_sink_0.enable_autoscale(False) self._qtgui_number_sink_0_win = sip.wrapinstance( self.qtgui_number_sink_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_win) self.qtgui_const_sink_x_1 = qtgui.const_sink_c( 256, #size "", #name 1 #number of inputs ) self.qtgui_const_sink_x_1.set_update_time(0.10) self.qtgui_const_sink_x_1.set_y_axis(-2, 2) self.qtgui_const_sink_x_1.set_x_axis(-2, 2) self.qtgui_const_sink_x_1.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, "") self.qtgui_const_sink_x_1.enable_autoscale(True) self.qtgui_const_sink_x_1.enable_grid(False) self.qtgui_const_sink_x_1.enable_axis_labels(True) if not True: self.qtgui_const_sink_x_1.disable_legend() labels = ['', '', '', '', '', '', '', '', '', ''] widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] colors = [ "blue", "red", "red", "red", "red", "red", "red", "red", "red", "red" ] styles = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] markers = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0] alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0] for i in xrange(1): if len(labels[i]) == 0: self.qtgui_const_sink_x_1.set_line_label( i, "Data {0}".format(i)) else: self.qtgui_const_sink_x_1.set_line_label(i, labels[i]) self.qtgui_const_sink_x_1.set_line_width(i, widths[i]) self.qtgui_const_sink_x_1.set_line_color(i, colors[i]) self.qtgui_const_sink_x_1.set_line_style(i, styles[i]) self.qtgui_const_sink_x_1.set_line_marker(i, markers[i]) self.qtgui_const_sink_x_1.set_line_alpha(i, alphas[i]) self._qtgui_const_sink_x_1_win = sip.wrapinstance( self.qtgui_const_sink_x_1.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_const_sink_x_1_win) self.lpwan_message_counter_0 = lpwan.message_counter(0, 1) self.lpwan_dsss_spreading_bb_0_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, preamble_seed_tx, True, ovsf_code_index, ovsf_spreading_factor) self.lpwan_dsss_spreading_bb_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, data_seed_tx, False, ovsf_code_index, ovsf_spreading_factor) self.lpwan_dsss_preamble_search_cc_0 = lpwan.dsss_preamble_search_cc( spread_factor, preamble_seed_rx, ovsf_code_index, ovsf_spreading_factor, (freq_vec), preamble_len, sfd_present, sps, 0, chiprate, "oqpsk", (firdes.root_raised_cosine(1, sps, 1, roll_off, taps_num))) self.lpwan_dsss_normalize_ff_0 = lpwan.dsss_normalize_ff(len_tag_var) self.lpwan_dsss_interleaver_bb_0 = lpwan.dsss_interleaver_bb( len_tag_var) self.lpwan_dsss_filter_crc_packets_0 = lpwan.dsss_filter_crc_packets() self.lpwan_dsss_diff_decoding_ff_0 = lpwan.dsss_diff_decoding_ff( len_tag_var, True, len(shr)) self.lpwan_dsss_diff_coding_bb_0_0_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.lpwan_dsss_diff_coding_bb_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.lpwan_dsss_despread_cc_0 = lpwan.dsss_despread_cc( spread_factor, data_seed_rx, preamble_seed_rx, ovsf_code_index, ovsf_spreading_factor, sps, psdu_len, 1, chiprate, False, True, 1, 0.05, 0.8, 0.5) self.lpwan_dsss_deinterleaver_ff_0_0 = lpwan.dsss_deinterleaver_ff( len_tag_var) self.foo_periodic_msg_source_0 = foo.periodic_msg_source( pmt.intern("Hello World!"), 20, 200, True, False) self.dsss_oqpsk_mod_0 = dsss_oqpsk_mod( burst_tag="burst", num_of_taps=taps_num, packet_length=(psdu_len * 8 * 2 + len(shr)) * spread_factor, roll_off=roll_off, sps=sps, ) self.dsss_fec_enc_b_0_0 = dsss_fec_enc_b( len_tag_var=len_tag_var, tailbiting=fec_tailbiting, ) self.dsss_fec_dec_fb_0 = dsss_fec_dec_fb( len_tag_var=len_tag_var, tailbiting=fec_tailbiting, ) self.digital_crc32_async_bb_1_0 = digital.crc32_async_bb(False) self.digital_crc32_async_bb_1 = digital.crc32_async_bb(True) self.digital_crc32_async_bb_0 = digital.crc32_async_bb(False) self.blocks_vector_source_x_0_0 = blocks.vector_source_b( shr.tolist(), True, 1, [ gr.tag_utils.python_to_tag( (0, pmt.intern(len_tag_var), pmt.from_long(len(shr)))) ]) self.blocks_tagged_stream_to_pdu_0 = blocks.tagged_stream_to_pdu( blocks.complex_t, 'packet_len') self.blocks_tag_gate_1 = blocks.tag_gate(gr.sizeof_gr_complex * 1, False) self.blocks_tag_gate_0 = blocks.tag_gate(gr.sizeof_gr_complex * 1, False) self.blocks_stream_mux_0 = blocks.stream_mux( gr.sizeof_char * 1, (len(shr) * spread_factor, psdu_len * 2 * 8 * spread_factor)) self.blocks_random_pdu_0 = blocks.random_pdu(psdu_len - 4, psdu_len - 4, chr(0xFF), 1) self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream( blocks.complex_t, 'packet_len') self.blocks_null_sink_1_0_0 = blocks.null_sink(gr.sizeof_gr_complex * 1) self.blocks_message_debug_0 = blocks.message_debug() self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_complex_to_mag_0_0 = blocks.complex_to_mag(1) self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1) self.blocks_add_xx_0 = blocks.add_vcc(1) self.analog_noise_source_x_0_0 = analog.noise_source_c( analog.GR_GAUSSIAN, 1, 213) ################################################## # Connections ################################################## self.msg_connect((self.blocks_random_pdu_0, 'pdus'), (self.digital_crc32_async_bb_0, 'in')) self.msg_connect((self.blocks_tagged_stream_to_pdu_0, 'pdus'), (self.lpwan_dsss_filter_crc_packets_0, 'in_soft')) self.msg_connect((self.digital_crc32_async_bb_0, 'out'), (self.dsss_fec_enc_b_0_0, 'in')) self.msg_connect((self.digital_crc32_async_bb_1, 'out'), (self.blocks_message_debug_0, 'print_pdu')) self.msg_connect((self.digital_crc32_async_bb_1, 'out'), (self.digital_crc32_async_bb_1_0, 'in')) self.msg_connect((self.digital_crc32_async_bb_1, 'out'), (self.lpwan_message_counter_0, 'in')) self.msg_connect( (self.digital_crc32_async_bb_1_0, 'out'), (self.lpwan_dsss_filter_crc_packets_0, 'in_hard_crc_ok')) self.msg_connect((self.dsss_fec_dec_fb_0, 'out'), (self.digital_crc32_async_bb_1, 'in')) self.msg_connect((self.dsss_fec_dec_fb_0, 'out'), (self.lpwan_dsss_filter_crc_packets_0, 'in_hard')) self.msg_connect((self.foo_periodic_msg_source_0, 'out'), (self.blocks_random_pdu_0, 'generate')) self.msg_connect((self.lpwan_dsss_filter_crc_packets_0, 'out_soft'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.connect((self.analog_noise_source_x_0_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.blocks_add_xx_0, 0), (self.root_raised_cosine_filter_0, 0)) self.connect((self.blocks_complex_to_mag_0, 0), (self.qtgui_time_sink_x_3_0, 0)) self.connect((self.blocks_complex_to_mag_0_0, 0), (self.qtgui_time_sink_x_3_0, 1)) self.connect((self.blocks_complex_to_real_0, 0), (self.lpwan_dsss_deinterleaver_ff_0_0, 0)) self.connect((self.blocks_pdu_to_tagged_stream_0, 0), (self.qtgui_const_sink_x_1, 0)) self.connect((self.blocks_stream_mux_0, 0), (self.dsss_oqpsk_mod_0, 0)) self.connect((self.blocks_tag_gate_0, 0), (self.blocks_complex_to_mag_0, 0)) self.connect((self.blocks_tag_gate_1, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_vector_source_x_0_0, 0), (self.lpwan_dsss_diff_coding_bb_0_0_0, 0)) self.connect((self.dsss_fec_enc_b_0_0, 0), (self.lpwan_dsss_interleaver_bb_0, 0)) self.connect((self.dsss_oqpsk_mod_0, 0), (self.blocks_tag_gate_1, 0)) self.connect((self.lpwan_dsss_deinterleaver_ff_0_0, 0), (self.lpwan_dsss_normalize_ff_0, 0)) self.connect((self.lpwan_dsss_despread_cc_0, 0), (self.lpwan_dsss_diff_decoding_ff_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0, 0), (self.lpwan_dsss_spreading_bb_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0_0_0, 0), (self.lpwan_dsss_spreading_bb_0_0, 0)) self.connect((self.lpwan_dsss_diff_decoding_ff_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.lpwan_dsss_diff_decoding_ff_0, 0), (self.blocks_tagged_stream_to_pdu_0, 0)) self.connect((self.lpwan_dsss_interleaver_bb_0, 0), (self.lpwan_dsss_diff_coding_bb_0, 0)) self.connect((self.lpwan_dsss_normalize_ff_0, 0), (self.dsss_fec_dec_fb_0, 0)) self.connect((self.lpwan_dsss_preamble_search_cc_0, 0), (self.blocks_complex_to_mag_0_0, 0)) self.connect((self.lpwan_dsss_preamble_search_cc_0, 1), (self.blocks_null_sink_1_0_0, 0)) self.connect((self.lpwan_dsss_preamble_search_cc_0, 1), (self.blocks_tag_gate_0, 0)) self.connect((self.lpwan_dsss_preamble_search_cc_0, 0), (self.lpwan_dsss_despread_cc_0, 0)) self.connect((self.lpwan_dsss_spreading_bb_0, 0), (self.blocks_stream_mux_0, 1)) self.connect((self.lpwan_dsss_spreading_bb_0_0, 0), (self.blocks_stream_mux_0, 0)) self.connect((self.lpwan_message_counter_0, 0), (self.qtgui_number_sink_0, 0)) self.connect((self.root_raised_cosine_filter_0, 0), (self.lpwan_dsss_preamble_search_cc_0, 0))
def __init__(self): gr.top_block.__init__(self, "LECIM DSSS FEC Test") Qt.QWidget.__init__(self) self.setWindowTitle("LECIM DSSS FEC Test") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "fec_test") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.len_tag_var = len_tag_var = "len_tag" self.ebn0_db = ebn0_db = 3 ################################################## # Blocks ################################################## self.qtgui_number_sink_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0.set_update_time(0.10) self.qtgui_number_sink_0.set_title("") labels = ['', '', '', '', '', '', '', '', '', ''] units = ['', '', '', '', '', '', '', '', '', ''] colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")] factor = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in xrange(1): self.qtgui_number_sink_0.set_min(i, -1) self.qtgui_number_sink_0.set_max(i, 1) self.qtgui_number_sink_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0.set_label(i, labels[i]) self.qtgui_number_sink_0.set_unit(i, units[i]) self.qtgui_number_sink_0.set_factor(i, factor[i]) self.qtgui_number_sink_0.enable_autoscale(False) self._qtgui_number_sink_0_win = sip.wrapinstance( self.qtgui_number_sink_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_win) self.lpwan_dsss_normalize_ff_0 = lpwan.dsss_normalize_ff(len_tag_var) self.lpwan_dsss_interleaver_bb_0 = lpwan.dsss_interleaver_bb( len_tag_var) self.lpwan_dsss_deinterleaver_ff_0 = lpwan.dsss_deinterleaver_ff( len_tag_var) self.fec_ber_bf_0 = fec.ber_bf(False, 100, -7.0) self.dsss_fec_enc_b_0 = dsss_fec_enc_b( len_tag_var="len_tag", tailbiting=True, ) self.dsss_fec_dec_fb_0 = dsss_fec_dec_fb( len_tag_var=len_tag_var, tailbiting=True, ) self.digital_map_bb_0_1 = digital.map_bb(([-1, 1])) self.blocks_random_pdu_0 = blocks.random_pdu(32, 32, chr(0xFF), 1) self.blocks_pdu_to_tagged_stream_0_0 = blocks.pdu_to_tagged_stream( blocks.byte_t, 'packet_len') self.blocks_pdu_to_tagged_stream_0 = blocks.pdu_to_tagged_stream( blocks.byte_t, 'packet_len') self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vff((0.001, )) self.blocks_message_strobe_0 = blocks.message_strobe( pmt.intern("generate"), 10) self.blocks_char_to_float_1_2 = blocks.char_to_float(1, 1) self.blocks_add_xx_0 = blocks.add_vff(1) self.analog_noise_source_x_0 = analog.noise_source_f( analog.GR_GAUSSIAN, np.sqrt(10**(-ebn0_db / 10.0)), 4) ################################################## # Connections ################################################## self.msg_connect((self.blocks_message_strobe_0, 'strobe'), (self.blocks_random_pdu_0, 'generate')) self.msg_connect((self.blocks_random_pdu_0, 'pdus'), (self.blocks_pdu_to_tagged_stream_0, 'pdus')) self.msg_connect((self.blocks_random_pdu_0, 'pdus'), (self.dsss_fec_enc_b_0, 'in')) self.msg_connect((self.dsss_fec_dec_fb_0, 'out'), (self.blocks_pdu_to_tagged_stream_0_0, 'pdus')) self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.blocks_char_to_float_1_2, 0), (self.blocks_add_xx_0, 1)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.lpwan_dsss_deinterleaver_ff_0, 0)) self.connect((self.blocks_pdu_to_tagged_stream_0, 0), (self.fec_ber_bf_0, 1)) self.connect((self.blocks_pdu_to_tagged_stream_0_0, 0), (self.fec_ber_bf_0, 0)) self.connect((self.digital_map_bb_0_1, 0), (self.blocks_char_to_float_1_2, 0)) self.connect((self.dsss_fec_enc_b_0, 0), (self.lpwan_dsss_interleaver_bb_0, 0)) self.connect((self.fec_ber_bf_0, 0), (self.qtgui_number_sink_0, 0)) self.connect((self.lpwan_dsss_deinterleaver_ff_0, 0), (self.lpwan_dsss_normalize_ff_0, 0)) self.connect((self.lpwan_dsss_interleaver_bb_0, 0), (self.digital_map_bb_0_1, 0)) self.connect((self.lpwan_dsss_normalize_ff_0, 0), (self.dsss_fec_dec_fb_0, 0))
def __init__(self, ebn0_db=3, spread_factor=2**10, tailbiting=True): gr.top_block.__init__(self, "Dsss Sim Perfekt Sync Fg Without Fec") Qt.QWidget.__init__(self) self.setWindowTitle("Dsss Sim Perfekt Sync Fg Without Fec") qtgui.util.check_set_qss() try: self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc')) except: pass self.top_scroll_layout = Qt.QVBoxLayout() self.setLayout(self.top_scroll_layout) self.top_scroll = Qt.QScrollArea() self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame) self.top_scroll_layout.addWidget(self.top_scroll) self.top_scroll.setWidgetResizable(True) self.top_widget = Qt.QWidget() self.top_scroll.setWidget(self.top_widget) self.top_layout = Qt.QVBoxLayout(self.top_widget) self.top_grid_layout = Qt.QGridLayout() self.top_layout.addLayout(self.top_grid_layout) self.settings = Qt.QSettings("GNU Radio", "dsss_sim_perfekt_sync_fg_without_fec") self.restoreGeometry(self.settings.value("geometry").toByteArray()) self._lock = threading.RLock() ################################################## # Parameters ################################################## self.ebn0_db = ebn0_db self.spread_factor = spread_factor self.tailbiting = tailbiting ################################################## # Variables ################################################## self.variable_constellation_0 = variable_constellation_0 = digital.constellation_bpsk( ).base() self.pdu_size = pdu_size = 32 self.noise = noise = ( np.sqrt(1 * spread_factor / 10**(ebn0_db / 10.0)) * 1.0) self.len_tag_var = len_tag_var = "packet_len" self.cc_poly = cc_poly = [121, 91] ################################################## # Blocks ################################################## self.qtgui_number_sink_0_0 = qtgui.number_sink(gr.sizeof_float, 0, qtgui.NUM_GRAPH_HORIZ, 1) self.qtgui_number_sink_0_0.set_update_time(0.10) self.qtgui_number_sink_0_0.set_title("BER") labels = ['', '', '', '', '', '', '', '', '', ''] units = ['', '', '', '', '', '', '', '', '', ''] colors = [("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black"), ("black", "black")] factor = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] for i in xrange(1): self.qtgui_number_sink_0_0.set_min(i, -1) self.qtgui_number_sink_0_0.set_max(i, 1) self.qtgui_number_sink_0_0.set_color(i, colors[i][0], colors[i][1]) if len(labels[i]) == 0: self.qtgui_number_sink_0_0.set_label(i, "Data {0}".format(i)) else: self.qtgui_number_sink_0_0.set_label(i, labels[i]) self.qtgui_number_sink_0_0.set_unit(i, units[i]) self.qtgui_number_sink_0_0.set_factor(i, factor[i]) self.qtgui_number_sink_0_0.enable_autoscale(False) self._qtgui_number_sink_0_0_win = sip.wrapinstance( self.qtgui_number_sink_0_0.pyqwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_number_sink_0_0_win) self.lpwan_dsss_spreading_bb_0 = lpwan.dsss_spreading_bb( len_tag_var, spread_factor, 123456, False, 0, 0) self.lpwan_dsss_interleaver_bb_0 = lpwan.dsss_interleaver_bb( len_tag_var) self.lpwan_dsss_diff_decoding_ff_0 = lpwan.dsss_diff_decoding_ff( len_tag_var, False, 0) self.lpwan_dsss_diff_coding_bb_0 = lpwan.dsss_diff_coding_bb( len_tag_var) self.lpwan_dsss_despread_simple_cc_0 = lpwan.dsss_despread_simple_cc( len_tag_var, spread_factor, 123456, False, 0, 0) self.lpwan_dsss_deinterleaver_ff_0 = lpwan.dsss_deinterleaver_ff( len_tag_var) self.fec_ber_running = fec.ber_bf(False, 100, -7.0) self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb( variable_constellation_0) self.digital_chunks_to_symbols_xx_0 = digital.chunks_to_symbols_bc( ([-1, 1]), 1) self.blocks_stream_to_tagged_stream_0 = blocks.stream_to_tagged_stream( gr.sizeof_char, 1, pdu_size, len_tag_var) self.blocks_repack_bits_bb_0_0 = blocks.repack_bits_bb( 1, 8, len_tag_var, False, gr.GR_LSB_FIRST) self.blocks_repack_bits_bb_0 = blocks.repack_bits_bb( 8, 1, len_tag_var, False, gr.GR_LSB_FIRST) self.blocks_float_to_complex_0 = blocks.float_to_complex(1) self.blocks_complex_to_real_0 = blocks.complex_to_real(1) self.blocks_add_xx_0 = blocks.add_vcc(1) (self.blocks_add_xx_0).set_min_output_buffer(1048576) self.analog_random_source_x_0 = blocks.vector_source_b( map(int, numpy.random.randint(0, 256, 10000000)), True) self.analog_noise_source_x_0 = analog.noise_source_c( analog.GR_GAUSSIAN, noise, rnd.randint(0, 10000)) ################################################## # Connections ################################################## self.connect((self.analog_noise_source_x_0, 0), (self.blocks_add_xx_0, 0)) self.connect((self.analog_random_source_x_0, 0), (self.blocks_stream_to_tagged_stream_0, 0)) self.connect((self.blocks_add_xx_0, 0), (self.lpwan_dsss_despread_simple_cc_0, 0)) self.connect((self.blocks_complex_to_real_0, 0), (self.lpwan_dsss_deinterleaver_ff_0, 0)) self.connect((self.blocks_float_to_complex_0, 0), (self.digital_constellation_decoder_cb_0, 0)) self.connect((self.blocks_repack_bits_bb_0, 0), (self.lpwan_dsss_interleaver_bb_0, 0)) self.connect((self.blocks_repack_bits_bb_0_0, 0), (self.fec_ber_running, 1)) self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.blocks_repack_bits_bb_0, 0)) self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.fec_ber_running, 0)) self.connect((self.digital_chunks_to_symbols_xx_0, 0), (self.blocks_add_xx_0, 1)) self.connect((self.digital_constellation_decoder_cb_0, 0), (self.blocks_repack_bits_bb_0_0, 0)) self.connect((self.fec_ber_running, 0), (self.qtgui_number_sink_0_0, 0)) self.connect((self.lpwan_dsss_deinterleaver_ff_0, 0), (self.blocks_float_to_complex_0, 0)) self.connect((self.lpwan_dsss_despread_simple_cc_0, 0), (self.lpwan_dsss_diff_decoding_ff_0, 0)) self.connect((self.lpwan_dsss_diff_coding_bb_0, 0), (self.lpwan_dsss_spreading_bb_0, 0)) self.connect((self.lpwan_dsss_diff_decoding_ff_0, 0), (self.blocks_complex_to_real_0, 0)) self.connect((self.lpwan_dsss_interleaver_bb_0, 0), (self.lpwan_dsss_diff_coding_bb_0, 0)) self.connect((self.lpwan_dsss_spreading_bb_0, 0), (self.digital_chunks_to_symbols_xx_0, 0))