Found during adversarial review of #1364's fix, which corrects this for BPSK only. Filing the class
separately because the fix does not generalise by itself and the blast radius is different per plugin.
The property
Every blind, scale-invariant LLR calibrator emits a σ-independent magnitude on pure noise, by
homogeneity: if the estimator's scale is a ratio of like-order moments, it cancels the noise power
exactly when there is nothing else to measure. The attempt then votes at a fixed strength into
combine_llrs_map no matter how worthless it is. Only the constant differs per plugin.
Census from review — mean|L| on pure noise, expressed as a fraction of the same plugin's mean|L|
on a clean frame at an 8 dB channel:
| plugin |
mean|L| on noise |
fraction of an 8 dB frame |
| BPSK250 |
1.0 |
0.009 |
| QPSK250 |
3.4 |
0.047 |
| 8PSK500 |
9.6 |
0.44 |
| 64QAM1000 |
0.20 |
0.020 |
| PILOT-16QAM500 |
0.21 |
0.014 |
| SC-FDMA |
refuses (Err 4/4) |
— |
8PSK500 is the outlier by an order of magnitude: a noise-only attempt votes at 44 % of a good
one. BPSK250 was the one measured and fixed in #1364 and was already among the mildest.
Why this is not urgent, stated so nobody over-reads the table
What a fix would need
#1364's correction — estimate A² from ⟨dot²⟩ − ⟨cross²⟩ so the scale vanishes with the signal —
is specific to a differential detector's dot/cross pair. A coherent plugin computes LLRs from
symbol_llrs, dividing distances by an estimated noise_var; the same defect there is the
amplitude reference, not the noise estimate, so the shape of the fix is different per plugin and
each needs its own derivation and its own low-SNR measurement.
There is also a floor no estimator beats: at A = 0 the score for A² equals the score for v, so the
Fisher information is singular and any blind estimate is sampling-noise limited at N^(−1/4).
Side information (a known preamble, a noise-floor tracker) buys a constant factor, not a better rate.
Suggested first step
Measure, per plugin actually reachable from a profile, the noise-only vote as a fraction of a good
attempt, then decide per plugin whether it is worth a derivation. QPSK250 is the only in-profile
coherent mode with a soft path, so it is the one to measure first.
Related: #1364 (BPSK, fixed), #1361, #687 (the original calibration work).
🤖 Generated with Claude Code
https://claude.ai/code/session_0188ATCj6DZ9aRVQ2vSirua6
Found during adversarial review of #1364's fix, which corrects this for BPSK only. Filing the class
separately because the fix does not generalise by itself and the blast radius is different per plugin.
The property
Every blind, scale-invariant LLR calibrator emits a σ-independent magnitude on pure noise, by
homogeneity: if the estimator's scale is a ratio of like-order moments, it cancels the noise power
exactly when there is nothing else to measure. The attempt then votes at a fixed strength into
combine_llrs_mapno matter how worthless it is. Only the constant differs per plugin.Census from review —
mean|L|on pure noise, expressed as a fraction of the same plugin'smean|L|on a clean frame at an 8 dB channel:
8PSK500 is the outlier by an order of magnitude: a noise-only attempt votes at 44 % of a good
one. BPSK250 was the one measured and fixed in #1364 and was already among the mildest.
Why this is not urgent, stated so nobody over-reads the table
8PSK500is in no profile.hpx_hfSL9 is 8PSK500+Rs and is reached only through therate ladder, and QPSK250+Rs (hpx_hf SL6) never decodes on moderate_f1 — fails at every SNR up to 40 dB; ablation says carrier tracking under fading #923 records that coherent 8PSK is 0.00 on
moderate_f1at any SNR, so the rungis not where fade traffic lives.
profile.rs:180,222) at 0.047 — an order of magnitude milderthan 8PSK500 and comparable to the BPSK figure before its fix.
decode is scale-invariant and cannot see it.
What a fix would need
#1364's correction — estimate
A²from⟨dot²⟩ − ⟨cross²⟩so the scale vanishes with the signal —is specific to a differential detector's dot/cross pair. A coherent plugin computes LLRs from
symbol_llrs, dividing distances by an estimatednoise_var; the same defect there is theamplitude reference, not the noise estimate, so the shape of the fix is different per plugin and
each needs its own derivation and its own low-SNR measurement.
There is also a floor no estimator beats: at A = 0 the score for
A²equals the score forv, so theFisher information is singular and any blind estimate is sampling-noise limited at
N^(−1/4).Side information (a known preamble, a noise-floor tracker) buys a constant factor, not a better rate.
Suggested first step
Measure, per plugin actually reachable from a profile, the noise-only vote as a fraction of a good
attempt, then decide per plugin whether it is worth a derivation. QPSK250 is the only in-profile
coherent mode with a soft path, so it is the one to measure first.
Related: #1364 (BPSK, fixed), #1361, #687 (the original calibration work).
🤖 Generated with Claude Code
https://claude.ai/code/session_0188ATCj6DZ9aRVQ2vSirua6