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
- An analog stage limiting roughly 14.5 dB below converter full scale, upstream of where EP4 samples are taken.
- 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
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,
adcRmsDbfsis immovable. Pooling every reading from four runs over roughly 40 minutes:adcPeakDbfsover the same setA 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
MetisProtocol's EP4 handling.I could not separate them through the automation bridge: it exposes
bandscope on|offand the scalars, but no EP4 samples.bandscope.frameis 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
adcRmsDbfsdoes not, it is (2); if neither moves, it is (1).Related, but not the same thing
#5802 reports that
Ep4Stats::rmsDbfsmeasures 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