Skip to content

REQ-DEM-036: MSK's carrier rests entirely on step 8, and one block in 24 failed to lock #439

Description

@TGoodhew

Found while closing the MSK EVM instability. REQ-DEM-036 owns what happens when a measurement
cannot acquire; this is a specific, measured case of it.

What happens

Step 3 declines to estimate a carrier offset for the MSK family — correctly, because raising a
constant-envelope waveform to a power leaves its own deviation lines rather than a carrier line, and
reporting one puts the offset a quarter of a symbol rate out. The whole carrier estimate therefore
rests on step 8's pull-in.

Measured against an E4438C transmitting MSK at 500 ksym/s with a real offset of about 54 Hz
comfortably inside anything step 8 should manage — six acquisitions were each demodulated at four
internal rates. One of the twenty-four failed completely:

block 2, 16 points/symbol:  EVM 117.16 %rms, carrier -306.9 Hz, NOT CONVERGED, NOT LOCKED
block 2,  4 points/symbol:  EVM   5.50 %rms, carrier   53.9 Hz, locked
block 2,  8 points/symbol:  EVM   3.47 %rms, carrier   54.5 Hz, locked, not converged
block 2, 32 points/symbol:  EVM   1.21 %rms, carrier   53.9 Hz, locked

The same samples at three other rates were fine, so it is step 8 landing in a wrong basin rather
than anything about the block. The measurement says it did not lock, so nothing false is reported —
it is a robustness gap, not a correctness one.

What was tried, and why it is not in the build

The power centroid of the spectrum. A constant-envelope spectrum is symmetric about its carrier,
so the centroid should be it. It is not: the centroid is the mean instantaneous frequency, which for
MSK is a quarter of the symbol rate multiplied by the data's own imbalance. Measured on a
4000-symbol block with no carrier offset at all: −2.483 kHz on a 1 Msym/s signal, consistently,
and the demodulation that followed read 105 %rms.

That is worse than declining in the way that matters most — it is wrong on every block instead of
one in twenty-four, and it is wrong in a way that looks like an answer. Reverted, with the numbers
recorded at the point in CoarseCarrierStep where somebody will next have the same idea.

What should work

The midpoint of the two deviation humps. MSK's spectrum has two lobes a quarter of a symbol rate
either side of the carrier, and unlike their heights, their positions do not move with the data
the imbalance that defeats the centroid changes only how tall each one is. So: find the two lobes,
take the mean of their positions, and the data cancels out by construction.

Worth doing with the failing block in hand: --msk-probe in OpenVSA.Verify reproduces the setup,
and a fixture that reproduces the failure without the bench would be better still.

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

    deferred:revisitClosed to keep the backlog at zero; revisit once the rest of the product is complete

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions