Browse Source

fix 'Assertion "not (fftsize & (fftsize -1))#The FFT Size should be a power of 2" failed.'; update fm_radio.py with gnuradio-companion v3.10.5.1-3 (includes changes of commits below)

https://git.hammerle.me/fphammerle/gnuradio-fm-radio-receiver/commit/2f14e1b6cadfa3aa50d03c3e65c6ee6dbc8514a1
https://git.hammerle.me/fphammerle/gnuradio-fm-radio-receiver/commit/df1c5827c17bf442e488b6ef809e84adcfee8d1e
Fabian Peter Hammerle 7 months ago
parent
commit
96b21397c9
2 changed files with 51 additions and 34 deletions
  1. 1 1
      fm_radio.grc
  2. 50 33
      fm_radio.py

+ 1 - 1
fm_radio.grc

@@ -297,7 +297,7 @@ blocks:
     color9: '0'
     comment: ''
     fc: frequency_mhz*1e6
-    fftsize: '1048'
+    fftsize: '1024'
     freqhalf: 'True'
     grid: 'False'
     gui_hint: ''

+ 50 - 33
fm_radio.py

@@ -6,9 +6,9 @@
 #
 # GNU Radio Python Flow Graph
 # Title: FM Radio Receiver
-# GNU Radio version: 3.8.1.0
+# GNU Radio version: 3.10.5.1
 
-from distutils.version import StrictVersion
+from packaging.version import Version as StrictVersion
 
 if __name__ == '__main__':
     import ctypes
@@ -29,20 +29,25 @@ from gnuradio import audio
 from gnuradio import blocks
 from gnuradio import filter
 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
 from gnuradio import eng_notation
 from gnuradio.qtgui import Range, RangeWidget
+from PyQt5 import QtCore
 import osmosdr
 import time
+
+
+
 from gnuradio import qtgui
 
 class fm_radio(gr.top_block, Qt.QWidget):
 
     def __init__(self):
-        gr.top_block.__init__(self, "FM Radio Receiver")
+        gr.top_block.__init__(self, "FM Radio Receiver", catch_exceptions=True)
         Qt.QWidget.__init__(self)
         self.setWindowTitle("FM Radio Receiver")
         qtgui.util.check_set_qss()
@@ -84,19 +89,23 @@ class fm_radio(gr.top_block, Qt.QWidget):
         ##################################################
         # Blocks
         ##################################################
+
         self._volume_range = Range(0, 1, 0.05, 0.5, 200)
-        self._volume_win = RangeWidget(self._volume_range, self.set_volume, 'Volume', "counter_slider", float)
-        self.top_grid_layout.addWidget(self._volume_win)
+        self._volume_win = RangeWidget(self._volume_range, self.set_volume, "Volume", "counter_slider", float, QtCore.Qt.Horizontal)
+        self.top_layout.addWidget(self._volume_win)
         self._frequency_mhz_range = Range(87.5, 108, 0.1, 98.3, 200)
-        self._frequency_mhz_win = RangeWidget(self._frequency_mhz_range, self.set_frequency_mhz, 'Frequency MHz', "counter_slider", float)
-        self.top_grid_layout.addWidget(self._frequency_mhz_win)
+        self._frequency_mhz_win = RangeWidget(self._frequency_mhz_range, self.set_frequency_mhz, "Frequency MHz", "counter_slider", float, QtCore.Qt.Horizontal)
+        self.top_layout.addWidget(self._frequency_mhz_win)
         self.rtlsdr_source_0 = osmosdr.source(
             args="numchan=" + str(1) + " " + ""
         )
         self.rtlsdr_source_0.set_time_unknown_pps(osmosdr.time_spec_t())
         self.rtlsdr_source_0.set_sample_rate(samp_rate)
-        self.rtlsdr_source_0.set_center_freq(frequency_mhz*1e6, 0)
+        self.rtlsdr_source_0.set_center_freq((frequency_mhz*1e6), 0)
         self.rtlsdr_source_0.set_freq_corr(0, 0)
+        self.rtlsdr_source_0.set_dc_offset_mode(0, 0)
+        self.rtlsdr_source_0.set_iq_balance_mode(0, 0)
+        self.rtlsdr_source_0.set_gain_mode(False, 0)
         self.rtlsdr_source_0.set_gain(20, 0)
         self.rtlsdr_source_0.set_if_gain(20, 0)
         self.rtlsdr_source_0.set_bb_gain(20, 0)
@@ -105,15 +114,16 @@ class fm_radio(gr.top_block, Qt.QWidget):
         self.rational_resampler_xxx_0 = filter.rational_resampler_fff(
                 interpolation=audio_sample_rate_hertz,
                 decimation=channel_width_hertz,
-                taps=None,
-                fractional_bw=None)
+                taps=[],
+                fractional_bw=0)
         self.qtgui_waterfall_sink_x_0 = qtgui.waterfall_sink_c(
-            1048, #size
-            firdes.WIN_BLACKMAN_hARRIS, #wintype
-            frequency_mhz*1e6, #fc
+            1024, #size
+            window.WIN_BLACKMAN_hARRIS, #wintype
+            (frequency_mhz*1e6), #fc
             samp_rate, #bw
             "", #name
-            1 #number of inputs
+            1, #number of inputs
+            None # parent
         )
         self.qtgui_waterfall_sink_x_0.set_update_time(0.10)
         self.qtgui_waterfall_sink_x_0.enable_grid(False)
