Adds the scaffolding for Narrow-Band Vital Information ranking: an exponentially-weighted moving variance per subcarrier (alpha = 0.02 → tau ≈ 10 s at 5 pps), refreshed every 25 frames into a stable_bin mask = bins whose EMA variance is below the across-band median. The intended payoff is to drive per-node CV in STILL down by averaging broad_mean_amp_history over quiet bins only (instead of all 128), so ADR-101's STILL/EMPTY classifier separates them at a smaller body block. Activated path is REVERTED in this commit on purpose. Quiet bins by construction barely move, so windowed variance of their mean collapses to ~0 and motion_energy goes constant. Empirical verification 2026-05-17: motion_score pinned at 0.013/0.021 with std=0 across 125 frames after turning quiet-only averaging on; reverted to full-band push_val for motion_energy with a comment explaining why. The right shape is a second channel in rv_feature_state_t carrying "baseline_quiet" alongside motion_score so the server can use one for classification and the other for motion gating — that's an additive protocol bump and a separate change. EMA state lands now so we don't have to wire it back from scratch when we do it. Also kept from the earlier session: the n_subcarriers > 128 truncate fix (root cause of motion_energy = 0 — process_frame used to early- return on 384-byte CSI frames from this silicon) and the broadband-mean amplitude history that feeds Step 8. Co-Authored-By: claude-flow <ruv@ruv.net> |
||
|---|---|---|
| .. | ||
| esp32-csi-node | ||
| esp32-hello-world | ||