VDL2: gated noise estimator + burst-length sanity cap (16-17 → 19)#65
Conversation
The dumpvdl2 oracle audit overturned the weak-burst theory: 40 of its 41 frames are at 24-30 dB SNR. Instrumentation found two real faults: - Bogus headers passing FEC with absurd lengths (up to 112k bits, 3.4 s of collection) starved hunting and polluted the failure statistics. The demod now rejects transmission lengths over 16k bits. - The energy gate's noise EMA learned from burst power during post-rewind rescans, inflating the floor ~0.1 s and shadowing rapid back-to-back transmissions (XID/ack sequences). The estimator is now gated (learns only below the gate, tiny up-creep for re-convergence). Off-air capture: 19 frames at EVERY capture rate (50 kS/s 16 -> 19, 100 kS/s 17 -> 19, 600 kS/s 16 -> 18), and the count is flat across ENERGY_FACTOR 8-20 / threshold 0.4-0.6 where the old estimator wobbled. Full suite green; notes updated with the evidence chain and the next instrumentation step (time-aligned burst diff vs the oracle). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 79e8f626ce
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| // passed FEC — collecting seconds of "burst" for it | ||
| // starves hunting and pollutes the failure statistics. | ||
| match header::decode(&hdr) | ||
| .filter(|&tl| tl <= 16_000) |
There was a problem hiding this comment.
Raise the TL cap to the protocol limit
For any standards-valid VDL2 burst whose decoded transmission length is above 16,000 bits, this new filter turns the burst into a header failure before collection/deinterleaving even though the local PHY code still defines the 17-bit header maximum as 131,071 bits (header::MAX_TL) and interleave::layout accepts lengths up to that value. That makes the demod silently drop larger AVLC/ATN transfers; if the goal is to reject false-lock monsters, the sanity check should not be below the protocol-supported range or should be based on a configurable/validated operational limit.
Useful? React with 👍 / 👎.
|
Caution Review failedPull request was closed or merged during review 📝 WalkthroughWalkthroughThe UW-hunting demodulator's noise-floor estimator was gated to prevent learning from high-energy burst samples. Header decoding now rejects transmission lengths above 16,000. Debug logging was added for RS decoding outcomes. Investigation documentation reports updated frame counts and root causes. ChangesNoise-floor gating and false-lock prevention
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The session's persistence pays: re-auditing the dumpvdl2 oracle showed 40/41 of its frames at 24-30 dB SNR — the missing frames were strong, not weak, overturning three investigations' framing. Instrumentation then found the real faults:
…and the count is now flat across EF 8–20 / threshold 0.4–0.6 where the old estimator wobbled 17–20. Full suite green. Next step documented: time-aligned burst diff against the oracle for the remaining 19-vs-41.
🤖 Generated with Claude Code
Summary by CodeRabbit
Bug Fixes
Documentation