kopia lustrzana https://github.com/NanoVNA-Saver/nanovna-saver
Refactored data -> data11
rodzic
430a970563
commit
9ba5f48a96
|
@ -51,22 +51,22 @@ class MagLoopAnalysis(VSWRAnalysis):
|
|||
# only one time
|
||||
start, lowest, end = m
|
||||
if start != end:
|
||||
Q = self.app.data[lowest].freq / \
|
||||
(self.app.data[end].freq - self.app.data[start].freq)
|
||||
Q = self.app.data11[lowest].freq / \
|
||||
(self.app.data11[end].freq - self.app.data11[start].freq)
|
||||
self.layout.addRow(
|
||||
"Q", QtWidgets.QLabel("{}".format(int(Q))))
|
||||
self.app.sweepStartInput.setText(self.app.data[start].freq)
|
||||
self.app.sweepStartInput.setText(self.app.data11[start].freq)
|
||||
self.app.sweepStartInput.textEdited.emit(
|
||||
self.app.sweepStartInput.text())
|
||||
self.app.sweepEndInput.setText(self.app.data[end].freq)
|
||||
self.app.sweepEndInput.setText(self.app.data11[end].freq)
|
||||
self.app.sweepEndInput.textEdited.emit(
|
||||
self.app.sweepEndInput.text())
|
||||
else:
|
||||
self.app.sweepStartInput.setText(
|
||||
self.app.data[start].freq - self.bandwith)
|
||||
self.app.data11[start].freq - self.bandwith)
|
||||
self.app.sweepStartInput.textEdited.emit(
|
||||
self.app.sweepStartInput.text())
|
||||
self.app.sweepEndInput.setText(
|
||||
self.app.data[end].freq + self.bandwith)
|
||||
self.app.data11[end].freq + self.bandwith)
|
||||
self.app.sweepEndInput.textEdited.emit(
|
||||
self.app.sweepEndInput.text())
|
||||
|
|
|
@ -161,7 +161,7 @@ class BandPassAnalysis(Analysis):
|
|||
peak_db = db
|
||||
peak_location = i
|
||||
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data[peak_location].freq)
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data11[peak_location].freq)
|
||||
|
||||
lower_cutoff_location = -1
|
||||
pass_band_db = peak_db
|
||||
|
@ -355,8 +355,8 @@ class BandPassAnalysis(Analysis):
|
|||
|
||||
if upper_cutoff_gain < -4 or lower_cutoff_gain < -4:
|
||||
self.result_label.setText(
|
||||
f"Analysis complete ({len(self.app.data)} points)\n"
|
||||
f"Analysis complete ({len(self.app.data11)} points)\n"
|
||||
f"Insufficient data for analysis. Increase segment count.")
|
||||
else:
|
||||
self.result_label.setText(
|
||||
f"Analysis complete ({len(self.app.data)} points)")
|
||||
f"Analysis complete ({len(self.app.data11)} points)")
|
||||
|
|
|
@ -114,7 +114,7 @@ class BandStopAnalysis(Analysis):
|
|||
peak_db = db
|
||||
peak_location = i
|
||||
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data[peak_location].freq)
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data11[peak_location].freq)
|
||||
|
||||
lower_cutoff_location = -1
|
||||
pass_band_db = peak_db
|
||||
|
@ -309,8 +309,8 @@ class BandStopAnalysis(Analysis):
|
|||
|
||||
if upper_cutoff_gain < -4 or lower_cutoff_gain < -4:
|
||||
self.result_label.setText(
|
||||
f"Analysis complete ({len(self.app.data)} points)\n"
|
||||
f"Analysis complete ({len(self.app.data11)} points)\n"
|
||||
f"Insufficient data for analysis. Increase segment count.")
|
||||
else:
|
||||
self.result_label.setText(
|
||||
f"Analysis complete ({len(self.app.data)} points)")
|
||||
f"Analysis complete ({len(self.app.data11)} points)")
|
||||
|
|
|
@ -102,7 +102,7 @@ class HighPassAnalysis(Analysis):
|
|||
peak_db = db
|
||||
peak_location = i
|
||||
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data[peak_location].freq)
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data11[peak_location].freq)
|
||||
|
||||
self.app.markers[0].setFrequency(str(self.app.data21[peak_location].freq))
|
||||
self.app.markers[0].frequencyInput.setText(str(self.app.data21[peak_location].freq))
|
||||
|
@ -187,4 +187,4 @@ class HighPassAnalysis(Analysis):
|
|||
self.db_per_octave_label.setText("Not calculated")
|
||||
self.db_per_decade_label.setText("Not calculated")
|
||||
|
||||
self.result_label.setText("Analysis complete (" + str(len(self.app.data)) + " points)")
|
||||
self.result_label.setText(f"Analysis complete ({len(self.app.data11)}) points)")
|
||||
|
|
|
@ -106,7 +106,7 @@ class LowPassAnalysis(Analysis):
|
|||
peak_db = db
|
||||
peak_location = i
|
||||
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data[peak_location].freq)
|
||||
logger.debug("Found peak of %f at %d", peak_db, self.app.data11[peak_location].freq)
|
||||
|
||||
self.app.markers[0].setFrequency(str(self.app.data21[peak_location].freq))
|
||||
self.app.markers[0].frequencyInput.setText(str(self.app.data21[peak_location].freq))
|
||||
|
@ -202,4 +202,4 @@ class LowPassAnalysis(Analysis):
|
|||
self.db_per_decade_label.setText("Not calculated")
|
||||
|
||||
self.result_label.setText(
|
||||
"Analysis complete (" + str(len(self.app.data)) + " points)")
|
||||
"Analysis complete (" + str(len(self.app.data11)) + " points)")
|
||||
|
|
|
@ -90,8 +90,8 @@ class PeakSearchAnalysis(Analysis):
|
|||
count = self.input_number_of_peaks.value()
|
||||
if self.rbtn_data_vswr.isChecked():
|
||||
data = []
|
||||
for d in self.app.data:
|
||||
data.append(d.vswr)
|
||||
for d in self.app.data11:
|
||||
data11.append(d.vswr)
|
||||
elif self.rbtn_data_s21_gain.isChecked():
|
||||
data = []
|
||||
for d in self.app.data21:
|
||||
|
@ -130,7 +130,7 @@ class PeakSearchAnalysis(Analysis):
|
|||
logger.debug("Index %d", i)
|
||||
logger.debug("Prominence %f", prominences[i])
|
||||
logger.debug("Index in sweep %d", peaks[i])
|
||||
logger.debug("Frequency %d", self.app.data[peaks[i]].freq)
|
||||
logger.debug("Frequency %d", self.app.data11[peaks[i]].freq)
|
||||
logger.debug("Value %f", data[peaks[i]])
|
||||
|
||||
if self.checkbox_move_markers:
|
||||
|
@ -138,9 +138,9 @@ class PeakSearchAnalysis(Analysis):
|
|||
logger.warning("More peaks found than there are markers")
|
||||
for i in range(min(count, len(self.app.markers))):
|
||||
self.app.markers[i].setFrequency(
|
||||
str(self.app.data[peaks[indices[i]]].freq))
|
||||
str(self.app.data11[peaks[indices[i]]].freq))
|
||||
self.app.markers[i].frequencyInput.setText(
|
||||
str(self.app.data[peaks[indices[i]]].freq))
|
||||
str(self.app.data11[peaks[indices[i]]].freq))
|
||||
|
||||
max_val = -10**10
|
||||
max_idx = -1
|
||||
|
|
|
@ -81,17 +81,17 @@ class SimplePeakSearchAnalysis(Analysis):
|
|||
if self.rbtn_data_vswr.isChecked():
|
||||
suffix = ""
|
||||
data = []
|
||||
for d in self.app.data:
|
||||
for d in self.app.data11:
|
||||
data.append(d.vswr)
|
||||
elif self.rbtn_data_resistance.isChecked():
|
||||
suffix = " \N{OHM SIGN}"
|
||||
data = []
|
||||
for d in self.app.data:
|
||||
for d in self.app.data11:
|
||||
data.append(d.impedance().real)
|
||||
elif self.rbtn_data_reactance.isChecked():
|
||||
suffix = " \N{OHM SIGN}"
|
||||
data = []
|
||||
for d in self.app.data:
|
||||
for d in self.app.data11:
|
||||
data.append(d.impedance().imag)
|
||||
elif self.rbtn_data_s21_gain.isChecked():
|
||||
suffix = " dB"
|
||||
|
@ -117,10 +117,10 @@ class SimplePeakSearchAnalysis(Analysis):
|
|||
return
|
||||
|
||||
self.peak_frequency.setText(
|
||||
format_frequency(self.app.data[idx_peak].freq))
|
||||
format_frequency(self.app.data11[idx_peak].freq))
|
||||
self.peak_value.setText(str(round(data[idx_peak], 3)) + suffix)
|
||||
|
||||
if self.checkbox_move_marker.isChecked() and len(self.app.markers) >= 1:
|
||||
self.app.markers[0].setFrequency(str(self.app.data[idx_peak].freq))
|
||||
self.app.markers[0].setFrequency(str(self.app.data11[idx_peak].freq))
|
||||
self.app.markers[0].frequencyInput.setText(
|
||||
format_frequency(self.app.data[idx_peak].freq))
|
||||
format_frequency(self.app.data11[idx_peak].freq))
|
||||
|
|
|
@ -61,17 +61,17 @@ class VSWRAnalysis(Analysis):
|
|||
def runAnalysis(self):
|
||||
max_dips_shown = self.max_dips_shown
|
||||
data = []
|
||||
for d in self.app.data:
|
||||
for d in self.app.data11:
|
||||
data.append(d.vswr)
|
||||
# min_idx = np.argmin(data)
|
||||
#
|
||||
# logger.debug("Minimum at %d", min_idx)
|
||||
# logger.debug("Value at minimum: %f", data[min_idx])
|
||||
# logger.debug("Frequency: %d", self.app.data[min_idx].freq)
|
||||
# logger.debug("Frequency: %d", self.app.data11[min_idx].freq)
|
||||
#
|
||||
# if self.checkbox_move_marker.isChecked():
|
||||
# self.app.markers[0].setFrequency(str(self.app.data[min_idx].freq))
|
||||
# self.app.markers[0].frequencyInput.setText(str(self.app.data[min_idx].freq))
|
||||
# self.app.markers[0].setFrequency(str(self.app.data11[min_idx].freq))
|
||||
# self.app.markers[0].frequencyInput.setText(str(self.app.data11[min_idx].freq))
|
||||
|
||||
minimums = []
|
||||
min_start = -1
|
||||
|
@ -122,23 +122,23 @@ class VSWRAnalysis(Analysis):
|
|||
logger.debug(
|
||||
"Section from %d to %d, lowest at %d", start, end, lowest)
|
||||
self.layout.addRow("Start", QtWidgets.QLabel(
|
||||
format_frequency(self.app.data[start].freq)))
|
||||
format_frequency(self.app.data11[start].freq)))
|
||||
self.layout.addRow(
|
||||
"Minimum",
|
||||
QtWidgets.QLabel(
|
||||
f"{format_frequency(self.app.data[lowest].freq)}"
|
||||
f"{format_frequency(self.app.data11[lowest].freq)}"
|
||||
f" ({round(data[lowest], 2)})"))
|
||||
self.layout.addRow("End", QtWidgets.QLabel(
|
||||
format_frequency(self.app.data[end].freq)))
|
||||
format_frequency(self.app.data11[end].freq)))
|
||||
self.layout.addRow(
|
||||
"Span",
|
||||
QtWidgets.QLabel(
|
||||
format_frequency(self.app.data[end].freq -
|
||||
self.app.data[start].freq)))
|
||||
format_frequency(self.app.data11[end].freq -
|
||||
self.app.data11[start].freq)))
|
||||
self.layout.addWidget(PeakSearchAnalysis.QHLine())
|
||||
else:
|
||||
self.layout.addRow("Low spot", QtWidgets.QLabel(
|
||||
format_frequency(self.app.data[lowest].freq)))
|
||||
format_frequency(self.app.data11[lowest].freq)))
|
||||
self.layout.addWidget(PeakSearchAnalysis.QHLine())
|
||||
# Remove the final separator line
|
||||
self.layout.removeRow(self.layout.rowCount()-1)
|
||||
|
|
|
@ -96,7 +96,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
self.dataLock = threading.Lock()
|
||||
# TODO: use Touchstone class as data container
|
||||
self.data: List[Datapoint] = []
|
||||
self.data11: List[Datapoint] = []
|
||||
self.data21: List[Datapoint] = []
|
||||
self.referenceS11data: List[Datapoint] = []
|
||||
self.referenceS21data: List[Datapoint] = []
|
||||
|
@ -556,7 +556,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
self.serialPortInput.insertItem(1, f"{iface}", iface)
|
||||
|
||||
def exportFile(self, nr_params: int = 1):
|
||||
if len(self.data) == 0:
|
||||
if len(self.data11) == 0:
|
||||
QtWidgets.QMessageBox.warning(
|
||||
self, "No data to save", "There is no data to save.")
|
||||
return
|
||||
|
@ -584,10 +584,10 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
return
|
||||
|
||||
ts = Touchstone(filename)
|
||||
ts.sdata[0] = self.data
|
||||
ts.sdata[0] = self.data11
|
||||
if nr_params > 1:
|
||||
ts.sdata[1] = self.data21
|
||||
for dp in self.data:
|
||||
for dp in self.data11:
|
||||
ts.sdata[2].append(Datapoint(dp.freq, 0, 0))
|
||||
ts.sdata[3].append(Datapoint(dp.freq, 0, 0))
|
||||
try:
|
||||
|
@ -692,7 +692,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
def saveData(self, data, data21, source=None):
|
||||
with self.dataLock:
|
||||
self.data = data
|
||||
self.data11 = data
|
||||
self.data21 = data21
|
||||
if self.s21att > 0:
|
||||
self.data21 = corr_att_data(self.data21, self.s21att)
|
||||
|
@ -706,10 +706,10 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
def markerUpdated(self, marker: Marker):
|
||||
with self.dataLock:
|
||||
marker.findLocation(self.data)
|
||||
marker.findLocation(self.data11)
|
||||
for m in self.markers:
|
||||
m.resetLabels()
|
||||
m.updateLabels(self.data, self.data21)
|
||||
m.updateLabels(self.data11, self.data21)
|
||||
|
||||
for c in self.subscribing_charts:
|
||||
c.update()
|
||||
|
@ -718,16 +718,16 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
with self.dataLock:
|
||||
for m in self.markers:
|
||||
m.resetLabels()
|
||||
m.updateLabels(self.data, self.data21)
|
||||
m.updateLabels(self.data11, self.data21)
|
||||
|
||||
for c in self.s11charts:
|
||||
c.setData(self.data)
|
||||
c.setData(self.data11)
|
||||
|
||||
for c in self.s21charts:
|
||||
c.setData(self.data21)
|
||||
|
||||
for c in self.combinedCharts:
|
||||
c.setCombinedData(self.data, self.data21)
|
||||
c.setCombinedData(self.data11, self.data21)
|
||||
|
||||
self.sweepProgressBar.setValue(self.worker.percentage)
|
||||
self.windows["tdr"].updateTDR()
|
||||
|
@ -735,7 +735,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
# Find the minimum S11 VSWR:
|
||||
min_vswr = 100
|
||||
min_vswr_freq = -1
|
||||
for d in self.data:
|
||||
for d in self.data11:
|
||||
vswr = d.vswr
|
||||
if min_vswr > vswr > 0:
|
||||
min_vswr = vswr
|
||||
|
@ -819,7 +819,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
|
||||
def setReference(self, s11data=None, s21data=None, source=None):
|
||||
if not s11data:
|
||||
s11data = self.data
|
||||
s11data = self.data11
|
||||
if not s21data:
|
||||
s21data = self.data21
|
||||
self.referenceS11data = s11data
|
||||
|
@ -846,7 +846,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
title = self.baseTitle
|
||||
insert = ""
|
||||
if self.sweepSource != "":
|
||||
insert += f"Sweep: {self.sweepSource} @ {len(self.data)} points"
|
||||
insert += f"Sweep: {self.sweepSource} @ {len(self.data11)} points"
|
||||
if self.referenceSource != "":
|
||||
if insert != "":
|
||||
insert += ", "
|
||||
|
@ -887,7 +887,7 @@ class NanoVNASaver(QtWidgets.QWidget):
|
|||
filename, _ = QtWidgets.QFileDialog.getOpenFileName(
|
||||
filter="Touchstone Files (*.s1p *.s2p);;All files (*.*)")
|
||||
if filename != "":
|
||||
self.data = []
|
||||
self.data11 = []
|
||||
self.data21 = []
|
||||
t = Touchstone(filename)
|
||||
t.load()
|
||||
|
|
|
@ -232,9 +232,9 @@ class CalibrationWindow(QtWidgets.QWidget):
|
|||
if name in ("through", "isolation"):
|
||||
self.app.calibration.insert(name, self.app.data21)
|
||||
else:
|
||||
self.app.calibration.insert(name, self.app.data)
|
||||
self.app.calibration.insert(name, self.app.data11)
|
||||
self.cal_label[name].setText(
|
||||
_format_cal_label(len(self.app.data)))
|
||||
_format_cal_label(len(self.app.data11)))
|
||||
|
||||
def manual_save(self, name: str):
|
||||
if self.checkExpertUser():
|
||||
|
|
|
@ -107,7 +107,7 @@ class TDRWindow(QtWidgets.QWidget):
|
|||
# TODO: Let the user select whether to use high or low resolution TDR?
|
||||
FFT_POINTS = 2**14
|
||||
|
||||
if len(self.app.data) < 2:
|
||||
if len(self.app.data11) < 2:
|
||||
return
|
||||
|
||||
if self.tdr_velocity_dropdown.currentData() == -1:
|
||||
|
@ -121,17 +121,17 @@ class TDRWindow(QtWidgets.QWidget):
|
|||
except ValueError:
|
||||
return
|
||||
|
||||
step_size = self.app.data[1].freq - self.app.data[0].freq
|
||||
step_size = self.app.data11[1].freq - self.app.data11[0].freq
|
||||
if step_size == 0:
|
||||
self.tdr_result_label.setText("")
|
||||
logger.info("Cannot compute cable length at 0 span")
|
||||
return
|
||||
|
||||
s11 = []
|
||||
for d in self.app.data:
|
||||
for d in self.app.data11:
|
||||
s11.append(np.complex(d.re, d.im))
|
||||
|
||||
window = np.blackman(len(self.app.data))
|
||||
window = np.blackman(len(self.app.data11))
|
||||
|
||||
windowed_s11 = window * s11
|
||||
self.td = np.abs(np.fft.ifft(windowed_s11, FFT_POINTS))
|
||||
|
|
Ładowanie…
Reference in New Issue