logdetector logic semiapplied

This commit is contained in:
2026-02-24 20:44:46 +03:00
parent 59ffd26fee
commit e07a175b57

View File

@ -37,8 +37,10 @@ FFT_LEN = 1024 # длина БПФ для спектра/водопада сп
# считаем, что сигнал «меньше нуля» и домножаем свип на -1 # считаем, что сигнал «меньше нуля» и домножаем свип на -1
DATA_INVERSION_THRASHOLD = 10.0 DATA_INVERSION_THRASHOLD = 10.0
LOG_DETECTOR_OFFSET = 0.0 LOG_DETECTOR_OFFSET = 0.0
LOG_DETECTOR_SCALER = 1.0 LOG_DETECTOR_SCALER = -0.001
LOG_DETECTOR_BASE = 2.0 LOG_DETECTOR_BASE = 2.0
LOG_DETECTOR_EXP_MIN = -149.0
LOG_DETECTOR_EXP_MAX = 128.0
Number = Union[int, float] Number = Union[int, float]
SweepInfo = Dict[str, Any] SweepInfo = Dict[str, Any]
@ -470,22 +472,41 @@ class SweepReader(threading.Thread):
except Exception: except Exception:
# В случае ошибки просто оставляем как есть # В случае ошибки просто оставляем как есть
pass pass
'''
# Инверсия данных при «отрицательном» уровне (среднее ниже порога) # Инверсия данных при «отрицательном» уровне (среднее ниже порога)
try: try:
m = float(np.nanmean(sweep)) m = float(np.nanmean(sweep))
if np.isfinite(m) and m < DATA_INVERSION_THRASHOLD: if np.isfinite(m) and m < DATA_INVERSION_THRASHOLD:
sweep *= -1.0 sweep *= -1.0
except Exception: except Exception:
pass pass
'''
pre_exp_sweep: Optional[np.ndarray] = None pre_exp_sweep: Optional[np.ndarray] = None
if self._logdetector: if self._logdetector:
try: try:
sweep = (sweep - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER if sweep_1 is not None and sweep_2 is not None:
pre_exp_sweep = sweep.copy() s1_pre = (sweep_1 - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER
with np.errstate(over="ignore", invalid="ignore"): s2_pre = (sweep_2 - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER
sweep = np.power(LOG_DETECTOR_BASE, np.asarray(sweep, dtype=np.float64)).astype(np.float32) s1_pre = np.clip(s1_pre, LOG_DETECTOR_EXP_MIN, LOG_DETECTOR_EXP_MAX)
sweep[~np.isfinite(sweep)] = np.nan s2_pre = np.clip(s2_pre, LOG_DETECTOR_EXP_MIN, LOG_DETECTOR_EXP_MAX)
# with np.errstate(over="ignore", invalid="ignore"):
# sweep_1 = np.power(LOG_DETECTOR_BASE, np.asarray(s1_pre, dtype=np.float64)).astype(np.float32)
# sweep_2 = np.power(LOG_DETECTOR_BASE, np.asarray(s2_pre, dtype=np.float64)).astype(np.float32)
sweep_1 = np.power(LOG_DETECTOR_BASE, np.asarray(s1_pre, dtype=np.float64)).astype(np.float32)
sweep_2 = np.power(LOG_DETECTOR_BASE, np.asarray(s2_pre, dtype=np.float64)).astype(np.float32)
sweep_1[~np.isfinite(sweep_1)] = np.nan
sweep_2[~np.isfinite(sweep_2)] = np.nan
sweep = sweep_1 - sweep_2
else:
sweep = (sweep - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER
sweep = np.clip(sweep, LOG_DETECTOR_EXP_MIN, LOG_DETECTOR_EXP_MAX)
pre_exp_sweep = sweep.copy()
with np.errstate(over="ignore", invalid="ignore"):
sweep = np.power(LOG_DETECTOR_BASE, np.asarray(sweep, dtype=np.float64)).astype(np.float32)
sweep[~np.isfinite(sweep)] = np.nan
except Exception: except Exception:
pass pass