Skip to content

Blind LLR calibrators vote at a fixed magnitude on pure noise — a class, of which #1364 fixes only BPSK #1425

Description

@dc0sk

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions