reference cli add
This commit is contained in:
@ -277,6 +277,33 @@ def run_pyqtgraph(args):
|
||||
# Медианные данные для вычитания
|
||||
median_data: Optional[np.ndarray] = None
|
||||
median_subtract_enabled = False
|
||||
# CLI параметры для автоматического сохранения/загрузки
|
||||
ref_out_file = getattr(args, 'ref_out', None)
|
||||
ref_in_file = getattr(args, 'ref_in', None)
|
||||
ref_out_saved = False # Флаг, что медиана уже сохранена
|
||||
|
||||
# Автоматическая загрузка медианы при старте
|
||||
if ref_in_file:
|
||||
try:
|
||||
data = []
|
||||
with open(ref_in_file, 'r') as f:
|
||||
reader = csv.reader(f)
|
||||
next(reader) # Пропускаем заголовок
|
||||
for row in reader:
|
||||
if len(row) >= 2:
|
||||
try:
|
||||
data.append(float(row[1]))
|
||||
except ValueError:
|
||||
continue
|
||||
if data:
|
||||
median_data = np.array(data, dtype=np.float32)
|
||||
median_subtract_enabled = True
|
||||
print(f"[ref-in] Загружена медиана из {ref_in_file} ({len(median_data)} точек), вычитание включено")
|
||||
else:
|
||||
print(f"[ref-in] Предупреждение: файл {ref_in_file} пустой или неверный формат")
|
||||
except Exception as e:
|
||||
print(f"[ref-in] Ошибка загрузки {ref_in_file}: {e}")
|
||||
|
||||
# Авто-уровни цветовой шкалы водопада сырых данных пересчитываются по видимой области.
|
||||
# Для спектров (полное FFT для отрицательных частот)
|
||||
fft_bins = FFT_LEN
|
||||
@ -565,6 +592,32 @@ def run_pyqtgraph(args):
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Автоматическое сохранение медианы при накоплении 1000+ свипов
|
||||
if ref_out_file and not ref_out_saved and ring is not None:
|
||||
nonlocal ref_out_saved
|
||||
filled_count = np.count_nonzero(~np.isnan(ring[:, 0]))
|
||||
if filled_count >= 1000:
|
||||
try:
|
||||
# Получаем последние 1000 свипов
|
||||
ordered = ring if head == 0 else np.roll(ring, -head, axis=0)
|
||||
recent_sweeps = ordered[-1000:, :]
|
||||
median_sweep = np.nanmedian(recent_sweeps, axis=0)
|
||||
|
||||
# Сохраняем в файл
|
||||
with open(ref_out_file, 'w', newline='') as f:
|
||||
writer = csv.writer(f)
|
||||
writer.writerow(['Index', 'Median_Value'])
|
||||
for i, value in enumerate(median_sweep):
|
||||
if np.isfinite(value):
|
||||
writer.writerow([i, float(value)])
|
||||
|
||||
ref_out_saved = True
|
||||
print(f"[ref-out] Сохранена медиана 1000 свипов в {ref_out_file}")
|
||||
if status:
|
||||
status.setText(f"[ref-out] Сохранено в {ref_out_file}")
|
||||
except Exception as e:
|
||||
print(f"[ref-out] Ошибка сохранения: {e}")
|
||||
|
||||
if changed and ring_fft is not None:
|
||||
disp_fft = ring_fft if head == 0 else np.roll(ring_fft, -head, axis=0)
|
||||
disp_fft = disp_fft.T[:, ::-1]
|
||||
|
||||
Reference in New Issue
Block a user