logdetector logic semiapplied
This commit is contained in:
@ -37,8 +37,10 @@ FFT_LEN = 1024 # длина БПФ для спектра/водопада сп
|
||||
# считаем, что сигнал «меньше нуля» и домножаем свип на -1
|
||||
DATA_INVERSION_THRASHOLD = 10.0
|
||||
LOG_DETECTOR_OFFSET = 0.0
|
||||
LOG_DETECTOR_SCALER = 1.0
|
||||
LOG_DETECTOR_SCALER = -0.001
|
||||
LOG_DETECTOR_BASE = 2.0
|
||||
LOG_DETECTOR_EXP_MIN = -149.0
|
||||
LOG_DETECTOR_EXP_MAX = 128.0
|
||||
|
||||
Number = Union[int, float]
|
||||
SweepInfo = Dict[str, Any]
|
||||
@ -470,18 +472,37 @@ class SweepReader(threading.Thread):
|
||||
except Exception:
|
||||
# В случае ошибки просто оставляем как есть
|
||||
pass
|
||||
'''
|
||||
# Инверсия данных при «отрицательном» уровне (среднее ниже порога)
|
||||
|
||||
|
||||
try:
|
||||
m = float(np.nanmean(sweep))
|
||||
if np.isfinite(m) and m < DATA_INVERSION_THRASHOLD:
|
||||
sweep *= -1.0
|
||||
except Exception:
|
||||
pass
|
||||
'''
|
||||
|
||||
pre_exp_sweep: Optional[np.ndarray] = None
|
||||
if self._logdetector:
|
||||
try:
|
||||
if sweep_1 is not None and sweep_2 is not None:
|
||||
s1_pre = (sweep_1 - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER
|
||||
s2_pre = (sweep_2 - LOG_DETECTOR_OFFSET) * LOG_DETECTOR_SCALER
|
||||
s1_pre = np.clip(s1_pre, LOG_DETECTOR_EXP_MIN, LOG_DETECTOR_EXP_MAX)
|
||||
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)
|
||||
|
||||
Reference in New Issue
Block a user