diff --git a/NanoVNASaver/Calibration.py b/NanoVNASaver/Calibration.py index cc4eb90..e1184a2 100644 --- a/NanoVNASaver/Calibration.py +++ b/NanoVNASaver/Calibration.py @@ -485,7 +485,7 @@ class CalibrationWindow(QtWidgets.QWidget): def setOffsetDelay(self, value: float): logger.debug("New offset delay value: %f ps", value) - self.app.worker.offsetDelay = value / 10e12 + self.app.worker.offsetDelay = value / 1e12 if len(self.app.worker.rawData11) > 0: # There's raw data, so we can get corrected data logger.debug("Applying new offset to existing sweep data.") diff --git a/NanoVNASaver/Chart.py b/NanoVNASaver/Chart.py index 59db733..f5e439d 100644 --- a/NanoVNASaver/Chart.py +++ b/NanoVNASaver/Chart.py @@ -3619,9 +3619,6 @@ class GroupDelayChart(FrequencyChart): self.reflective = reflective - self.unwrappedData = [] - self.unwrappedReference = [] - self.groupDelay = [] self.groupDelayReference = [] @@ -3640,6 +3637,8 @@ class GroupDelayChart(FrequencyChart): def copy(self): new_chart: GroupDelayChart = super().copy() new_chart.reflective = self.reflective + new_chart.groupDelay = self.groupDelay.copy() + new_chart.groupDelayReference = self.groupDelay.copy() return new_chart def setReference(self, data): @@ -3662,18 +3661,19 @@ class GroupDelayChart(FrequencyChart): rawReference.append(d.phase) if len(self.data) > 0: - self.unwrappedData = np.degrees(np.unwrap(rawData)) + unwrappedData = np.degrees(np.unwrap(rawData)) self.groupDelay = [] for i in range(len(self.data)): + # TODO: Replace with call to RFTools.groupDelay if i == 0: - phase_change = self.unwrappedData[1] - self.unwrappedData[0] + phase_change = unwrappedData[1] - unwrappedData[0] freq_change = self.data[1].freq - self.data[0].freq elif i == len(self.data)-1: idx = len(self.data)-1 - phase_change = self.unwrappedData[idx] - self.unwrappedData[idx-1] + phase_change = unwrappedData[idx] - unwrappedData[idx-1] freq_change = self.data[idx].freq - self.data[idx-1].freq else: - phase_change = self.unwrappedData[i+1] - self.unwrappedData[i-1] + phase_change = unwrappedData[i+1] - unwrappedData[i-1] freq_change = self.data[i+1].freq - self.data[i-1].freq delay = (-phase_change / (freq_change * 360)) * 10e8 if not self.reflective: @@ -3681,18 +3681,18 @@ class GroupDelayChart(FrequencyChart): self.groupDelay.append(delay) if len(self.reference) > 0: - self.unwrappedReference = np.degrees(np.unwrap(rawReference)) + unwrappedReference = np.degrees(np.unwrap(rawReference)) self.groupDelayReference = [] for i in range(len(self.reference)): if i == 0: - phase_change = self.unwrappedReference[1] - self.unwrappedReference[0] + phase_change = unwrappedReference[1] - unwrappedReference[0] freq_change = self.reference[1].freq - self.reference[0].freq elif i == len(self.reference)-1: idx = len(self.reference)-1 - phase_change = self.unwrappedReference[idx] - self.unwrappedReference[idx-1] + phase_change = unwrappedReference[idx] - unwrappedReference[idx-1] freq_change = self.reference[idx].freq - self.reference[idx-1].freq else: - phase_change = self.unwrappedReference[i+1] - self.unwrappedReference[i-1] + phase_change = unwrappedReference[i+1] - unwrappedReference[i-1] freq_change = self.reference[i+1].freq - self.reference[i-1].freq delay = (-phase_change / (freq_change * 360)) * 10e8 if not self.reflective: diff --git a/NanoVNASaver/Marker.py b/NanoVNASaver/Marker.py index 56955a2..0a0b0fc 100644 --- a/NanoVNASaver/Marker.py +++ b/NanoVNASaver/Marker.py @@ -31,6 +31,7 @@ FMT_IND_CAP = SITools.Format(max_nr_digits=5, allow_strip=True) FMT_GROUP_DELAY = SITools.Format(max_nr_digits=5) + def format_q_factor(val: float) -> str: if val < 0 or val > 10000.0: return "\N{INFINITY}" @@ -302,7 +303,7 @@ class Marker(QtCore.QObject): min_distance = max_freq for i in range(len(data)): - if abs(data[i].freq - self.frequency) < min_distance: + if abs(data[i].freq - self.frequency) <= min_distance: min_distance = abs(data[i].freq - self.frequency) else: # We have now started moving away from the nearest point diff --git a/NanoVNASaver/RFTools.py b/NanoVNASaver/RFTools.py index 9280586..9094965 100644 --- a/NanoVNASaver/RFTools.py +++ b/NanoVNASaver/RFTools.py @@ -68,8 +68,6 @@ class Datapoint(NamedTuple): mag = abs(self.z) if mag == 1: return 1 - if mag > 1: - return math.inf return (1 + mag) / (1 - mag) def impedance(self, ref_impedance: float = 50) -> complex: diff --git a/NanoVNASaver/SweepWorker.py b/NanoVNASaver/SweepWorker.py index f0a3122..2d49626 100644 --- a/NanoVNASaver/SweepWorker.py +++ b/NanoVNASaver/SweepWorker.py @@ -168,14 +168,13 @@ class SweepWorker(QtCore.QRunnable): self.signals.finished.emit() return - def updateData(self, values11, values21, offset): + def updateData(self, values11, values21, offset, segment_size = 101): # Update the data from (i*101) to (i+1)*101 - # TODO: Get rid of the 101 point assumptions logger.debug("Calculating data and inserting in existing data at offset %d", offset) for i in range(len(values11)): re, im = values11[i] re21, im21 = values21[i] - freq = self.data11[offset*101 + i].freq + freq = self.data11[offset * segment_size + i].freq rawData11 = Datapoint(freq, re, im) rawData21 = Datapoint(freq, re21, im21) # TODO: Use applyCalibration instead @@ -184,10 +183,10 @@ class SweepWorker(QtCore.QRunnable): if self.app.calibration.isValid2Port(): re21, im21 = self.app.calibration.correct21(re21, im21, freq) - self.data11[offset*101 + i] = Datapoint(freq, re, im) - self.data21[offset * 101 + i] = Datapoint(freq, re21, im21) - self.rawData11[offset * 101 + i] = rawData11 - self.rawData21[offset * 101 + i] = rawData21 + self.data11[offset * segment_size + i] = Datapoint(freq, re, im) + self.data21[offset * segment_size + i] = Datapoint(freq, re21, im21) + self.rawData11[offset * segment_size + i] = rawData11 + self.rawData21[offset * segment_size + i] = rawData21 logger.debug("Saving data to application (%d and %d points)", len(self.data11), len(self.data21)) self.app.saveData(self.data11, self.data21) logger.debug("Sending \"updated\" signal") diff --git a/NanoVNASaver/Touchstone.py b/NanoVNASaver/Touchstone.py index 255ab94..64299ce 100644 --- a/NanoVNASaver/Touchstone.py +++ b/NanoVNASaver/Touchstone.py @@ -129,20 +129,17 @@ class Touchstone: continue return line - def _append_line_data(self, freq: float, data: list): + def _append_line_data(self, freq: int, data: list): data_list = iter(self.sdata) vals = iter(data) for v in vals: if self.opts.format == "ri": - next(data_list).append( - Datapoint(freq, float(v), float(next(vals)))) + next(data_list).append(Datapoint(freq, float(v), float(next(vals)))) if self.opts.format == "ma": - z = cmath.polar(float(v), - math.radians(float(next(vals)))) + z = cmath.rect(float(v), math.radians(float(next(vals)))) next(data_list).append(Datapoint(freq, z.real, z.imag)) if self.opts.format == "db": - z = cmath.polar(math.exp(float(v) / 20), - math.radians(float(next(vals)))) + z = cmath.rect(math.exp(float(v) / 20), math.radians(float(next(vals)))) next(data_list).append(Datapoint(freq, z.real, z.imag)) def load(self): @@ -184,7 +181,7 @@ class Touchstone: # ignore comments at data end data = line.split('!')[0] data = data.split() - freq, data = float(data[0]) * self.opts.factor, data[1:] + freq, data = round(float(data[0]) * self.opts.factor), data[1:] data_len = len(data) # consistency checks diff --git a/NanoVNASaver/about.py b/NanoVNASaver/about.py index 92217c1..a5d114a 100644 --- a/NanoVNASaver/about.py +++ b/NanoVNASaver/about.py @@ -14,5 +14,5 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -version = '0.2.1alpha1' +version = '0.2.1' debug = False