From f02de1c3d0bd8d4c35d29c0de4aeb128bea8df18 Mon Sep 17 00:00:00 2001 From: awe Date: Thu, 12 Mar 2026 17:58:44 +0300 Subject: [PATCH] fix calib --- rfg_adc_plotter/processing/normalization.py | 13 ++++--------- tests/test_processing.py | 10 ++++++++++ 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/rfg_adc_plotter/processing/normalization.py b/rfg_adc_plotter/processing/normalization.py index 6066541..ec3bd39 100644 --- a/rfg_adc_plotter/processing/normalization.py +++ b/rfg_adc_plotter/processing/normalization.py @@ -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) diff --git a/tests/test_processing.py b/tests/test_processing.py index 02684c9..52391dd 100644 --- a/tests/test_processing.py +++ b/tests/test_processing.py @@ -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")