Merge branch 'pr/gaionim/20' into development

pull/190/head
Holger Müller 2020-06-21 21:03:35 +02:00
commit 62958d31c3
3 zmienionych plików z 50 dodań i 2 usunięć

Wyświetl plik

@ -52,6 +52,7 @@ from .SweepWorker import SweepWorker
from .Settings import BandsModel
from .Touchstone import Touchstone
from .about import version as ver
from NanoVNASaver.RFTools import corrAttData
logger = logging.getLogger(__name__)
@ -65,6 +66,7 @@ class NanoVNASaver(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.s21att = 0.0
if getattr(sys, 'frozen', False):
logger.debug("Running from pyinstaller bundle")
self.icon = QtGui.QIcon(f"{sys._MEIPASS}/icon_48x48.png") # pylint: disable=no-member
@ -692,7 +694,11 @@ class NanoVNASaver(QtWidgets.QWidget):
def saveData(self, data, data12, source=None):
if self.dataLock.acquire(blocking=True):
self.data = data
self.data21 = data12
if self.s21att > 0:
corData12 = corrAttData(data12, self.s21att)
self.data21 = corData12
else:
self.data21 = data12
else:
logger.error("Failed acquiring data lock while saving.")
self.dataLock.release()

Wyświetl plik

@ -144,3 +144,21 @@ def groupDelay(data: List[Datapoint], index: int) -> float:
delta_angle = -1 * (delta_angle % math.tau)
val = -delta_angle / math.tau / delta_freq
return val
def corrAttData(data: Datapoint, att: float):
"""Correct the ratio for a given attenuation on s21 input"""
if att <= 0:
return data
else:
att = 10**(att/20)
ndata = []
for i in range(len(data)):
freq, re, im = data[i]
orig = complex(re, im)
corrected = orig * att
ndata.append(Datapoint(freq, corrected.real, corrected.imag))
return ndata

Wyświetl plik

@ -75,14 +75,22 @@ class SweepSettingsWindow(QtWidgets.QWidget):
"Averaging allows discarding outlying samples to get better averages."))
settings_layout.addRow(
QtWidgets.QLabel("Common values are 3/0, 5/2, 9/4 and 25/6."))
self.s21att = QtWidgets.QLineEdit("0")
settings_layout.addRow(QtWidgets.QLabel(""))
settings_layout.addRow(QtWidgets.QLabel("Some times when you measure amplifiers you need to use an attenuator"))
settings_layout.addRow(QtWidgets.QLabel("in line with the S21 input (CH1) here you can specify it."))
settings_layout.addRow("Attenuator in port CH1 (s21) in dB", self.s21att)
settings_layout.addRow(QtWidgets.QLabel("Common values with un-un are 16.9 (49:1 2450) 9.54 (9:1 450)"))
self.continuous_sweep_radiobutton.toggled.connect(
lambda: self.app.worker.setContinuousSweep(
self.continuous_sweep_radiobutton.isChecked()))
self.averaged_sweep_radiobutton.toggled.connect(self.updateAveraging)
self.averages.textEdited.connect(self.updateAveraging)
self.truncates.textEdited.connect(self.updateAveraging)
self.s21att.textEdited.connect(self.setS21Attenuator)
layout.addWidget(settings_box)
band_sweep_box = QtWidgets.QGroupBox("Sweep band")
@ -147,6 +155,22 @@ class SweepSettingsWindow(QtWidgets.QWidget):
f"Sweep span: {format_frequency_short(start)}"
f" to {format_frequency_short(stop)}")
def setS21Attenuator(self):
try:
s21att = float(self.s21att.text())
except:
s21att = 0
if (s21att < 0):
logger.warning("Values for attenuator are absolute and with no minus sign, resetting.")
self.s21att.setText("0")
else:
logger.info("Setting an attenuator of %.2f dB inline with the CH1/S21 input", s21att)
self.app.s21att = s21att
def setBandSweep(self):
index_start = self.band_list.model().index(self.band_list.currentIndex(), 1)
index_stop = self.band_list.model().index(self.band_list.currentIndex(), 2)