fix graph range
This commit is contained in:
@ -202,13 +202,16 @@ def build_gui():
|
||||
p_norm.setXLink(p_raw)
|
||||
c_norm_amp = p_norm.plot(pen=pg.mkPen((80, 120, 255), width=1))
|
||||
|
||||
# Row 3: normalized phase
|
||||
# Row 3: normalized phase + linear fit + deviation
|
||||
p_ph = win.addPlot(row=3, col=0, title="Нормированная фаза arg(S)")
|
||||
p_ph.showGrid(x=True, y=True, alpha=0.3)
|
||||
p_ph.setLabel("bottom", "Частота", units="ГГц")
|
||||
p_ph.setLabel("left", "Фаза", units="рад")
|
||||
p_ph.setXLink(p_raw)
|
||||
c_ph = p_ph.plot(pen=pg.mkPen((230, 180, 40), width=1))
|
||||
p_ph.addLegend(offset=(10, 10))
|
||||
c_ph = p_ph.plot(pen=pg.mkPen((230, 180, 40), width=1), name="Фаза")
|
||||
c_ph_line = p_ph.plot(pen=pg.mkPen((180, 180, 180), width=1, style=QtCore.Qt.DashLine), name="Лин. прибл.")
|
||||
c_ph_dev = p_ph.plot(pen=pg.mkPen((255, 100, 200), width=1), name="Отклонение")
|
||||
|
||||
# Row 4: FFT distance
|
||||
p_fft = win.addPlot(row=4, col=0, title="FFT — расстояние")
|
||||
@ -217,15 +220,17 @@ def build_gui():
|
||||
p_fft.setLabel("left", "Магнитуда", units="дБ")
|
||||
c_fft = p_fft.plot(pen=pg.mkPen((60, 200, 80), width=1))
|
||||
|
||||
return app, win, (c_main_amp, c_ref_amp, c_norm_ch1, c_norm_ch2, c_norm_amp, c_ph, c_fft)
|
||||
plots = [p_raw, p_ch, p_norm, p_ph, p_fft]
|
||||
curves = (c_main_amp, c_ref_amp, c_norm_ch1, c_norm_ch2, c_norm_amp, c_ph, c_ph_line, c_ph_dev, c_fft)
|
||||
return app, win, curves, plots
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Update loop
|
||||
# ---------------------------------------------------------------------------
|
||||
def make_update(reader, parser, assembler, curves):
|
||||
c_main_amp, c_ref_amp, c_norm_ch1, c_norm_ch2, c_norm_amp, c_ph, c_fft = curves
|
||||
state = {"ref_phase_first": None}
|
||||
def make_update(reader, parser, assembler, curves, plots):
|
||||
c_main_amp, c_ref_amp, c_norm_ch1, c_norm_ch2, c_norm_amp, c_ph, c_ph_line, c_ph_dev, c_fft = curves
|
||||
state = {"ref_phase_first": None, "axes_locked": False}
|
||||
queue = deque(maxlen=64)
|
||||
|
||||
def update():
|
||||
@ -269,9 +274,21 @@ def make_update(reader, parser, assembler, curves):
|
||||
c_norm_amp.setData(freqs_ghz, norm_amp)
|
||||
c_ph.setData(freqs_ghz, phase)
|
||||
|
||||
# Linear fit (line through first and last point) + deviation
|
||||
line = np.linspace(phase[0], phase[-1], len(phase))
|
||||
deviation = phase - line
|
||||
c_ph_line.setData(freqs_ghz, line)
|
||||
c_ph_dev.setData(freqs_ghz, deviation)
|
||||
|
||||
fft_db = 20.0 * np.log10(fft_mag + 1e-12)
|
||||
c_fft.setData(fft_dist, fft_db)
|
||||
|
||||
# Lock axes after first sweep
|
||||
if not state["axes_locked"]:
|
||||
state["axes_locked"] = True
|
||||
for p in plots:
|
||||
p.enableAutoRange(False)
|
||||
|
||||
return update
|
||||
|
||||
|
||||
@ -283,9 +300,9 @@ def main():
|
||||
reader = DataReader(path)
|
||||
parser = LegacyBinaryParser(batch_events=True)
|
||||
assembler = SweepAssembler(fancy=False, apply_inversion=False)
|
||||
app, win, curves = build_gui()
|
||||
app, win, curves, plots = build_gui()
|
||||
|
||||
update = make_update(reader, parser, assembler, curves)
|
||||
update = make_update(reader, parser, assembler, curves, plots)
|
||||
timer = QtCore.QTimer()
|
||||
timer.timeout.connect(update)
|
||||
timer.start(TIMER_MS)
|
||||
|
||||
Reference in New Issue
Block a user