Merge upstream/Development

pull/112/head
Holger Mueller 2019-12-05 13:42:02 +01:00
commit b5ca88e2c8
7 zmienionych plików z 26 dodań i 31 usunięć

Wyświetl plik

@ -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.")

Wyświetl plik

@ -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:

Wyświetl plik

@ -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

Wyświetl plik

@ -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:

Wyświetl plik

@ -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")

Wyświetl plik

@ -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

Wyświetl plik

@ -14,5 +14,5 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
version = '0.2.1alpha1'
version = '0.2.1'
debug = False