Advertisement
duggabe

HW_tutorial.py

May 21st, 2021
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.59 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. #
  5. # SPDX-License-Identifier: GPL-3.0
  6. #
  7. # GNU Radio Python Flow Graph
  8. # Title: Hardware tutorial
  9. # Author: Barry Duggan
  10. # GNU Radio version: v3.10.0.0git-319-g91ccd28a
  11.  
  12. from distutils.version import StrictVersion
  13.  
  14. if __name__ == '__main__':
  15. import ctypes
  16. import sys
  17. if sys.platform.startswith('linux'):
  18. try:
  19. x11 = ctypes.cdll.LoadLibrary('libX11.so')
  20. x11.XInitThreads()
  21. except:
  22. print("Warning: failed to XInitThreads()")
  23.  
  24. from PyQt5 import Qt
  25. from gnuradio import qtgui
  26. from gnuradio.filter import firdes
  27. import sip
  28. from gnuradio import gr
  29. from gnuradio.fft import window
  30. import sys
  31. import signal
  32. from argparse import ArgumentParser
  33. from gnuradio.eng_arg import eng_float, intx
  34. from gnuradio import eng_notation
  35. from gnuradio import soapy
  36. from gnuradio.qtgui import Range, RangeWidget
  37. from PyQt5 import QtCore
  38.  
  39.  
  40.  
  41. from gnuradio import qtgui
  42.  
  43. class HW_tutorial(gr.top_block, Qt.QWidget):
  44.  
  45. def __init__(self):
  46. gr.top_block.__init__(self, "Hardware tutorial", catch_exceptions=True)
  47. Qt.QWidget.__init__(self)
  48. self.setWindowTitle("Hardware tutorial")
  49. qtgui.util.check_set_qss()
  50. try:
  51. self.setWindowIcon(Qt.QIcon.fromTheme('gnuradio-grc'))
  52. except:
  53. pass
  54. self.top_scroll_layout = Qt.QVBoxLayout()
  55. self.setLayout(self.top_scroll_layout)
  56. self.top_scroll = Qt.QScrollArea()
  57. self.top_scroll.setFrameStyle(Qt.QFrame.NoFrame)
  58. self.top_scroll_layout.addWidget(self.top_scroll)
  59. self.top_scroll.setWidgetResizable(True)
  60. self.top_widget = Qt.QWidget()
  61. self.top_scroll.setWidget(self.top_widget)
  62. self.top_layout = Qt.QVBoxLayout(self.top_widget)
  63. self.top_grid_layout = Qt.QGridLayout()
  64. self.top_layout.addLayout(self.top_grid_layout)
  65.  
  66. self.settings = Qt.QSettings("GNU Radio", "HW_tutorial")
  67.  
  68. try:
  69. if StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
  70. self.restoreGeometry(self.settings.value("geometry").toByteArray())
  71. else:
  72. self.restoreGeometry(self.settings.value("geometry"))
  73. except:
  74. pass
  75.  
  76. ##################################################
  77. # Variables
  78. ##################################################
  79. self.samp_rate = samp_rate = 3840000
  80. self.rf_gain = rf_gain = 50
  81. self.freq = freq = 144215000
  82.  
  83. ##################################################
  84. # Blocks
  85. ##################################################
  86. self._samp_rate_range = Range(192000, 56000000, 1000, 3840000, 200)
  87. self._samp_rate_win = RangeWidget(self._samp_rate_range, self.set_samp_rate, 'Sample Rate', "counter_slider", int, QtCore.Qt.Horizontal)
  88. self.top_layout.addWidget(self._samp_rate_win)
  89. self._rf_gain_range = Range(0, 76, 1, 50, 200)
  90. self._rf_gain_win = RangeWidget(self._rf_gain_range, self.set_rf_gain, 'RF Gain', "counter_slider", int, QtCore.Qt.Horizontal)
  91. self.top_layout.addWidget(self._rf_gain_win)
  92. self._freq_range = Range(70000000, 6000000000, 200000, 144215000, 200)
  93. self._freq_win = RangeWidget(self._freq_range, self.set_freq, 'Frequency', "counter_slider", int, QtCore.Qt.Horizontal)
  94. self.top_layout.addWidget(self._freq_win)
  95. self.soapy_plutosdr_source_0 = None
  96. dev = 'driver=plutosdr'
  97. stream_args = ''
  98. tune_args = ['']
  99. settings = ['']
  100.  
  101. self.soapy_plutosdr_source_0 = soapy.source(dev, "fc32", 1, '',
  102. stream_args, tune_args, settings)
  103. self.soapy_plutosdr_source_0.set_sample_rate(0, samp_rate)
  104. self.soapy_plutosdr_source_0.set_bandwidth(0, 1000000)
  105. self.soapy_plutosdr_source_0.set_gain_mode(0, False)
  106. self.soapy_plutosdr_source_0.set_frequency(0, freq)
  107. self.soapy_plutosdr_source_0.set_gain(0, min(max(rf_gain, 0.0), 73.0))
  108. self.qtgui_sink_x_0 = qtgui.sink_c(
  109. 1024, #fftsize
  110. window.WIN_BLACKMAN_hARRIS, #wintype
  111. freq, #fc
  112. samp_rate, #bw
  113. "Spectrum Analyzer", #name
  114. True, #plotfreq
  115. True, #plotwaterfall
  116. True, #plottime
  117. True, #plotconst
  118. None # parent
  119. )
  120. self.qtgui_sink_x_0.set_update_time(1.0/10)
  121. self._qtgui_sink_x_0_win = sip.wrapinstance(self.qtgui_sink_x_0.pyqwidget(), Qt.QWidget)
  122.  
  123. self.qtgui_sink_x_0.enable_rf_freq(True)
  124.  
  125. self.top_layout.addWidget(self._qtgui_sink_x_0_win)
  126.  
  127.  
  128.  
  129. ##################################################
  130. # Connections
  131. ##################################################
  132. self.connect((self.soapy_plutosdr_source_0, 0), (self.qtgui_sink_x_0, 0))
  133.  
  134.  
  135. def closeEvent(self, event):
  136. self.settings = Qt.QSettings("GNU Radio", "HW_tutorial")
  137. self.settings.setValue("geometry", self.saveGeometry())
  138. self.stop()
  139. self.wait()
  140.  
  141. event.accept()
  142.  
  143. def get_samp_rate(self):
  144. return self.samp_rate
  145.  
  146. def set_samp_rate(self, samp_rate):
  147. self.samp_rate = samp_rate
  148. self.qtgui_sink_x_0.set_frequency_range(self.freq, self.samp_rate)
  149. self.soapy_plutosdr_source_0.set_sample_rate(0, self.samp_rate)
  150.  
  151. def get_rf_gain(self):
  152. return self.rf_gain
  153.  
  154. def set_rf_gain(self, rf_gain):
  155. self.rf_gain = rf_gain
  156. self.soapy_plutosdr_source_0.set_gain(0, min(max(self.rf_gain, 0.0), 73.0))
  157.  
  158. def get_freq(self):
  159. return self.freq
  160.  
  161. def set_freq(self, freq):
  162. self.freq = freq
  163. self.qtgui_sink_x_0.set_frequency_range(self.freq, self.samp_rate)
  164. self.soapy_plutosdr_source_0.set_frequency(0, self.freq)
  165.  
  166.  
  167.  
  168.  
  169. def main(top_block_cls=HW_tutorial, options=None):
  170.  
  171. if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
  172. style = gr.prefs().get_string('qtgui', 'style', 'raster')
  173. Qt.QApplication.setGraphicsSystem(style)
  174. qapp = Qt.QApplication(sys.argv)
  175.  
  176. tb = top_block_cls()
  177.  
  178. tb.start()
  179.  
  180. tb.show()
  181.  
  182. def sig_handler(sig=None, frame=None):
  183. tb.stop()
  184. tb.wait()
  185.  
  186. Qt.QApplication.quit()
  187.  
  188. signal.signal(signal.SIGINT, sig_handler)
  189. signal.signal(signal.SIGTERM, sig_handler)
  190.  
  191. timer = Qt.QTimer()
  192. timer.start(500)
  193. timer.timeout.connect(lambda: None)
  194.  
  195. qapp.exec_()
  196.  
  197. if __name__ == '__main__':
  198. main()
  199.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement