#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # SPDX-License-Identifier: GPL-3.0 # # GNU Radio Python Flow Graph # Title: Pyephem FSPL v1.0 # Author: spacerfvm # GNU Radio version: 3.10.1.1 from packaging.version import Version as 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 gnuradio import eng_notation from gnuradio import qtgui from gnuradio.filter import firdes import sip from gnuradio import analog from gnuradio import blocks from gnuradio import gr from gnuradio.fft import window import sys import signal from argparse import ArgumentParser from gnuradio.eng_arg import eng_float, intx import pyephemfspltest_epy_block_0 as epy_block_0 # embedded python block import time import threading from gnuradio import qtgui class pyephemfspltest(gr.top_block, Qt.QWidget): def __init__(self): gr.top_block.__init__(self, "Pyephem FSPL v1.0", catch_exceptions=True) Qt.QWidget.__init__(self) self.setWindowTitle("Pyephem FSPL v1.0") 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", "pyephemfspltest") 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.fspl_test = fspl_test = 0 self.variable_qtgui_label_1 = variable_qtgui_label_1 = fspl_test self.samp_rate = samp_rate = 32000 self.atten_test = atten_test = -1.0/(10.0**(fspl_test/20.0)) self.TLE_LINE_2 = TLE_LINE_2 = "2 25544 51.6433 79.0852 0005185 353.3514 119.8705 15.49577743364510" self.TLE_LINE_1 = TLE_LINE_1 = "1 25544U 98067A 22292.82819656 .00008231 00000-0 15426-3 0 9997" self.Radio_1 = Radio_1 = 100e6 self.Name_of_satellite = Name_of_satellite = "ISS (ZARYA)" ################################################## # Blocks ################################################## self.fspl = blocks.probe_signal_f() self._variable_qtgui_label_1_tool_bar = Qt.QToolBar(self) if None: self._variable_qtgui_label_1_formatter = None else: self._variable_qtgui_label_1_formatter = lambda x: eng_notation.num_to_str(x) self._variable_qtgui_label_1_tool_bar.addWidget(Qt.QLabel("Uplink FSPL (dB) = ")) self._variable_qtgui_label_1_label = Qt.QLabel(str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1))) self._variable_qtgui_label_1_tool_bar.addWidget(self._variable_qtgui_label_1_label) self.top_grid_layout.addWidget(self._variable_qtgui_label_1_tool_bar, 3, 0, 1, 1) for r in range(3, 4): self.top_grid_layout.setRowStretch(r, 1) for c in range(0, 1): self.top_grid_layout.setColumnStretch(c, 1) self.qtgui_freq_sink_x_0 = qtgui.freq_sink_c( 1024, #size window.WIN_BLACKMAN_hARRIS, #wintype 0, #fc samp_rate, #bw "", #name 1, None # parent ) 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(True) self.qtgui_freq_sink_x_0.enable_grid(True) 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) self.qtgui_freq_sink_x_0.set_fft_window_normalized(False) labels = ['Source', 'Source with Atten', '', '', '', '', '', '', '', ''] 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(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.qwidget(), Qt.QWidget) self.top_layout.addWidget(self._qtgui_freq_sink_x_0_win) def _fspl_test_probe(): while True: val = self.fspl.level() try: try: self.doc.add_next_tick_callback(functools.partial(self.set_fspl_test,val)) except AttributeError: self.set_fspl_test(val) except AttributeError: pass time.sleep(1.0 / (10)) _fspl_test_thread = threading.Thread(target=_fspl_test_probe) _fspl_test_thread.daemon = True _fspl_test_thread.start() self.epy_block_0 = epy_block_0.blk(Event='None', frequency=Radio_1, tle_line_1=Name_of_satellite, tle_line_2=TLE_LINE_1, tle_line_3=TLE_LINE_2) self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True) self.blocks_multiply_const_vxx_0 = blocks.multiply_const_cc(atten_test) self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, 1000, 1, 0, 0) ################################################## # Connections ################################################## self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0)) self.connect((self.blocks_multiply_const_vxx_0, 0), (self.qtgui_freq_sink_x_0, 0)) self.connect((self.blocks_throttle_0, 0), (self.blocks_multiply_const_vxx_0, 0)) self.connect((self.epy_block_0, 0), (self.fspl, 0)) def closeEvent(self, event): self.settings = Qt.QSettings("GNU Radio", "pyephemfspltest") self.settings.setValue("geometry", self.saveGeometry()) self.stop() self.wait() event.accept() def get_fspl_test(self): return self.fspl_test def set_fspl_test(self, fspl_test): self.fspl_test = fspl_test self.set_atten_test(-1.0/(10.0**(self.fspl_test/20.0))) self.set_variable_qtgui_label_1(self.fspl_test) def get_variable_qtgui_label_1(self): return self.variable_qtgui_label_1 def set_variable_qtgui_label_1(self, variable_qtgui_label_1): self.variable_qtgui_label_1 = variable_qtgui_label_1 Qt.QMetaObject.invokeMethod(self._variable_qtgui_label_1_label, "setText", Qt.Q_ARG("QString", str(self._variable_qtgui_label_1_formatter(self.variable_qtgui_label_1)))) def get_samp_rate(self): return self.samp_rate def set_samp_rate(self, samp_rate): self.samp_rate = samp_rate self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate) self.blocks_throttle_0.set_sample_rate(self.samp_rate) self.qtgui_freq_sink_x_0.set_frequency_range(0, self.samp_rate) def get_atten_test(self): return self.atten_test def set_atten_test(self, atten_test): self.atten_test = atten_test self.blocks_multiply_const_vxx_0.set_k(self.atten_test) def get_TLE_LINE_2(self): return self.TLE_LINE_2 def set_TLE_LINE_2(self, TLE_LINE_2): self.TLE_LINE_2 = TLE_LINE_2 self.epy_block_0.tle_line_3 = self.TLE_LINE_2 def get_TLE_LINE_1(self): return self.TLE_LINE_1 def set_TLE_LINE_1(self, TLE_LINE_1): self.TLE_LINE_1 = TLE_LINE_1 self.epy_block_0.tle_line_2 = self.TLE_LINE_1 def get_Radio_1(self): return self.Radio_1 def set_Radio_1(self, Radio_1): self.Radio_1 = Radio_1 self.epy_block_0.frequency = self.Radio_1 def get_Name_of_satellite(self): return self.Name_of_satellite def set_Name_of_satellite(self, Name_of_satellite): self.Name_of_satellite = Name_of_satellite self.epy_block_0.tle_line_1 = self.Name_of_satellite def main(top_block_cls=pyephemfspltest, 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): 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()