Exemplo n.º 1
0
    def __init__(self, bb_params, tcp_addr):
        gr.hier_block2.__init__(
            self,
            "Build and Send Pkt",
            gr.io_signature(1, 1, gr.sizeof_char * 1),  # single in
            gr.io_signature(0, 0, 0)  # output via zmq
        )

        # parameters
        self.bb_params = bb_params
        self.tcp_addr = tcp_addr

        # variables
        self.tag_name = "packet_len"
        self.preamble_str = ""
        for bit in self.bb_params.preamble:
            if bit == 1:
                self.preamble_str = self.preamble_str + '1'
            else:
                self.preamble_str = self.preamble_str + '0'

        # blocks
        # detect and tag any preambles
        self.digital_correlate_access_code_xx_ts_0 = \
            digital.correlate_access_code_bb_ts(
                self.preamble_str,
                0,
                self.tag_name)
        self.connect((self, 0),
                     (self.digital_correlate_access_code_xx_ts_0, 0))

        # pack the bits into bytes
        self.blocks_repack_bits_bb_0 = \
            blocks.repack_bits_bb(
                1,
                8,
                self.tag_name,
                False,
                gr.GR_MSB_FIRST)
        self.connect((self.digital_correlate_access_code_xx_ts_0, 0),
                     (self.blocks_repack_bits_bb_0, 0))

        # convert payloads to PDUs
        self.blocks_tagged_stream_to_pdu_0 = \
            blocks.tagged_stream_to_pdu(blocks.byte_t, self.tag_name)
        self.connect((self.blocks_repack_bits_bb_0, 0),
                     (self.blocks_tagged_stream_to_pdu_0, 0))

        # send PDU to zmq sink
        self.zeromq_push_msg_sink_0 = \
            zeromq.push_msg_sink(
                self.tcp_addr,
                100)
        self.msg_connect((self.blocks_tagged_stream_to_pdu_0, 'pdus'),
                         (self.zeromq_push_msg_sink_0, 'in'))
