implemented positive and negative values handling
This commit is contained in:
@ -295,21 +295,13 @@ class SweepReader(threading.Thread):
|
|||||||
ys.clear()
|
ys.clear()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# stp X Y
|
# stp X Y (оба целые со знаком). Разделяем по любым пробелам/табам.
|
||||||
if len(line) >= 5 and (line[:3] == b"stp" or line[:3] == b"STP"):
|
if len(line) >= 3:
|
||||||
sp1 = line.find(b" ", 3)
|
parts = line.split()
|
||||||
if sp1 == -1:
|
if len(parts) >= 3 and parts[0].lower() == b"stp":
|
||||||
sp1 = line.find(b"\t", 3)
|
|
||||||
if sp1 == -1:
|
|
||||||
continue
|
|
||||||
sp2 = line.find(b" ", sp1 + 1)
|
|
||||||
if sp2 == -1:
|
|
||||||
sp2 = line.find(b"\t", sp1 + 1)
|
|
||||||
if sp2 == -1:
|
|
||||||
continue
|
|
||||||
try:
|
try:
|
||||||
x = int(line[sp1 + 1 : sp2])
|
x = int(parts[1], 10)
|
||||||
y = int(line[sp2 + 1 :])
|
y = int(parts[2], 10) # поддержка знака: "+…" и "-…"
|
||||||
except Exception:
|
except Exception:
|
||||||
continue
|
continue
|
||||||
xs.append(x)
|
xs.append(x)
|
||||||
@ -415,8 +407,8 @@ def main():
|
|||||||
ax_fft.set_xlabel("Бин")
|
ax_fft.set_xlabel("Бин")
|
||||||
ax_fft.set_ylabel("Амплитуда, дБ")
|
ax_fft.set_ylabel("Амплитуда, дБ")
|
||||||
|
|
||||||
# Фиксированный диапазон по Y для последнего свипа: 0..4095 (12-бит без знака)
|
# Диапазон по Y для последнего свипа: авто по умолчанию (поддерживает отрицательные значения)
|
||||||
fixed_ylim: Optional[Tuple[float, float]] = (0.0, float(2 ** 12 - 1))
|
fixed_ylim: Optional[Tuple[float, float]] = None
|
||||||
# CLI переопределение при необходимости
|
# CLI переопределение при необходимости
|
||||||
if args.ylim:
|
if args.ylim:
|
||||||
try:
|
try:
|
||||||
@ -424,6 +416,7 @@ def main():
|
|||||||
fixed_ylim = (float(y0), float(y1))
|
fixed_ylim = (float(y0), float(y1))
|
||||||
except Exception:
|
except Exception:
|
||||||
sys.stderr.write("[warn] Некорректный формат --ylim, игнорирую. Ожидалось min,max\n")
|
sys.stderr.write("[warn] Некорректный формат --ylim, игнорирую. Ожидалось min,max\n")
|
||||||
|
if fixed_ylim is not None:
|
||||||
ax_line.set_ylim(fixed_ylim)
|
ax_line.set_ylim(fixed_ylim)
|
||||||
|
|
||||||
# Водопад (будет инициализирован при первом свипе)
|
# Водопад (будет инициализирован при первом свипе)
|
||||||
@ -569,7 +562,20 @@ def main():
|
|||||||
line_obj.set_data(xs, current_sweep)
|
line_obj.set_data(xs, current_sweep)
|
||||||
# Лимиты по X постоянные под текущую ширину
|
# Лимиты по X постоянные под текущую ширину
|
||||||
ax_line.set_xlim(0, max(1, current_sweep.size - 1))
|
ax_line.set_xlim(0, max(1, current_sweep.size - 1))
|
||||||
# Y-лимиты фиксированы (±2048) или из --ylim; не автоподстраиваем
|
# Адаптивные Y-лимиты (если не задан --ylim)
|
||||||
|
if fixed_ylim is None:
|
||||||
|
y0 = float(np.nanmin(current_sweep))
|
||||||
|
y1 = float(np.nanmax(current_sweep))
|
||||||
|
if np.isfinite(y0) and np.isfinite(y1):
|
||||||
|
if y0 == y1:
|
||||||
|
pad = max(1.0, abs(y0) * 0.05)
|
||||||
|
y0 -= pad
|
||||||
|
y1 += pad
|
||||||
|
else:
|
||||||
|
pad = 0.05 * (y1 - y0)
|
||||||
|
y0 -= pad
|
||||||
|
y1 += pad
|
||||||
|
ax_line.set_ylim(y0, y1)
|
||||||
|
|
||||||
# Обновление спектра текущего свипа
|
# Обновление спектра текущего свипа
|
||||||
take_fft = min(int(current_sweep.size), FFT_LEN)
|
take_fft = min(int(current_sweep.size), FFT_LEN)
|
||||||
@ -694,14 +700,15 @@ def run_pyqtgraph(args):
|
|||||||
ring_fft: Optional[np.ndarray] = None
|
ring_fft: Optional[np.ndarray] = None
|
||||||
freq_shared: Optional[np.ndarray] = None
|
freq_shared: Optional[np.ndarray] = None
|
||||||
y_min_fft, y_max_fft = None, None
|
y_min_fft, y_max_fft = None, None
|
||||||
# Фиксированный диапазон по Y: 0..4095 (можно переопределить --ylim)
|
# Диапазон по Y: авто по умолчанию (поддерживает отрицательные значения)
|
||||||
fixed_ylim: Optional[Tuple[float, float]] = (0.0, float(2 ** 12 - 1))
|
fixed_ylim: Optional[Tuple[float, float]] = None
|
||||||
if args.ylim:
|
if args.ylim:
|
||||||
try:
|
try:
|
||||||
y0, y1 = args.ylim.split(",")
|
y0, y1 = args.ylim.split(",")
|
||||||
fixed_ylim = (float(y0), float(y1))
|
fixed_ylim = (float(y0), float(y1))
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
if fixed_ylim is not None:
|
||||||
p_line.setYRange(fixed_ylim[0], fixed_ylim[1], padding=0)
|
p_line.setYRange(fixed_ylim[0], fixed_ylim[1], padding=0)
|
||||||
|
|
||||||
def ensure_buffer(_w: int):
|
def ensure_buffer(_w: int):
|
||||||
|
|||||||
Reference in New Issue
Block a user