Created
September 30, 2021 07:29
-
-
Save marcusmueller/728f955b68781449bcb973a937bd4f56 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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