From 8109c537f698c4f5cd608b5d320e6db227a71af9 Mon Sep 17 00:00:00 2001 From: "Michal Krenek (Mikos)" Date: Fri, 24 Mar 2017 16:51:32 +0100 Subject: [PATCH] Allow setting gain with more precision; tune default parameters of backends --- qspectrumanalyzer/__main__.py | 4 +- qspectrumanalyzer/backends/__init__.py | 10 +-- qspectrumanalyzer/backends/rtl_power.py | 3 + qspectrumanalyzer/backends/rtl_power_fftw.py | 2 +- qspectrumanalyzer/backends/rx_power.py | 11 +++- qspectrumanalyzer/backends/soapy_power.py | 8 ++- .../languages/qspectrumanalyzer_cs.ts | 64 +++++++++---------- qspectrumanalyzer/qspectrumanalyzer.ui | 61 ++++++++++-------- .../qspectrumanalyzer_settings.ui | 4 +- qspectrumanalyzer/ui_qspectrumanalyzer.py | 35 +++++----- .../ui_qspectrumanalyzer_settings.py | 4 +- 11 files changed, 115 insertions(+), 91 deletions(-) diff --git a/qspectrumanalyzer/__main__.py b/qspectrumanalyzer/__main__.py index eee1918..14ef0a8 100755 --- a/qspectrumanalyzer/__main__.py +++ b/qspectrumanalyzer/__main__.py @@ -361,7 +361,7 @@ class QSpectrumAnalyzerMainWindow(QtWidgets.QMainWindow, Ui_QSpectrumAnalyzerMai self.stopFreqSpinBox.setValue(settings.value("stop_freq", 108.0, float)) self.binSizeSpinBox.setValue(settings.value("bin_size", 10.0, float)) self.intervalSpinBox.setValue(settings.value("interval", 10.0, float)) - self.gainSpinBox.setValue(settings.value("gain", 0, int)) + self.gainSpinBox.setValue(settings.value("gain", 0, float)) self.ppmSpinBox.setValue(settings.value("ppm", 0, int)) self.cropSpinBox.setValue(settings.value("crop", 0, int)) self.mainCurveCheckBox.setChecked(settings.value("main_curve", 1, int)) @@ -477,7 +477,7 @@ class QSpectrumAnalyzerMainWindow(QtWidgets.QMainWindow, Ui_QSpectrumAnalyzerMai float(self.stopFreqSpinBox.value()), float(self.binSizeSpinBox.value()), interval=float(self.intervalSpinBox.value()), - gain=int(self.gainSpinBox.value()), + gain=float(self.gainSpinBox.value()), ppm=int(self.ppmSpinBox.value()), crop=int(self.cropSpinBox.value()) / 100.0, single_shot=single_shot, diff --git a/qspectrumanalyzer/backends/__init__.py b/qspectrumanalyzer/backends/__init__.py index 4d9ff6e..08f3401 100644 --- a/qspectrumanalyzer/backends/__init__.py +++ b/qspectrumanalyzer/backends/__init__.py @@ -12,20 +12,20 @@ class BaseInfo: bandwidth_max = 0 bandwidth = 0 gain_min = -1 - gain_max = 49 + gain_max = 49.6 gain = 37 - start_freq_min = 24 + start_freq_min = 0 start_freq_max = 2200 start_freq = 87 - stop_freq_min = 24 + stop_freq_min = 0 stop_freq_max = 2200 stop_freq = 108 bin_size_min = 0 bin_size_max = 2800 bin_size = 10 interval_min = 0 - interval_max = 999 - interval = 10 + interval_max = 3600 + interval = 1 ppm_min = -999 ppm_max = 999 ppm = 0 diff --git a/qspectrumanalyzer/backends/rtl_power.py b/qspectrumanalyzer/backends/rtl_power.py index d65c697..67752ef 100644 --- a/qspectrumanalyzer/backends/rtl_power.py +++ b/qspectrumanalyzer/backends/rtl_power.py @@ -24,6 +24,7 @@ class PowerThread(BasePowerThread): "bin_size": bin_size, "interval": interval, "device": device, + "sample_rate": sample_rate, "hops": 0, "gain": gain, "ppm": ppm, @@ -53,6 +54,8 @@ class PowerThread(BasePowerThread): "-c", "{}".format(self.params["crop"]) ]) + if self.params["sample_rate"] > 0: + cmdline.extend(["-r", "{}M".format(self.params["sample_rate"] / 1e6)]) if self.params["gain"] >= 0: cmdline.extend(["-g", "{}".format(self.params["gain"])]) if self.params["single_shot"]: diff --git a/qspectrumanalyzer/backends/rtl_power_fftw.py b/qspectrumanalyzer/backends/rtl_power_fftw.py index 00eecf0..20fca8c 100644 --- a/qspectrumanalyzer/backends/rtl_power_fftw.py +++ b/qspectrumanalyzer/backends/rtl_power_fftw.py @@ -37,7 +37,7 @@ class PowerThread(BasePowerThread): "interval": interval, "hops": hops, "time": interval / hops, - "gain": gain * 10, + "gain": int(gain * 10), "ppm": ppm, "crop": crop, "overlap": overlap, diff --git a/qspectrumanalyzer/backends/rx_power.py b/qspectrumanalyzer/backends/rx_power.py index 1c1ca21..b2fceac 100644 --- a/qspectrumanalyzer/backends/rx_power.py +++ b/qspectrumanalyzer/backends/rx_power.py @@ -9,11 +9,16 @@ from qspectrumanalyzer.backends import BaseInfo, BasePowerThread class Info(BaseInfo): """rx_power device metadata""" sample_rate_min = 0 - sample_rate_max = 61440000 + sample_rate_max = 0 + sample_rate = 0 start_freq_min = 0 - start_freq_max = 6000 + start_freq_max = 7250 stop_freq_min = 0 - stop_freq_max = 6000 + stop_freq_max = 7250 + gain_min = -1 + gain_max = 999 + bin_size_min = 0 + bin_size_max = 2800 class PowerThread(BasePowerThread): diff --git a/qspectrumanalyzer/backends/soapy_power.py b/qspectrumanalyzer/backends/soapy_power.py index 27ddc9d..809024a 100644 --- a/qspectrumanalyzer/backends/soapy_power.py +++ b/qspectrumanalyzer/backends/soapy_power.py @@ -34,9 +34,13 @@ class Info(BaseInfo): bandwidth_min = 0 bandwidth_max = 61440000 start_freq_min = 0 - start_freq_max = 6000 + start_freq_max = 7250 stop_freq_min = 0 - stop_freq_max = 6000 + stop_freq_max = 7250 + gain_min = -1 + gain_max = 999 + bin_size_min = 0 + bin_size_max = 10000 additional_params = '--even --fft-window boxcar --remove-dc' @classmethod diff --git a/qspectrumanalyzer/languages/qspectrumanalyzer_cs.ts b/qspectrumanalyzer/languages/qspectrumanalyzer_cs.ts index 23e63ac..051a707 100644 --- a/qspectrumanalyzer/languages/qspectrumanalyzer_cs.ts +++ b/qspectrumanalyzer/languages/qspectrumanalyzer_cs.ts @@ -41,22 +41,22 @@ QSpectrumAnalyzerMainWindow - + QSpectrumAnalyzer - + MHz - + kHz - + auto @@ -71,122 +71,122 @@ - + &File - + &Help - + &Start - + S&top - + Si&ngle shot - + Start: - + Stop: - + Corr. [ppm]: - + Crop [%]: - + Main curve - + Colors... - + Max. hold - + Min. hold - + Average - + Smoothing - + ... - + Persistence - + &Settings... - + &Quit - + Ctrl+Q - + &About - + &Bin size: - + &Interval [s]: - + &Gain [dB]: @@ -201,22 +201,22 @@ - + Controls - + Frequency - + Settings - + Levels diff --git a/qspectrumanalyzer/qspectrumanalyzer.ui b/qspectrumanalyzer/qspectrumanalyzer.ui index 404a06d..7a74e28 100644 --- a/qspectrumanalyzer/qspectrumanalyzer.ui +++ b/qspectrumanalyzer/qspectrumanalyzer.ui @@ -143,7 +143,7 @@ - 182 + 197 166 @@ -192,10 +192,10 @@ 3 - 24.000000000000000 + 0.000000000000000 - 1766.000000000000000 + 2200.000000000000000 87.000000000000000 @@ -233,10 +233,10 @@ 3 - 24.000000000000000 + 0.000000000000000 - 1766.000000000000000 + 2200.000000000000000 108.000000000000000 @@ -273,8 +273,11 @@ 3 + + 0.000000000000000 + - 2800.000000000000000 + 10000.000000000000000 10.000000000000000 @@ -348,25 +351,6 @@ - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - auto - - - -1 - - - 49 - - - -1 - - - @@ -492,6 +476,31 @@ + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + auto + + + 1 + + + -1.000000000000000 + + + 999.000000000000000 + + + 1.000000000000000 + + + -1.000000000000000 + + + @@ -573,8 +582,8 @@ persistenceCheckBox persistenceButton histogramPlotLayout - mainPlotLayout waterfallPlotLayout + mainPlotLayout diff --git a/qspectrumanalyzer/qspectrumanalyzer_settings.ui b/qspectrumanalyzer/qspectrumanalyzer_settings.ui index 0a7de0c..dc467fa 100644 --- a/qspectrumanalyzer/qspectrumanalyzer_settings.ui +++ b/qspectrumanalyzer/qspectrumanalyzer_settings.ui @@ -220,7 +220,7 @@ 0.000000000000000 - 61.439999999999998 + 999999.989999999990687 0.010000000000000 @@ -245,7 +245,7 @@ 0.000000000000000 - 61.439999999999998 + 999999.989999999990687 0.010000000000000 diff --git a/qspectrumanalyzer/ui_qspectrumanalyzer.py b/qspectrumanalyzer/ui_qspectrumanalyzer.py index 004b18f..7ea23e1 100644 --- a/qspectrumanalyzer/ui_qspectrumanalyzer.py +++ b/qspectrumanalyzer/ui_qspectrumanalyzer.py @@ -84,7 +84,7 @@ class Ui_QSpectrumAnalyzerMainWindow(object): sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.frequencyDockWidget.sizePolicy().hasHeightForWidth()) self.frequencyDockWidget.setSizePolicy(sizePolicy) - self.frequencyDockWidget.setMinimumSize(QtCore.QSize(182, 166)) + self.frequencyDockWidget.setMinimumSize(QtCore.QSize(197, 166)) self.frequencyDockWidget.setFeatures(QtWidgets.QDockWidget.DockWidgetFloatable|QtWidgets.QDockWidget.DockWidgetMovable) self.frequencyDockWidget.setObjectName("frequencyDockWidget") self.frequencyDockWidgetContents = QtWidgets.QWidget() @@ -105,8 +105,8 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.startFreqSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.startFreqSpinBox.setProperty("showGroupSeparator", True) self.startFreqSpinBox.setDecimals(3) - self.startFreqSpinBox.setMinimum(24.0) - self.startFreqSpinBox.setMaximum(1766.0) + self.startFreqSpinBox.setMinimum(0.0) + self.startFreqSpinBox.setMaximum(2200.0) self.startFreqSpinBox.setProperty("value", 87.0) self.startFreqSpinBox.setObjectName("startFreqSpinBox") self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.startFreqSpinBox) @@ -122,8 +122,8 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.stopFreqSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.stopFreqSpinBox.setProperty("showGroupSeparator", True) self.stopFreqSpinBox.setDecimals(3) - self.stopFreqSpinBox.setMinimum(24.0) - self.stopFreqSpinBox.setMaximum(1766.0) + self.stopFreqSpinBox.setMinimum(0.0) + self.stopFreqSpinBox.setMaximum(2200.0) self.stopFreqSpinBox.setProperty("value", 108.0) self.stopFreqSpinBox.setObjectName("stopFreqSpinBox") self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.stopFreqSpinBox) @@ -139,7 +139,8 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.binSizeSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.binSizeSpinBox.setProperty("showGroupSeparator", True) self.binSizeSpinBox.setDecimals(3) - self.binSizeSpinBox.setMaximum(2800.0) + self.binSizeSpinBox.setMinimum(0.0) + self.binSizeSpinBox.setMaximum(10000.0) self.binSizeSpinBox.setProperty("value", 10.0) self.binSizeSpinBox.setObjectName("binSizeSpinBox") self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.binSizeSpinBox) @@ -172,13 +173,6 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.intervalSpinBox.setProperty("value", 1.0) self.intervalSpinBox.setObjectName("intervalSpinBox") self.gridLayout.addWidget(self.intervalSpinBox, 1, 0, 1, 1) - self.gainSpinBox = QtWidgets.QSpinBox(self.settingsDockWidgetContents) - self.gainSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.gainSpinBox.setMinimum(-1) - self.gainSpinBox.setMaximum(49) - self.gainSpinBox.setProperty("value", -1) - self.gainSpinBox.setObjectName("gainSpinBox") - self.gridLayout.addWidget(self.gainSpinBox, 1, 1, 1, 2) self.label_5 = QtWidgets.QLabel(self.settingsDockWidgetContents) self.label_5.setObjectName("label_5") self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1) @@ -227,6 +221,15 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.cropSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) self.cropSpinBox.setObjectName("cropSpinBox") self.gridLayout.addWidget(self.cropSpinBox, 3, 1, 1, 2) + self.gainSpinBox = QtWidgets.QDoubleSpinBox(self.settingsDockWidgetContents) + self.gainSpinBox.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) + self.gainSpinBox.setDecimals(1) + self.gainSpinBox.setMinimum(-1.0) + self.gainSpinBox.setMaximum(999.0) + self.gainSpinBox.setSingleStep(1.0) + self.gainSpinBox.setProperty("value", -1.0) + self.gainSpinBox.setObjectName("gainSpinBox") + self.gridLayout.addWidget(self.gainSpinBox, 1, 1, 1, 2) self.settingsDockWidget.setWidget(self.settingsDockWidgetContents) QSpectrumAnalyzerMainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.settingsDockWidget) self.levelsDockWidget = QtWidgets.QDockWidget(QSpectrumAnalyzerMainWindow) @@ -293,8 +296,8 @@ class Ui_QSpectrumAnalyzerMainWindow(object): QSpectrumAnalyzerMainWindow.setTabOrder(self.smoothButton, self.persistenceCheckBox) QSpectrumAnalyzerMainWindow.setTabOrder(self.persistenceCheckBox, self.persistenceButton) QSpectrumAnalyzerMainWindow.setTabOrder(self.persistenceButton, self.histogramPlotLayout) - QSpectrumAnalyzerMainWindow.setTabOrder(self.histogramPlotLayout, self.mainPlotLayout) - QSpectrumAnalyzerMainWindow.setTabOrder(self.mainPlotLayout, self.waterfallPlotLayout) + QSpectrumAnalyzerMainWindow.setTabOrder(self.histogramPlotLayout, self.waterfallPlotLayout) + QSpectrumAnalyzerMainWindow.setTabOrder(self.waterfallPlotLayout, self.mainPlotLayout) def retranslateUi(self, QSpectrumAnalyzerMainWindow): _translate = QtCore.QCoreApplication.translate @@ -315,7 +318,6 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.settingsDockWidget.setWindowTitle(_translate("QSpectrumAnalyzerMainWindow", "Settings")) self.label_4.setText(_translate("QSpectrumAnalyzerMainWindow", "&Interval [s]:")) self.label_6.setText(_translate("QSpectrumAnalyzerMainWindow", "&Gain [dB]:")) - self.gainSpinBox.setSpecialValueText(_translate("QSpectrumAnalyzerMainWindow", "auto")) self.label_5.setText(_translate("QSpectrumAnalyzerMainWindow", "Corr. [ppm]:")) self.label_7.setText(_translate("QSpectrumAnalyzerMainWindow", "Crop [%]:")) self.mainCurveCheckBox.setText(_translate("QSpectrumAnalyzerMainWindow", "Main curve")) @@ -327,6 +329,7 @@ class Ui_QSpectrumAnalyzerMainWindow(object): self.smoothButton.setText(_translate("QSpectrumAnalyzerMainWindow", "...")) self.persistenceCheckBox.setText(_translate("QSpectrumAnalyzerMainWindow", "Persistence")) self.persistenceButton.setText(_translate("QSpectrumAnalyzerMainWindow", "...")) + self.gainSpinBox.setSpecialValueText(_translate("QSpectrumAnalyzerMainWindow", "auto")) self.levelsDockWidget.setWindowTitle(_translate("QSpectrumAnalyzerMainWindow", "Levels")) self.action_Settings.setText(_translate("QSpectrumAnalyzerMainWindow", "&Settings...")) self.action_Quit.setText(_translate("QSpectrumAnalyzerMainWindow", "&Quit")) diff --git a/qspectrumanalyzer/ui_qspectrumanalyzer_settings.py b/qspectrumanalyzer/ui_qspectrumanalyzer_settings.py index 4f46752..292f21b 100644 --- a/qspectrumanalyzer/ui_qspectrumanalyzer_settings.py +++ b/qspectrumanalyzer/ui_qspectrumanalyzer_settings.py @@ -88,7 +88,7 @@ class Ui_QSpectrumAnalyzerSettings(object): self.sampleRateSpinBox.setProperty("showGroupSeparator", True) self.sampleRateSpinBox.setDecimals(3) self.sampleRateSpinBox.setMinimum(0.0) - self.sampleRateSpinBox.setMaximum(61.44) + self.sampleRateSpinBox.setMaximum(999999.99) self.sampleRateSpinBox.setSingleStep(0.01) self.sampleRateSpinBox.setProperty("value", 61.44) self.sampleRateSpinBox.setObjectName("sampleRateSpinBox") @@ -97,7 +97,7 @@ class Ui_QSpectrumAnalyzerSettings(object): self.bandwidthSpinBox.setProperty("showGroupSeparator", True) self.bandwidthSpinBox.setDecimals(3) self.bandwidthSpinBox.setMinimum(0.0) - self.bandwidthSpinBox.setMaximum(61.44) + self.bandwidthSpinBox.setMaximum(999999.99) self.bandwidthSpinBox.setSingleStep(0.01) self.bandwidthSpinBox.setProperty("value", 0.0) self.bandwidthSpinBox.setObjectName("bandwidthSpinBox")