@@ -138,18 +148,20 @@ class fm_radio(gr.top_block, Qt.QWidget):
 
         self.qtgui_waterfall_sink_x_0.set_intensity_range(-140, 10)
 
-        self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.pyqwidget(), Qt.QWidget)
-        self.top_grid_layout.addWidget(self._qtgui_waterfall_sink_x_0_win)
+        self._qtgui_waterfall_sink_x_0_win = sip.wrapinstance(self.qtgui_waterfall_sink_x_0.qwidget(), Qt.QWidget)
+
+        self.top_layout.addWidget(self._qtgui_waterfall_sink_x_0_win)
         self.qtgui_freq_sink_x_0 = qtgui.freq_sink_f(
             1024, #size
-            firdes.WIN_BLACKMAN_hARRIS, #wintype
+            window.WIN_BLACKMAN_hARRIS, #wintype
             0, #fc
             channel_width_hertz, #bw
             "Demod Out", #name
-            1
+            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_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)
@@ -157,6 +169,7 @@ class fm_radio(gr.top_block, Qt.QWidget):
         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)
 
         self.qtgui_freq_sink_x_0.disable_legend()
 
@@ -180,16 +193,16 @@ class fm_radio(gr.top_block, Qt.QWidget):
             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_grid_layout.addWidget(self._qtgui_freq_sink_x_0_win)
+        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)
         self.low_pass_filter_0 = filter.fir_filter_ccf(
-            int(samp_rate/channel_width_hertz),
+            (int(samp_rate/channel_width_hertz)),
             firdes.low_pass(
                 2,
                 samp_rate,
                 100000,
                 10000,
-                firdes.WIN_KAISER,
+                window.WIN_KAISER,
                 6.76))
         self.blocks_multiply_const_vxx_0 = blocks.multiply_const_ff(volume)
         self.audio_sink_0 = audio.sink(audio_sample_rate_hertz, '', True)
@@ -199,7 +212,6 @@ class fm_radio(gr.top_block, Qt.QWidget):
         )
 
 
-
         ##################################################
         # Connections
         ##################################################
@@ -211,9 +223,13 @@ class fm_radio(gr.top_block, Qt.QWidget):
         self.connect((self.rtlsdr_source_0, 0), (self.low_pass_filter_0, 0))
         self.connect((self.rtlsdr_source_0, 0), (self.qtgui_waterfall_sink_x_0, 0))
 
+
     def closeEvent(self, event):
         self.settings = Qt.QSettings("GNU Radio", "fm_radio")
         self.settings.setValue("geometry", self.saveGeometry())
+        self.stop()
+        self.wait()
+
         event.accept()
 
     def get_volume(self):
@@ -228,8 +244,8 @@ class fm_radio(gr.top_block, Qt.QWidget):
 
     def set_samp_rate(self, samp_rate):
         self.samp_rate = samp_rate
-        self.low_pass_filter_0.set_taps(firdes.low_pass(2, self.samp_rate, 100000, 10000, firdes.WIN_KAISER, 6.76))
-        self.qtgui_waterfall_sink_x_0.set_frequency_range(self.frequency_mhz*1e6, self.samp_rate)
+        self.low_pass_filter_0.set_taps(firdes.low_pass(2, self.samp_rate, 100000, 10000, window.WIN_KAISER, 6.76))
+        self.qtgui_waterfall_sink_x_0.set_frequency_range((self.frequency_mhz*1e6), self.samp_rate)
         self.rtlsdr_source_0.set_sample_rate(self.samp_rate)
 
     def get_frequency_mhz(self):
@@ -237,8 +253,8 @@ class fm_radio(gr.top_block, Qt.QWidget):
 
     def set_frequency_mhz(self, frequency_mhz):
         self.frequency_mhz = frequency_mhz
-        self.qtgui_waterfall_sink_x_0.set_frequency_range(self.frequency_mhz*1e6, self.samp_rate)
-        self.rtlsdr_source_0.set_center_freq(self.frequency_mhz*1e6, 0)
+        self.qtgui_waterfall_sink_x_0.set_frequency_range((self.frequency_mhz*1e6), self.samp_rate)
+        self.rtlsdr_source_0.set_center_freq((self.frequency_mhz*1e6), 0)
 
     def get_channel_width_hertz(self):
         return self.channel_width_hertz
@@ -255,6 +271,7 @@ class fm_radio(gr.top_block, Qt.QWidget):
 
 
 
+
 def main(top_block_cls=fm_radio, options=None):
 
     if StrictVersion("4.5.0") <= StrictVersion(Qt.qVersion()) < StrictVersion("5.0.0"):
@@ -263,10 +280,15 @@ def main(top_block_cls=fm_radio, 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)
@@ -276,12 +298,7 @@ def main(top_block_cls=fm_radio, options=None):
     timer.start(500)
     timer.timeout.connect(lambda: None)
 
-    def quitting():
-        tb.stop()
-        tb.wait()
-    qapp.aboutToQuit.connect(quitting)
     qapp.exec_()
 
-
 if __name__ == '__main__':
     main()