Exemplo n.º 2
0
    def __init__(self, ipp1="127.0.0.1", ipp2="127.0.0.1", ipp3="127.0.0.1", ipp4="127.0.0.1", iptx="127.0.0.1", samp_rate=10000):
        gr.top_block.__init__(self, "OFDM Rx")

        ##################################################
        # Parameters
        ##################################################
        self.ipp1 = ipp1
        self.ipp2 = ipp2
        self.ipp3 = ipp3
        self.ipp4 = ipp4
        self.iptx = iptx
        self.samp_rate = samp_rate

        ##################################################
        # Variables
        ##################################################
        self.pilot_symbols = pilot_symbols = ((1, 1, 1, -1,),)
        self.pilot_carriers = pilot_carriers = ((-21, -7, 7, 21,),)
        self.payload_mod = payload_mod = digital.constellation_qpsk()
        self.packet_length_tag_key = packet_length_tag_key = "packet_len"
        self.occupied_carriers = occupied_carriers = (range(-26, -21) + range(-20, -7) + range(-6, 0) + range(1, 7) + range(8, 21) + range(22, 27),)
        self.length_tag_key = length_tag_key = "frame_len"
        self.header_mod = header_mod = digital.constellation_bpsk()
        self.fft_len = fft_len = 64
        self.sync_word2 = sync_word2 = [0j, 0j, 0j, 0j, 0j, 0j, (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1 +0j), (1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), 0j, (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (1+0j), (1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (1+0j), (-1+0j), (1+0j), (-1+0j), (-1+0j), (-1+0j), (-1+0j), 0j, 0j, 0j, 0j, 0j]
        self.sync_word1 = sync_word1 = [0., 0., 0., 0., 0., 0., 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., -1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., -1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 1.41421356, 0., 0., 0., 0., 0., 0.]
        self.payload_equalizer = payload_equalizer = digital.ofdm_equalizer_simpledfe(fft_len, payload_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols, 1)
        self.packet_len = packet_len = 96
        self.header_formatter = header_formatter = digital.packet_header_ofdm(occupied_carriers, n_syms=1, len_tag_key=packet_length_tag_key, frame_len_tag_key=length_tag_key, bits_per_header_sym=header_mod.bits_per_symbol(), bits_per_payload_sym=payload_mod.bits_per_symbol(), scramble_header=False)
        self.header_equalizer = header_equalizer = digital.ofdm_equalizer_simpledfe(fft_len, header_mod.base(), occupied_carriers, pilot_carriers, pilot_symbols)

        ##################################################
        # Blocks
        ##################################################
        self.zeromq_push_msg_sink_0 = zeromq.push_msg_sink("tcp://" + ipp3 + ":55530", 100)
        self.zeromq_pull_source_0_0_0_0_0 = zeromq.pull_source(gr.sizeof_gr_complex, 64, "tcp://"+ ipp2 + ":55520", 100, True)
        self.fft_vxx_0 = fft.fft_vcc(fft_len, True, (()), True, 1)
        self.digital_packet_headerparser_b_0 = digital.packet_headerparser_b(header_formatter.base())
        self.digital_ofdm_serializer_vcc_header = digital.ofdm_serializer_vcc(fft_len, occupied_carriers, length_tag_key, "", 0, "", True)
        self.digital_ofdm_frame_equalizer_vcvc_0 = digital.ofdm_frame_equalizer_vcvc(header_equalizer.base(), fft_len/4, length_tag_key, True, 1)
        self.digital_ofdm_chanest_vcvc_0 = digital.ofdm_chanest_vcvc((sync_word1), (sync_word2), 1, 0, 3, False)
        self.digital_constellation_decoder_cb_0 = digital.constellation_decoder_cb(header_mod.base())

        ##################################################
        # Connections
        ##################################################
        self.msg_connect((self.digital_packet_headerparser_b_0, 'header_data'), (self.zeromq_push_msg_sink_0, 'in'))    
        self.connect((self.digital_constellation_decoder_cb_0, 0), (self.digital_packet_headerparser_b_0, 0))    
        self.connect((self.digital_ofdm_chanest_vcvc_0, 0), (self.digital_ofdm_frame_equalizer_vcvc_0, 0))    
        self.connect((self.digital_ofdm_frame_equalizer_vcvc_0, 0), (self.digital_ofdm_serializer_vcc_header, 0))    
        self.connect((self.digital_ofdm_serializer_vcc_header, 0), (self.digital_constellation_decoder_cb_0, 0))    
        self.connect((self.fft_vxx_0, 0), (self.digital_ofdm_chanest_vcvc_0, 0))    
        self.connect((self.zeromq_pull_source_0_0_0_0_0, 0), (self.fft_vxx_0, 0))    
Exemplo n.º 3
0
    def __init__(self):
        gr.top_block.__init__(self, "ZMQ RX Test")

        ##################################################
        # Variables
        ##################################################
        self.tcp_addr_msg_out = zmu.TCP_RX_XFIL
        self.samp_rate = samp_rate = 1e3
        self.preamble = (85, 85, 0, 6, 0, 6, 80, 73, 80, 73, 70, 90, 0, 0, 0,
                         0, 0, 0, 0)

        ##################################################
        # Blocks
        ##################################################
        self.zeromq_push_msg_sink_0 = \
            zeromq.push_msg_sink(self.tcp_addr_msg_out, 100)
        self.digital_correlate_access_code_xx_ts_0 = \
            digital.correlate_access_code_bb_ts(
                '0101010101010101',
                0,
                'packet_len')
        self.blocks_vector_source_x_0 = \
            blocks.vector_source_b(
                self.preamble, True, 1, [])
        self.blocks_throttle_0 = \
            blocks.throttle(gr.sizeof_char*1, samp_rate,True)
        self.blocks_tagged_stream_to_pdu_0 = \
            blocks.tagged_stream_to_pdu(blocks.byte_t, 'packet_len')
        self.blocks_repack_bits_bb_0 = \
            blocks.repack_bits_bb(1, 8, 'packet_len', False, gr.GR_MSB_FIRST)
        self.blocks_packed_to_unpacked_xx_0 = \
            blocks.packed_to_unpacked_bb(1, gr.GR_MSB_FIRST)

        ##################################################
        # Connections
        ##################################################
        self.msg_connect((self.blocks_tagged_stream_to_pdu_0, 'pdus'),
                         (self.zeromq_push_msg_sink_0, 'in'))
        self.connect((self.blocks_packed_to_unpacked_xx_0, 0),
                     (self.digital_correlate_access_code_xx_ts_0, 0))
        self.connect((self.blocks_repack_bits_bb_0, 0),
                     (self.blocks_tagged_stream_to_pdu_0, 0))
        self.connect((self.blocks_throttle_0, 0),
                     (self.blocks_packed_to_unpacked_xx_0, 0))
        self.connect((self.blocks_vector_source_x_0, 0),
                     (self.blocks_throttle_0, 0))
        self.connect((self.digital_correlate_access_code_xx_ts_0, 0),
                     (self.blocks_repack_bits_bb_0, 0))
Exemplo n.º 4
0
    def __init__(self):
        gr.top_block.__init__(self, "Top Block")

        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 1e6
        self.capture_freq = capture_freq = 868e6

        ##################################################
        # Blocks
        ##################################################
        self.zeromq_push_msg_sink_0 = zeromq.push_msg_sink(
            'tcp://127.0.0.1:5002', 100)
        self.zeromq_pub_msg_sink_0 = zeromq.pub_msg_sink(
            'tcp://127.0.0.1:5001', 100)
        self.rtlsdr_source_1 = osmosdr.source(args="numchan=" + str(1) + " " +
                                              'rtl_tcp=localhost:7373')
        self.rtlsdr_source_1.set_sample_rate(samp_rate)
        self.rtlsdr_source_1.set_center_freq(capture_freq, 0)
        self.rtlsdr_source_1.set_freq_corr(0, 0)
        self.rtlsdr_source_1.set_dc_offset_mode(0, 0)
        self.rtlsdr_source_1.set_iq_balance_mode(0, 0)
        self.rtlsdr_source_1.set_gain_mode(False, 0)
        self.rtlsdr_source_1.set_gain(10, 0)
        self.rtlsdr_source_1.set_if_gain(20, 0)
        self.rtlsdr_source_1.set_bb_gain(20, 0)
        self.rtlsdr_source_1.set_antenna('', 0)
        self.rtlsdr_source_1.set_bandwidth(0, 0)

        self.lora_message_socket_sink_0 = lora.message_socket_sink(
            '127.0.0.1', 5005, 1)
        self.lora_lora_receiver_0 = lora.lora_receiver(samp_rate, capture_freq,
                                                       ([868.1e6]), 125000, 7,
                                                       False, 4, True, False,
                                                       False, 1, False, False)

        ##################################################
        # Connections
        ##################################################
        self.msg_connect((self.lora_lora_receiver_0, 'frames'),
                         (self.lora_message_socket_sink_0, 'in'))
        self.msg_connect((self.lora_lora_receiver_0, 'frames'),
                         (self.zeromq_pub_msg_sink_0, 'in'))
        self.msg_connect((self.lora_lora_receiver_0, 'frames'),
                         (self.zeromq_push_msg_sink_0, 'in'))
        self.connect((self.rtlsdr_source_1, 0), (self.lora_lora_receiver_0, 0))
Exemplo n.º 5
0
    def __init__(self):
        gr.top_block.__init__(self, "RTTY_receive", catch_exceptions=True)
        Qt.QWidget.__init__(self)
        self.setWindowTitle("RTTY_receive")
        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", "RTTY_receive")

        try:
            if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
                self.restoreGeometry(
                    self.settings.value("geometry").toByteArray())
            else:
                self.restoreGeometry(self.settings.value("geometry"))
        except:
            pass

        ##################################################
        # Variables
        ##################################################
        self.sq_lvl = sq_lvl = -70
        self.samp_rate = samp_rate = 48000
        self.reverse = reverse = 1
        self.fsk_deviation = fsk_deviation = 170
        self.decim = decim = 50
        self.center = center = 2210
        self.baud = baud = 1 / 0.022

        ##################################################
        # Blocks
        ##################################################
        self._sq_lvl_range = Range(-100, 0, 5, -70, 200)
        self._sq_lvl_win = RangeWidget(self._sq_lvl_range, self.set_sq_lvl,
                                       'Squelch', "counter_slider", float,
                                       QtCore.Qt.Horizontal)
        self.top_grid_layout.addWidget(self._sq_lvl_win)
        # Create the options list
        self._reverse_options = (
            1,
            -1,
        )
        # Create the labels list
        self._reverse_labels = (
            'Normal',
            'Reverse',
        )
        # Create the combo box
        # Create the radio buttons
        self._reverse_group_box = Qt.QGroupBox('reverse' + ": ")
        self._reverse_box = Qt.QVBoxLayout()

        class variable_chooser_button_group(Qt.QButtonGroup):
            def __init__(self, parent=None):
                Qt.QButtonGroup.__init__(self, parent)

            @pyqtSlot(int)
            def updateButtonChecked(self, button_id):
                self.button(button_id).setChecked(True)

        self._reverse_button_group = variable_chooser_button_group()
        self._reverse_group_box.setLayout(self._reverse_box)
        for i, _label in enumerate(self._reverse_labels):
            radio_button = Qt.QRadioButton(_label)
            self._reverse_box.addWidget(radio_button)
            self._reverse_button_group.addButton(radio_button, i)
        self._reverse_callback = lambda i: Qt.QMetaObject.invokeMethod(
            self._reverse_button_group, "updateButtonChecked",
            Qt.Q_ARG("int", self._reverse_options.index(i)))
        self._reverse_callback(self.reverse)
        self._reverse_button_group.buttonClicked[int].connect(
            lambda i: self.set_reverse(self._reverse_options[i]))
        self.top_grid_layout.addWidget(self._reverse_group_box)
        self.zeromq_push_msg_sink_0 = zeromq.push_msg_sink(
            'tcp://127.0.0.1:50252', 100, True)
        self.rational_resampler_xxx_0_0 = filter.rational_resampler_fff(
            interpolation=500, decimation=960, taps=None, fractional_bw=None)
        self.qtgui_time_sink_x_0 = qtgui.time_sink_f(
            128,  #size
            960,  #samp_rate
            "",  #name
            1,  #number of inputs
            None  # parent
        )
        self.qtgui_time_sink_x_0.set_update_time(0.10)
        self.qtgui_time_sink_x_0.set_y_axis(0, 1)

        self.qtgui_time_sink_x_0.set_y_label('Amplitude', "")

        self.qtgui_time_sink_x_0.enable_tags(True)
        self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_NORM,
                                                  qtgui.TRIG_SLOPE_NEG, 0.5, 0,
                                                  0, "")
        self.qtgui_time_sink_x_0.enable_autoscale(False)
        self.qtgui_time_sink_x_0.enable_grid(False)
        self.qtgui_time_sink_x_0.enable_axis_labels(True)
        self.qtgui_time_sink_x_0.enable_control_panel(False)
        self.qtgui_time_sink_x_0.enable_stem_plot(False)

        labels = [
            'Signal 1', 'Signal 2', 'Signal 3', 'Signal 4', 'Signal 5',
            'Signal 6', 'Signal 7', 'Signal 8', 'Signal 9', 'Signal 10'
        ]
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            'blue', 'red', 'green', 'black', 'cyan', 'magenta', 'yellow',
            'dark red', 'dark green', 'dark blue'
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
        styles = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        markers = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1]

        for i in range(1):
            if len(labels[i]) == 0:
                self.qtgui_time_sink_x_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_time_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_time_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_time_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_time_sink_x_0.set_line_style(i, styles[i])
            self.qtgui_time_sink_x_0.set_line_marker(i, markers[i])
            self.qtgui_time_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_time_sink_x_0_win = sip.wrapinstance(
            self.qtgui_time_sink_x_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_time_sink_x_0_win)
        self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
            1024,  #size
            firdes.WIN_BLACKMAN_hARRIS,  #wintype
            center,  #fc
            1024,  #bw
            "",  #name
            1,
            None  # parent
        )
        self.qtgui_freq_sink_x_0.set_update_time(0.05)
        self.qtgui_freq_sink_x_0.set_y_axis(-140, 10)
        self.qtgui_freq_sink_x_0.set_y_label('Relative Gain', 'dB')
        self.qtgui_freq_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, 0.0, 0,
                                                  "")
        self.qtgui_freq_sink_x_0.enable_autoscale(False)
        self.qtgui_freq_sink_x_0.enable_grid(False)
        self.qtgui_freq_sink_x_0.set_fft_average(1.0)
        self.qtgui_freq_sink_x_0.enable_axis_labels(True)
        self.qtgui_freq_sink_x_0.enable_control_panel(False)
        self.qtgui_freq_sink_x_0.set_fft_window_normalized(False)

        labels = ['', '', '', '', '', '', '', '', '', '']
        widths = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
        colors = [
            "blue", "red", "green", "black", "cyan", "magenta", "yellow",
            "dark red", "dark green", "dark blue"
        ]
        alphas = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

        for i in range(1):
            if len(labels[i]) == 0:
                self.qtgui_freq_sink_x_0.set_line_label(
                    i, "Data {0}".format(i))
            else:
                self.qtgui_freq_sink_x_0.set_line_label(i, labels[i])
            self.qtgui_freq_sink_x_0.set_line_width(i, widths[i])
            self.qtgui_freq_sink_x_0.set_line_color(i, colors[i])
            self.qtgui_freq_sink_x_0.set_line_alpha(i, alphas[i])

        self._qtgui_freq_sink_x_0_win = sip.wrapinstance(
            self.qtgui_freq_sink_x_0.pyqwidget(), Qt.QWidget)
        self.top_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win)
        self.freq_xlating_fir_filter_xxx_0 = filter.freq_xlating_fir_filter_fcf(
            50, firdes.low_pass(1.0, samp_rate, 1000, 400), center, samp_rate)
        self.epy_block_0 = epy_block_0.my_sync_block()
        self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb()
        self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(reverse)
        self.audio_source_0 = audio.source(samp_rate, '', True)
        self.analog_simple_squelch_cc_0 = analog.simple_squelch_cc(sq_lvl, 1)
        self.analog_quadrature_demod_cf_0 = analog.quadrature_demod_cf(1.0)

        ##################################################
        # Connections
        ##################################################
        self.msg_connect((self.epy_block_0, 'msg_out'),
                         (self.zeromq_push_msg_sink_0, 'in'))
        self.connect((self.analog_quadrature_demod_cf_0, 0),
                     (self.qtgui_time_sink_x_0, 0))
        self.connect((self.analog_quadrature_demod_cf_0, 0),
                     (self.rational_resampler_xxx_0_0, 0))
        self.connect((self.analog_simple_squelch_cc_0, 0),
                     (self.analog_quadrature_demod_cf_0, 0))
        self.connect((self.audio_source_0, 0),
                     (self.freq_xlating_fir_filter_xxx_0, 0))
        self.connect((self.blocks_multiply_const_vxx_0, 0),
                     (self.digital_binary_slicer_fb_0, 0))
        self.connect((self.digital_binary_slicer_fb_0, 0),
                     (self.epy_block_0, 0))
        self.connect((self.freq_xlating_fir_filter_xxx_0, 0),
                     (self.analog_simple_squelch_cc_0, 0))
        self.connect((self.freq_xlating_fir_filter_xxx_0, 0),
                     (self.qtgui_freq_sink_x_0, 0))
        self.connect((self.rational_resampler_xxx_0_0, 0),
                     (self.blocks_multiply_const_vxx_0, 0))
Exemplo n.º 6
0
    def __init__(self,
                 verbose,
                 center_freq,
                 freq,
                 samp_rate,
                 threshold,
                 channel_width,
                 tcp_str,
                 hw_sel,
                 payload_len,
                 transition_width=0,
                 iq_file_name=""):

        gr.top_block.__init__(self)

        if True:  #verbose > 0:
            print "\nFlowgraph Properties:"
            print "  Center Frequency: {} MHz".format(center_freq / 1000000.0)
            print "  Tune Frequency:   {} MHz".format(freq / 1000000.0)
            print "  IQ Sample Rate (in): {} MHz".format(samp_rate / 1000000.0)
            print "  Channel Width: {} MHz".format(channel_width / 1000000.0)
            print "  Transition Width: {} MHz".format(transition_width /
                                                      1000000.0)
            print "  Threshold: {}".format(threshold)
            print "  IQ File Name: {}".format(iq_file_name)
            print "  ZMQ TCP ADDR: {}".format(tcp_str)
            print "  HW Sel: {}".format(hw_sel)

        # start by dumping baseband into a file and viewing in grc

        if verbose > 0:
            print "Entering OOK Demodulator..."

        # variables
        self.center_freq = center_freq
        self.freq = freq
        self.threshold = threshold
        self.channel_width = channel_width
        self.samp_rate = samp_rate
        if transition_width == 0:
            self.transition_width = channel_width / 10
        else:
            self.transition_width = transition_width
        self.taps = firdes.low_pass(1, self.samp_rate, self.channel_width / 2,
                                    self.transition_width)
        self.symbol_rate = 10e3
        self.samples_per_symbol = \
            int(self.samp_rate/self.symbol_rate)
        self.payload_len = payload_len

        # blocks, starting from the input channel filter
        self.freq_xlating_fir_filter_xxx_0 = \
            filter.freq_xlating_fir_filter_ccc(
                1,
                self.taps,
                freq - center_freq,
                samp_rate)
        if hw_sel == HW_SEL_FILE:
            self.blocks_file_source_0 = blocks.file_source(
                gr.sizeof_gr_complex * 1, iq_file_name, True)
            # skip the throttle block, we just want to get done
            self.connect((self.blocks_file_source_0, 0),
                         (self.freq_xlating_fir_filter_xxx_0, 0))
        elif hw_sel == HW_SEL_HACKRF:
            self.osmosdr_source_0 = osmosdr.source(args="numchan=" + str(1) +
                                                   " " + 'hackrf=0')
            self.osmosdr_source_0.set_sample_rate(samp_rate)
            self.osmosdr_source_0.set_center_freq(center_freq, 0)
            self.osmosdr_source_0.set_freq_corr(0, 0)
            self.osmosdr_source_0.set_dc_offset_mode(0, 0)
            self.osmosdr_source_0.set_iq_balance_mode(0, 0)
            self.osmosdr_source_0.set_gain_mode(False, 0)
            self.osmosdr_source_0.set_gain(10, 0)
            self.osmosdr_source_0.set_if_gain(20, 0)
            self.osmosdr_source_0.set_bb_gain(20, 0)
            self.osmosdr_source_0.set_antenna('', 0)
            self.osmosdr_source_0.set_bandwidth(0, 0)
            self.connect((self.osmosdr_source_0, 0),
                         (self.freq_xlating_fir_filter_xxx_0, 0))

        elif self.hw_sel == HW_SEL_USRP:
            self.uhd_usrp_source_0 = uhd.usrp_source(
                ",".join(("", "")),
                uhd.stream_args(
                    cpu_format="fc32",
                    channels=range(1),
                ),
            )
            self.uhd_usrp_source_0.set_samp_rate(samp_rate)
            self.uhd_usrp_source_0.set_center_freq(center_freq, 0)
            self.uhd_usrp_source_0.set_gain(20, 0)
            self.uhd_usrp_source_0.set_antenna('RX2', 0)
            self.connect((self.osmosdr_source_0, 0),
                         (self.uhd_usrp_source_0, 0))

        # add limeSDR using osmocom
        #elif self.hw_sel == HW_SEL_LIME:

        # demodulation
        self.blocks_complex_to_mag_0 = blocks.complex_to_mag(1)
        self.blocks_add_const_vxx_0 = blocks.add_const_vff((-1 * threshold, ))
        self.connect((self.freq_xlating_fir_filter_xxx_0, 0),
                     (self.blocks_complex_to_mag_0, 0))
        self.connect((self.blocks_complex_to_mag_0, 0),
                     (self.blocks_add_const_vxx_0, 0))

        # binary slicer is next major thing, but there
        # may be a pfb block in between
        self.digital_binary_slicer_fb_0 = digital.binary_slicer_fb()

        # polyphase clock sync (optional)
        if False:
            nfilts = 32
            self.rrc_taps = rrc_taps = \
                firdes.root_raised_cosine(
                    nfilts,
                    samp_rate,
                    self.symbol_rate,
                    0.35,
                    nfilts)
            self.digital_pfb_clock_sync_xxx_0_0 = \
                digital.pfb_clock_sync_fff(
                    self.samples_per_symbol,
                    62.8e-3,
                    (rrc_taps),
                    32,
                    16,
                    1.5,
                    self.samples_per_symbol)
            self.connect((self.blocks_add_const_vxx_0, 0),
                         (self.digital_pfb_clock_sync_xxx_0_0, 0))
            self.connect((self.blocks_add_const_vxx_0, 0),
                         (self.digital_binary_slicer_fb_0, 0))
        else:
            self.connect((self.blocks_add_const_vxx_0, 0),
                         (self.digital_binary_slicer_fb_0, 0))

        # decimate down to the symbol rate
        self.blocks_keep_one_in_n_0 = blocks.keep_one_in_n(
            gr.sizeof_char * 1, int(self.samp_rate / self.symbol_rate))
        self.connect((self.digital_binary_slicer_fb_0, 0),
                     (self.blocks_keep_one_in_n_0, 0))

        # find preamble and apply tag
        self.digital_correlate_access_code_xx_ts_0 = \
            digital.correlate_access_code_bb_ts(
                "01010101010101010101",
                0,
                "packet_len")
        self.connect((self.blocks_keep_one_in_n_0, 0),
                     (self.digital_correlate_access_code_xx_ts_0, 0))

        # pack bitstream into bytes
        self.blocks_repack_bits_bb_0_0_0 = blocks.repack_bits_bb(
            1, 8, 'packet_len', False, gr.GR_MSB_FIRST)
        self.connect((self.digital_correlate_access_code_xx_ts_0, 0),
                     (self.blocks_repack_bits_bb_0_0_0, 0))

        # generate PDU
        self.blocks_tagged_stream_to_pdu_0 = \
            blocks.tagged_stream_to_pdu(
                blocks.byte_t,
                'packet_len')
        self.connect((self.blocks_repack_bits_bb_0_0_0, 0),
                     (self.blocks_tagged_stream_to_pdu_0, 0))

        # add ZeroMQ sink to get data out of flowgraph
        self.zeromq_push_msg_sink_0 = zeromq.push_msg_sink(tcp_str, 100)
        self.msg_connect((self.blocks_tagged_stream_to_pdu_0, 'pdus'),
                         (self.zeromq_push_msg_sink_0, 'in'))

        # debug only
        if False:
            self.blocks_random_pdu_0 = blocks.random_pdu(50, 128, chr(0xFF), 2)
            self.msg_connect((self.blocks_random_pdu_0, 'pdus'),
                             (self.zeromq_push_msg_sink_0, 'in'))