概要
pythonでgnuradioやってみた。
練習問題やってみた。
練習問題
dialとcompassを使え。
写真
サンプルコード
from PyQt5 import Qt
from gnuradio import qtgui
from gnuradio import blocks
from gnuradio import gr
from gnuradio.filter import firdes
from gnuradio.fft import window
import sys
import signal
from gnuradio.eng_arg import eng_float, intx
from gnuradio import eng_notation
class ui1(gr.top_block, Qt.QWidget):
def __init__(self):
gr.top_block.__init__(self, "Not titled yet", catch_exceptions = True)
Qt.QWidget.__init__(self)
self.setWindowTitle("Not titled yet")
qtgui.util.check_set_qss()
try:
self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
except BaseException as exc:
print(f"Qt GUI: Could not set Icon: {str(exc)}", file = sys.stderr)
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", "ui1")
try:
geometry = self.settings.value("geometry")
if geometry:
self.restoreGeometry(geometry)
except BaseException as exc:
print(f"Qt GUI: Could not restore geometry: {str(exc)}", file = sys.stderr)
self.variable_qtgui_dial_control_0 = variable_qtgui_dial_control_0 = 0
self.samp_rate = samp_rate = 32000
if "int" == "int":
isFloat = False
scaleFactor = 1
else:
isFloat = True
scaleFactor = 1
_variable_qtgui_dial_control_0_dial_control = qtgui.GrDialControl('angle', self, 0, 360, 0, "default", self.set_variable_qtgui_dial_control_0, isFloat, scaleFactor, 100, True, "'value'")
self.variable_qtgui_dial_control_0 = _variable_qtgui_dial_control_0_dial_control
self.top_layout.addWidget(_variable_qtgui_dial_control_0_dial_control)
self.qtgui_compass_0 = self._qtgui_compass_0_win = qtgui.GrCompass('', 250, 0.10, False, 1, True, 1, "default")
self._qtgui_compass_0_win.setColors("default","red", "black", "black")
self._qtgui_compass_0 = self._qtgui_compass_0_win
self.top_layout.addWidget(self._qtgui_compass_0_win)
self.blocks_throttle2_0 = blocks.throttle(gr.sizeof_gr_complex * 1, samp_rate, True, 0 if "auto" == "auto" else max(int(float(0.1) * samp_rate) if "auto" == "time" else int(0.1), 1) )
self.blocks_null_source_0 = blocks.null_source(gr.sizeof_gr_complex * 1)
self.blocks_null_sink_0 = blocks.null_sink(gr.sizeof_gr_complex * 1)
self.msg_connect((self.variable_qtgui_dial_control_0, 'value'), (self.qtgui_compass_0, 'angle'))
self.connect((self.blocks_null_source_0, 0), (self.blocks_throttle2_0, 0))
self.connect((self.blocks_throttle2_0, 0), (self.blocks_null_sink_0, 0))
def closeEvent(self, event):
self.settings = Qt.QSettings("GNU Radio", "ui1")
self.settings.setValue("geometry", self.saveGeometry())
self.stop()
self.wait()
event.accept()
def get_variable_qtgui_dial_control_0(self):
return self.variable_qtgui_dial_control_0
def set_variable_qtgui_dial_control_0(self, variable_qtgui_dial_control_0):
self.variable_qtgui_dial_control_0 = variable_qtgui_dial_control_0
def get_samp_rate(self):
return self.samp_rate
def set_samp_rate(self, samp_rate):
self.samp_rate = samp_rate
self.blocks_throttle2_0.set_sample_rate(self.samp_rate)
def main(top_block_cls = ui1, options = None):
qapp = Qt.QApplication(sys.argv)
tb = top_block_cls()
tb.start()
tb.show()
def sig_handler(sig = None, frame = None):
tb.stop()
tb.wait()
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)
qapp.exec_()
if __name__ == '__main__':
main()
以上。