Skip to content

Instantly share code, notes, and snippets.

@marcusmueller
Created September 30, 2021 07:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcusmueller/728f955b68781449bcb973a937bd4f56 to your computer and use it in GitHub Desktop.
Save marcusmueller/728f955b68781449bcb973a937bd4f56 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
# SPDX-License-Identifier: GPL-3.0
#
# GNU Radio Python Flow Graph
# Title: Test_grc
# Author: oln-ant
# GNU Radio version: 3.8.3.1
from distutils.version import StrictVersion
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 PyQt5 import Qt
from PyQt5.QtCore import QObject, pyqtSlot
from gnuradio import qtgui
from gnuradio.filter import firdes
import sip
from gnuradio import analog
from gnuradio import blocks
from gnuradio import gr
import sys
import signal
from argparse import ArgumentParser
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
from gnuradio import uhd
import time
from gnuradio.qtgui import Range, RangeWidget
from gnuradio import qtgui
class Test_grc(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "Test_grc")
Qt.QWidget.__init__(self)
self.setWindowTitle("Test_grc")
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_grc")
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.samp_rate = samp_rate = 1.92e6
self.gain = gain = 15
self.freq = freq = 3.5e9
self.Tx_Channel_Selector = Tx_Channel_Selector = 1
##################################################
# Blocks
##################################################
self._gain_range = Range(1, 20, 1, 15, 200)
self._gain_win = RangeWidget(self._gain_range, self.set_gain, 'gain', "counter", float)
self.top_layout.addWidget(self._gain_win)
self._freq_range = Range(200e6, 4e9, 50e6, 3.5e9, 200)
self._freq_win = RangeWidget(self._freq_range, self.set_freq, 'freq', "counter", float)
self.top_layout.addWidget(self._freq_win)
self.uhd_usrp_source_0 = uhd.usrp_source(
",".join(("addr0=192.168.11.2, addr1=192.168.10.2 ", "skip_boot_init=1", "master_clock_rate=245.76e6")),
uhd.stream_args(
cpu_format="fc32",
args='',
channels=[0, 1, 2, 3],
),
)
self.uhd_usrp_source_0.set_subdev_spec("A:0 B:0", 0)
self.uhd_usrp_source_0.set_time_source('external', 0)
self.uhd_usrp_source_0.set_clock_source('external', 0)
self.uhd_usrp_source_0.set_subdev_spec("A:0 B:0", 1)
self.uhd_usrp_source_0.set_time_source('external', 1)
self.uhd_usrp_source_0.set_clock_source('external', 1)
self.uhd_usrp_source_0.set_center_freq(freq, 0)
self.uhd_usrp_source_0.set_gain(gain, 0)
self.uhd_usrp_source_0.set_antenna('TX/RX', 0)
self.uhd_usrp_source_0.set_lo_source('external', uhd.ALL_LOS, 0)
self.uhd_usrp_source_0.set_lo_export_enabled(True, uhd.ALL_LOS, 0)
self.uhd_usrp_source_0.set_center_freq(freq, 1)
self.uhd_usrp_source_0.set_gain(gain, 1)
self.uhd_usrp_source_0.set_antenna('TX/RX', 1)
self.uhd_usrp_source_0.set_lo_source('external', uhd.ALL_LOS, 1)
self.uhd_usrp_source_0.set_lo_export_enabled(False, uhd.ALL_LOS, 1)
self.uhd_usrp_source_0.set_center_freq(freq, 2)
self.uhd_usrp_source_0.set_gain(gain, 2)
self.uhd_usrp_source_0.set_antenna('TX/RX', 2)
self.uhd_usrp_source_0.set_lo_source('external', uhd.ALL_LOS, 2)
self.uhd_usrp_source_0.set_lo_export_enabled(False, uhd.ALL_LOS, 2)
self.uhd_usrp_source_0.set_center_freq(freq, 3)
self.uhd_usrp_source_0.set_gain(gain, 3)
self.uhd_usrp_source_0.set_antenna('TX/RX', 3)
self.uhd_usrp_source_0.set_lo_source('external', uhd.ALL_LOS, 3)
self.uhd_usrp_source_0.set_lo_export_enabled(False, uhd.ALL_LOS, 3)
self.uhd_usrp_source_0.set_clock_rate(245.76e6, uhd.ALL_MBOARDS)
self.uhd_usrp_source_0.set_samp_rate(samp_rate)
self.uhd_usrp_source_0.set_time_unknown_pps(uhd.time_spec())
self.uhd_usrp_sink_0 = uhd.usrp_sink(
",".join(("addr0=192.168.11.2, addr1=192.168.10.2", "skip_boot_init=1, type=n3xx", "master_clock_rate=245.76e6")),
uhd.stream_args(
cpu_format="fc32",
args='',
channels=[0, 1, 2, 3],
),
'',
)
self.uhd_usrp_sink_0.set_subdev_spec("A:0 B:0", 0)
self.uhd_usrp_sink_0.set_time_source('external', 0)
self.uhd_usrp_sink_0.set_clock_source('external', 0)
self.uhd_usrp_sink_0.set_subdev_spec("A:0 B:0", 1)
self.uhd_usrp_sink_0.set_time_source('external', 1)
self.uhd_usrp_sink_0.set_clock_source('external', 1)
self.uhd_usrp_sink_0.set_center_freq(freq, 0)
self.uhd_usrp_sink_0.set_gain(gain, 0)
self.uhd_usrp_sink_0.set_antenna('TX/RX', 0)
self.uhd_usrp_sink_0.set_lo_source('external', uhd.ALL_LOS, 0)
self.uhd_usrp_sink_0.set_lo_export_enabled(True, uhd.ALL_LOS, 0)
self.uhd_usrp_sink_0.set_center_freq(freq, 1)
self.uhd_usrp_sink_0.set_gain(gain, 1)
self.uhd_usrp_sink_0.set_antenna('TX/RX', 1)
self.uhd_usrp_sink_0.set_lo_source('external', uhd.ALL_LOS, 1)
self.uhd_usrp_sink_0.set_lo_export_enabled(False, uhd.ALL_LOS, 1)
self.uhd_usrp_sink_0.set_center_freq(freq, 2)
self.uhd_usrp_sink_0.set_gain(gain, 2)
self.uhd_usrp_sink_0.set_antenna('TX/RX', 2)
self.uhd_usrp_sink_0.set_lo_source('external', uhd.ALL_LOS, 2)
self.uhd_usrp_sink_0.set_lo_export_enabled(False, uhd.ALL_LOS, 2)
self.uhd_usrp_sink_0.set_center_freq(freq, 3)
self.uhd_usrp_sink_0.set_gain(gain, 3)
self.uhd_usrp_sink_0.set_antenna('TX/RX', 3)
self.uhd_usrp_sink_0.set_lo_source('external', uhd.ALL_LOS, 3)
self.uhd_usrp_sink_0.set_lo_export_enabled(False, uhd.ALL_LOS, 3)
self.uhd_usrp_sink_0.set_clock_rate(245.76e6, uhd.ALL_MBOARDS)
self.uhd_usrp_sink_0.set_samp_rate(samp_rate)
self.uhd_usrp_sink_0.set_time_unknown_pps(uhd.time_spec())
self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c(
1024, #size
firdes.WIN_BLACKMAN_hARRIS, #wintype
0, #fc
samp_rate, #bw
"", #name
4
)
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)
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(4):
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.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(1)
self.analog_sig_source_x_0_0 = analog.sig_source_c(32000, analog.GR_COS_WAVE, 10, 1, 0, 0)
# Create the options list
self._Tx_Channel_Selector_options = [0, 1]
# Create the labels list
self._Tx_Channel_Selector_labels = ['Chan1', 'Chan2']
# Create the combo box
# Create the radio buttons
self._Tx_Channel_Selector_group_box = Qt.QGroupBox('Tx_Channel_Selector' + ": ")
self._Tx_Channel_Selector_box = Qt.QHBoxLayout()
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._Tx_Channel_Selector_button_group = variable_chooser_button_group()
self._Tx_Channel_Selector_group_box.setLayout(self._Tx_Channel_Selector_box)
for i, _label in enumerate(self._Tx_Channel_Selector_labels):
radio_button = Qt.QRadioButton(_label)
self._Tx_Channel_Selector_box.addWidget(radio_button)
self._Tx_Channel_Selector_button_group.addButton(radio_button, i)
self._Tx_Channel_Selector_callback = lambda i: Qt.QMetaObject.invokeMethod(self._Tx_Channel_Selector_button_group, "updateButtonChecked", Qt.Q_ARG("int", self._Tx_Channel_Selector_options.index(i)))
self._Tx_Channel_Selector_callback(self.Tx_Channel_Selector)
self._Tx_Channel_Selector_button_group.buttonClicked[int].connect(
lambda i: self.set_Tx_Channel_Selector(self._Tx_Channel_Selector_options[i]))
self.top_layout.addWidget(self._Tx_Channel_Selector_group_box)
##################################################
# Connections
##################################################
self.connect((self.analog_sig_source_x_0_0, 0), (self.blocks_multiply_const_vxx_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 0))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 2))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 3))
self.connect((self.blocks_multiply_const_vxx_0, 0), (self.uhd_usrp_sink_0, 1))
self.connect((self.uhd_usrp_source_0, 3), (self.qtgui_freq_sink_x_0, 3))
self.connect((self.uhd_usrp_source_0, 0), (self.qtgui_freq_sink_x_0, 0))
self.connect((self.uhd_usrp_source_0, 2), (self.qtgui_freq_sink_x_0, 2))
self.connect((self.uhd_usrp_source_0, 1), (self.qtgui_freq_sink_x_0, 1))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "Test_grc")
self.settings.setValue("geometry", self.saveGeometry())
event.accept()
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate)
self.uhd_usrp_sink_0.set_samp_rate(self.samp_rate)
self.uhd_usrp_source_0.set_samp_rate(self.samp_rate)
def get_gain(self):
return self.gain
def set_gain(self, gain):
self.gain = gain
self.uhd_usrp_sink_0.set_gain(self.gain, 0)
self.uhd_usrp_sink_0.set_gain(self.gain, 1)
self.uhd_usrp_sink_0.set_gain(self.gain, 2)
self.uhd_usrp_sink_0.set_gain(self.gain, 3)
self.uhd_usrp_source_0.set_gain(self.gain, 0)
self.uhd_usrp_source_0.set_gain(self.gain, 1)
self.uhd_usrp_source_0.set_gain(self.gain, 2)
self.uhd_usrp_source_0.set_gain(self.gain, 3)
def get_freq(self):
return self.freq
def set_freq(self, freq):
self.freq = freq
self.uhd_usrp_sink_0.set_center_freq(self.freq, 0)
self.uhd_usrp_sink_0.set_center_freq(self.freq, 1)
self.uhd_usrp_sink_0.set_center_freq(self.freq, 2)
self.uhd_usrp_sink_0.set_center_freq(self.freq, 3)
self.uhd_usrp_source_0.set_center_freq(self.freq, 0)
self.uhd_usrp_source_0.set_center_freq(self.freq, 1)
self.uhd_usrp_source_0.set_center_freq(self.freq, 2)
self.uhd_usrp_source_0.set_center_freq(self.freq, 3)
def get_Tx_Channel_Selector(self):
return self.Tx_Channel_Selector
def set_Tx_Channel_Selector(self, Tx_Channel_Selector):
self.Tx_Channel_Selector = Tx_Channel_Selector
self._Tx_Channel_Selector_callback(self.Tx_Channel_Selector)
def main(top_block_cls=Test_grc, options=None):
if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.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 sig_handler(sig=None, frame=None):
Qt.QApplication.quit()
signal.signal(signal.SIGINT, sig_handler)
signal.signal(signal.SIGTERM, sig_handler)
timer = Qt.QTimer()
timer.start(500)
timer.timeout.connect(lambda: None)
def quitting():
tb.stop()
tb.wait()
qapp.aboutToQuit.connect(quitting)
qapp.exec_()
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment