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 [email protected] https://lists.gnu.org/mailman/listinfo/discuss-gnuradio
