fix calib
This commit is contained in:
@ -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)
|
||||
|
||||
|
||||
|
||||
@ -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")
|
||||
|
||||
Reference in New Issue
Block a user