add calibration file
This commit is contained in:
@ -109,3 +109,41 @@ def normalize_by_calib(raw: np.ndarray, calib: np.ndarray, norm_type: str) -> np
|
||||
if nt == "simple":
|
||||
return normalize_simple(raw, calib)
|
||||
return normalize_projector(raw, calib)
|
||||
|
||||
|
||||
def normalize_by_envelope(raw: np.ndarray, envelope: np.ndarray) -> np.ndarray:
|
||||
"""Нормировка свипа через проекцию на огибающую из файла.
|
||||
|
||||
Воспроизводит логику normalize_projector: проецирует raw в [-1000, +1000]
|
||||
используя готовую верхнюю огибающую (upper = envelope, lower = -envelope).
|
||||
"""
|
||||
w = min(raw.size, envelope.size)
|
||||
if w <= 0:
|
||||
return raw
|
||||
|
||||
out = np.full_like(raw, np.nan, dtype=np.float32)
|
||||
raw_seg = np.asarray(raw[:w], dtype=np.float32)
|
||||
upper = np.asarray(envelope[:w], dtype=np.float32)
|
||||
lower = -upper
|
||||
span = upper - lower # = 2 * upper
|
||||
|
||||
finite_span = span[np.isfinite(span) & (span > 0)]
|
||||
if finite_span.size > 0:
|
||||
eps = max(float(np.median(finite_span)) * 1e-6, 1e-9)
|
||||
else:
|
||||
eps = 1e-9
|
||||
|
||||
valid = (
|
||||
np.isfinite(raw_seg)
|
||||
& np.isfinite(lower)
|
||||
& np.isfinite(upper)
|
||||
& (span > eps)
|
||||
)
|
||||
if np.any(valid):
|
||||
proj = np.empty_like(raw_seg, dtype=np.float32)
|
||||
proj[valid] = ((2.0 * (raw_seg[valid] - lower[valid]) / span[valid]) - 1.0) * 1000.0
|
||||
proj[valid] = np.clip(proj[valid], -1000.0, 1000.0)
|
||||
proj[~valid] = np.nan
|
||||
out[:w] = proj
|
||||
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user