Skip to content

adcRmsDbfs sits at −18.0 dBFS invariant across 19 dB of analog gain — analog limit, or decode defect? #5803

Description

@on8st

Asking rather than asserting: I cannot separate the two candidates from outside the app, and the answer changes whether this is a bug at all.

The observation

On an HL2 with the antenna port terminated in a 50 Ω dummy load, adcRmsDbfs is immovable. Pooling every reading from four runs over roughly 40 minutes:

readings within −17.90 … −18.05 dBFS 16
spread 0.15 dB
across LNA gain 0 dB and +19 dB — a 19 dB analog change
across bank 0x42, 0x48, 0x60
across frequency 3.775, 14.100, 28.400 MHz
adcPeakDbfs over the same set pinned, −14.1 … −14.8

A 19 dB change of analog gain moved the statistic 0.15 dB. Nothing that is RF behaves like that — and the same runs show adcSlicePeakDbfs0 (the WDSP-side surface) tracking gain at 0.76–0.91 dB/dB over exactly the same commands, so the gain was demonstrably applied.

Two candidates, and why I cannot choose

  1. An analog stage limiting roughly 14.5 dB below converter full scale, upstream of where EP4 samples are taken.
  2. A defect in the EP4 decode or statistics path — the value is computed, not measured, at some point in MetisProtocol's EP4 handling.

I could not separate them through the automation bridge: it exposes bandscope on|off and the scalars, but no EP4 samples. bandscope.frame is reachable only from the GUI dialog. The tool that would settle it, an independent EP4 decode, refuses unless the radio is idle, which means disconnecting the app from the radio — not something I wanted to do unannounced on someone's station.

What would answer it

Anyone who can capture raw EP4 samples alongside the reported scalars on any HL2 can settle it in one run: if the raw samples move with LNA gain while adcRmsDbfs does not, it is (2); if neither moves, it is (1).

Related, but not the same thing

#5802 reports that Ep4Stats::rmsDbfs measures about zero rather than about the mean, so DC inflates it. That is a real defect and it is not an explanation for this: a fixed DC pedestal would raise the reading by a constant, it would not make it invariant under 19 dB of gain. They may interact — if the ceiling is a DC-dominated reading, both are in play — but fixing #5802 would not by itself explain what is seen here.

Why it is worth knowing either way

bandscopeHeadroom() and the overload/clip surfaces are built on these statistics. If a stage really does limit 14.5 dB below full scale, headroom reporting is systematically optimistic by that amount. If instead the number is computed wrongly, everything derived from it inherits the error. We wasted a measurement on it — characterising the reading as an RF observation before noticing it was a rail.

Provenance

HL2, gateware 74, receive-only throughout, dummy load verified at the switch. Observed on a build carrying #5752 and #5753; the relevant EP4 statistics path is unchanged on current main. I have deliberately not diagnosed this further than the evidence supports.

🤖 Generated with Claude Code

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

    claude-activeAetherClaude is actively working on this issue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions