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'))
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))
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))
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))
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))
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'))