fix calib

This commit is contained in:
awe
2026-03-12 17:58:44 +03:00
parent 2c3259fc59
commit f02de1c3d0
2 changed files with 14 additions and 9 deletions

View File

@ -156,17 +156,12 @@ def normalize_by_envelope(raw: np.ndarray, envelope: np.ndarray) -> np.ndarray:
env = resample_envelope(envelope, raw_arr.size)
out = np.full_like(raw_arr, np.nan, dtype=np.float32)
finite_env = np.abs(env[np.isfinite(env)])
if finite_env.size > 0:
eps = max(float(np.median(finite_env)) * 1e-6, 1e-9)
else:
eps = 1e-9
valid = np.isfinite(raw_arr) & np.isfinite(env) & (np.abs(env) > eps)
den_eps = np.float32(1e-9)
valid = np.isfinite(raw_arr) & np.isfinite(env)
if np.any(valid):
with np.errstate(divide="ignore", invalid="ignore"):
out[valid] = raw_arr[valid] / env[valid]
denom = env[valid] + np.where(env[valid] >= 0.0, den_eps, -den_eps)
out[valid] = raw_arr[valid] / denom
return np.nan_to_num(out, nan=np.nan, posinf=np.nan, neginf=np.nan)

View File

@ -82,6 +82,16 @@ class ProcessingTests(unittest.TestCase):
self.assertTrue(saved_path.endswith(".npy"))
self.assertTrue(np.allclose(loaded, envelope))
def test_normalize_by_envelope_adds_small_epsilon_to_zero_denominator(self):
raw = np.asarray([1.0, 2.0, 3.0], dtype=np.float32)
envelope = np.asarray([0.0, 1.0, -1.0], dtype=np.float32)
normalized = normalize_by_envelope(raw, envelope)
self.assertTrue(np.all(np.isfinite(normalized)))
self.assertGreater(normalized[0], 1e8)
self.assertAlmostEqual(float(normalized[1]), 2.0, places=5)
self.assertAlmostEqual(float(normalized[2]), -3.0, places=5)
def test_load_calib_envelope_rejects_empty_payload(self):
with tempfile.TemporaryDirectory() as tmp_dir:
path = os.path.join(tmp_dir, "empty.npy")