Dear all,I created a simple flow graph for ofdm transmission. My problem is, how to set the value of pilot symbols and sync words? Since they are basically just symbols that are already known for some certain function, any random values, as long as the form are correct, should work, right? But what is sync_word2 for? After setting it my flow graph could not work (without that it worked just fine). And why it does not need to fill with zeros on alternating carriers, since the preamble is repeated twice? The grc file is attached.
Looking forward to your help. Yang
test_tx.grc
Description: Binary data
#!/usr/bin/env python2 # -*- coding: utf-8 -*- ################################################## # GNU Radio Python Flow Graph # Title: Test Tx # Generated: Mon Sep 25 15:37:13 2017 ################################################## if __name__ == '__main__': import ctypes import sys if sys.platform.startswith('linux'): try: x11 = ctypes.cdll.LoadLibrary('libX11.so') x11.XInitThreads() except: print "Warning: failed to XInitThreads()" from PyQt4 import Qt from gnuradio import blocks from gnuradio import digital from gnuradio import eng_notation from gnuradio import gr from gnuradio import qtgui from gnuradio import uhd from gnuradio.eng_option import eng_option from gnuradio.filter import firdes from gnuradio.qtgui import Range, RangeWidget from optparse import OptionParser import sip import sys import time from gnuradio import qtgui class test_tx(gr.top_block, Qt.QWidget): def __init__(self): gr.top_block.__init__(self, "Test Tx") Qt.QWidget.__init__(self) self.setWindowTitle("Test 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", "test_tx") self.restoreGeometry(self.settings.value("geometry").toByteArray()) ################################################## # Variables ################################################## self.sync_word2 = sync_word2 = [1.,1.,0.,1.,1j,1.,-1j,1.,0.,-1.,0.,1j,0.,1.,1j,-1j,1.,0.,1.,1j,-1j,0.,1.,1j,0.,1j,0.,1.,0.,1.,-1.,0.,1j,0.,1.,-1j,1.,0.,1.,1j,0.,1j,1j,1.,-1j,1.,0.,1.,1j,1.,1j,-1j,0.,1.,0.,1.,1j,1.,-1j,1.,0.,1.,1j,-1j,-1j,1.,0.,1.,1j,-1j,0.,-1.,0.,1j,0.,1.,1.,0.,1.,1j,1j,0.,1.,1j,0.,1.,1j,-1j,1j,1.,-1j,1.,0.,1.,0.,1j,1.,-1j,1.,0.,0.,1j,0.,1.,1j,0.,1.,1j,1j,0.,1.,1j,-1j,0.,-1.,0.,1j,0.,0.,1.,1j,-1j,0.,1j,1.,-1j,1.,0.] self.sync_word1 = sync_word1 = [0.,0.,0.,0.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,1.,0.,0.,0.,0.,0.,0.] self.samp_rate = samp_rate = 5e5 self.pilot_symbols = pilot_symbols = ((1,-1,1,0,1,0,-1,0,),) self.pilot_carriers = pilot_carriers = ((-40,-27,-21,-7,7,21,27,40,),) self.packet_len = packet_len = 80 self.pack_len = pack_len = 64 self.occupied_carriers = occupied_carriers = (range(-53,-40)+range(-39,-27)+range(-26,-21)+range(-20,-7)+range(-6,0)+range(1,7)+range(8,21)+range(22,27)+range(28,40)+range(41,54),) self.fft_len2 = fft_len2 = 256 self.fft_len = fft_len = 128 self.cmts_tx_const = cmts_tx_const = 0.005 ################################################## # Blocks ################################################## self._cmts_tx_const_range = Range(0, 1, 0.005, 0.005, 200) self._cmts_tx_const_win = RangeWidget(self._cmts_tx_const_range, self.set_cmts_tx_const, "cmts_tx_const", "counter_slider", float) self.top_layout.addWidget(self._cmts_tx_const_win) self.uhd_usrp_source_0 = uhd.usrp_source( ",".join(("serial=499c512d", "")), 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(5000000, 0) self.uhd_usrp_source_0.set_gain(0, 0) self.uhd_usrp_source_0.set_antenna('RX2', 0) self.uhd_usrp_sink_0 = uhd.usrp_sink( ",".join(("serial=499c5170", "")), uhd.stream_args( cpu_format="fc32", channels=range(1), ), ) self.uhd_usrp_sink_0.set_samp_rate(samp_rate) self.uhd_usrp_sink_0.set_center_freq(5e6, 0) self.uhd_usrp_sink_0.set_gain(0, 0) self.uhd_usrp_sink_0.set_antenna('TX/RX', 0) self.qtgui_time_sink_x_0 = qtgui.time_sink_f( 1024, #size samp_rate, #samp_rate "plot", #name 1 #number of inputs ) self.qtgui_time_sink_x_0.set_update_time(0.10) self.qtgui_time_sink_x_0.set_y_axis(-1, 1) self.qtgui_time_sink_x_0.set_y_label('Amplitude', "") self.qtgui_time_sink_x_0.enable_tags(-1, True) self.qtgui_time_sink_x_0.set_trigger_mode(qtgui.TRIG_MODE_FREE, qtgui.TRIG_SLOPE_POS, 0.0, 0, 0, "") self.qtgui_time_sink_x_0.enable_autoscale(True) 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) if not True: self.qtgui_time_sink_x_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(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_layout.addWidget(self._qtgui_time_sink_x_0_win) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( fft_len*5/4, #size firdes.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "tx", #name 1 #number of inputs ) self.qtgui_freq_sink_x_0.set_update_time(0.10) 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) if not True: self.qtgui_freq_sink_x_0.disable_legend() if "complex" == "float" or "complex" == "msg_float": self.qtgui_freq_sink_x_0.set_plot_pos_half(not True) 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 xrange(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_layout.addWidget(self._qtgui_freq_sink_x_0_win) self.digital_ofdm_tx_0 = digital.ofdm_tx( fft_len=fft_len, cp_len=fft_len/4, packet_length_tag_key='packet_len', occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, sync_word1=sync_word1, sync_word2=sync_word2, bps_header=1, bps_payload=2, rolloff=0, debug_log=False, scramble_bits=False ) self.digital_ofdm_rx_0 = digital.ofdm_rx( fft_len=fft_len, cp_len=fft_len/4, frame_length_tag_key='frame_'+"length", packet_length_tag_key="length", occupied_carriers=occupied_carriers, pilot_carriers=pilot_carriers, pilot_symbols=pilot_symbols, sync_word1=sync_word1, sync_word2=sync_word2, bps_header=1, bps_payload=2, debug_log=False, scramble_bits=False ) self.blocks_vector_source_x_0 = blocks.vector_source_b(range(packet_len), True, 1, ()) self.blocks_uchar_to_float_0 = blocks.uchar_to_float() self.blocks_tag_debug_0 = blocks.tag_debug(gr.sizeof_char*1, '', ""); self.blocks_tag_debug_0.set_display(True) self.blocks_stream_to_tagged_stream_0 = blocks.stream_to_tagged_stream(gr.sizeof_char, 1, packet_len, 'packet_len') self.blocks_multiply_const_vxx_0 = blocks.multiply_const_vcc((cmts_tx_const, )) ################################################## # Connections ################################################## self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 0)) self.connect((self.blocks_stream_to_tagged_stream_0, 0), (self.digital_ofdm_tx_0, 0)) self.connect((self.blocks_uchar_to_float_0, 0), (self.qtgui_time_sink_x_0, 0)) self.connect((self.blocks_vector_source_x_0, 0), (self.blocks_stream_to_tagged_stream_0, 0)) self.connect((self.digital_ofdm_rx_0, 0), (self.blocks_tag_debug_0, 0)) self.connect((self.digital_ofdm_rx_0, 0), (self.blocks_uchar_to_float_0, 0)) self.connect((self.digital_ofdm_tx_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.digital_ofdm_rx_0, 0)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "test_tx") self.settings.setValue("geometry", self.saveGeometry()) event.accept() def get_sync_word2(self): return self.sync_word2 def set_sync_word2(self, sync_word2): self.sync_word2 = sync_word2 def get_sync_word1(self): return self.sync_word1 def set_sync_word1(self, sync_word1): self.sync_word1 = sync_word1 def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.uhd_usrp_source_0.set_samp_rate(self.samp_rate) self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate) self.qtgui_time_sink_x_0.set_samp_rate(self.samp_rate) self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate) def get_pilot_symbols(self): return self.pilot_symbols def set_pilot_symbols(self, pilot_symbols): self.pilot_symbols = pilot_symbols def get_pilot_carriers(self): return self.pilot_carriers def set_pilot_carriers(self, pilot_carriers): self.pilot_carriers = pilot_carriers def get_packet_len(self): return self.packet_len def set_packet_len(self, packet_len): self.packet_len = packet_len self.blocks_vector_source_x_0.set_data(range(self.packet_len), ()) self.blocks_stream_to_tagged_stream_0.set_packet_len(self.packet_len) self.blocks_stream_to_tagged_stream_0.set_packet_len_pmt(self.packet_len) def get_pack_len(self): return self.pack_len def set_pack_len(self, pack_len): self.pack_len = pack_len def get_occupied_carriers(self): return self.occupied_carriers def set_occupied_carriers(self, occupied_carriers): self.occupied_carriers = occupied_carriers def get_fft_len2(self): return self.fft_len2 def set_fft_len2(self, fft_len2): self.fft_len2 = fft_len2 def get_fft_len(self): return self.fft_len def set_fft_len(self, fft_len): self.fft_len = fft_len def get_cmts_tx_const(self): return self.cmts_tx_const def set_cmts_tx_const(self, cmts_tx_const): self.cmts_tx_const = cmts_tx_const self.blocks_multiply_const_vxx_0.set_k((self.cmts_tx_const, )) def main(top_block_cls=test_tx, options=None): from distutils.version import StrictVersion if StrictVersion(Qt.qVersion()) >= StrictVersion("4.5.0"): style = gr.prefs().get_string('qtgui', 'style', 'raster') Qt.QApplication.setGraphicsSystem(style) qapp = Qt.QApplication(sys.argv) tb = top_block_cls() tb.start() tb.show() def quitting(): tb.stop() tb.wait() qapp.connect(qapp, Qt.SIGNAL("aboutToQuit()"), quitting) qapp.exec_() if __name__ == '__main__': main()
_______________________________________________ Discuss-gnuradio mailing list Discuss-gnuradio@gnu.org https://lists.gnu.org/mailman/listinfo/discuss-gnuradio