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))
Пример #2
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))
Пример #3
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))
Пример #4
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))