new graph style
This commit is contained in:
@ -18,7 +18,11 @@ def normalize_simple(raw: np.ndarray, calib: np.ndarray) -> np.ndarray:
|
||||
|
||||
|
||||
def build_calib_envelopes(calib: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
|
||||
"""Оценить нижнюю/верхнюю огибающие калибровочной кривой."""
|
||||
"""Оценить огибающую по модулю сигнала.
|
||||
|
||||
Возвращает (lower, upper) = (-envelope, +envelope), где envelope —
|
||||
интерполяция через локальные максимумы |calib|.
|
||||
"""
|
||||
n = int(calib.size)
|
||||
if n <= 0:
|
||||
empty = np.zeros((0,), dtype=np.float32)
|
||||
@ -35,11 +39,14 @@ def build_calib_envelopes(calib: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
|
||||
y = y.copy()
|
||||
y[~finite] = np.interp(x[~finite], x[finite], y[finite]).astype(np.float32)
|
||||
|
||||
if n < 3:
|
||||
return y.copy(), y.copy()
|
||||
a = np.abs(y)
|
||||
|
||||
dy = np.diff(y)
|
||||
s = np.sign(dy).astype(np.int8, copy=False)
|
||||
if n < 3:
|
||||
env = a.copy()
|
||||
return -env, env
|
||||
|
||||
da = np.diff(a)
|
||||
s = np.sign(da).astype(np.int8, copy=False)
|
||||
|
||||
if np.any(s == 0):
|
||||
for i in range(1, s.size):
|
||||
@ -51,27 +58,16 @@ def build_calib_envelopes(calib: np.ndarray) -> Tuple[np.ndarray, np.ndarray]:
|
||||
s[s == 0] = 1
|
||||
|
||||
max_idx = np.where((s[:-1] > 0) & (s[1:] < 0))[0] + 1
|
||||
min_idx = np.where((s[:-1] < 0) & (s[1:] > 0))[0] + 1
|
||||
|
||||
x = np.arange(n, dtype=np.float32)
|
||||
|
||||
def _interp_nodes(nodes: np.ndarray) -> np.ndarray:
|
||||
if nodes.size == 0:
|
||||
idx = np.array([0, n - 1], dtype=np.int64)
|
||||
else:
|
||||
idx = np.unique(np.concatenate(([0], nodes, [n - 1]))).astype(np.int64)
|
||||
return np.interp(x, idx.astype(np.float32), y[idx]).astype(np.float32)
|
||||
if max_idx.size == 0:
|
||||
idx = np.array([0, n - 1], dtype=np.int64)
|
||||
else:
|
||||
idx = np.unique(np.concatenate(([0], max_idx, [n - 1]))).astype(np.int64)
|
||||
env = np.interp(x, idx.astype(np.float32), a[idx]).astype(np.float32)
|
||||
|
||||
upper = _interp_nodes(max_idx)
|
||||
lower = _interp_nodes(min_idx)
|
||||
|
||||
swap = lower > upper
|
||||
if np.any(swap):
|
||||
tmp = upper[swap].copy()
|
||||
upper[swap] = lower[swap]
|
||||
lower[swap] = tmp
|
||||
|
||||
return lower, upper
|
||||
return -env, env
|
||||
|
||||
|
||||
def normalize_projector(raw: np.ndarray, calib: np.ndarray) -> np.ndarray:
|
||||
|
||||
Reference in New Issue
Block a user