Skip to content

REQ-DEM-021: the catalogue needs a tenth filter, and its count says nine #437

Description

@TGoodhew

Found while implementing #125. REQ-DEM-021 lists nine pulse-shaping filters and a test counts
them. Implementing REQ-DEM-010's MSK row needed a tenth, and this records why, because a
requirement's own count is not a thing to change quietly.

The tenth

The linearised-MSK main pulse: half a cycle of a cosine across two symbols.

MSK is π/2-BPSK at the bit rate shaped by that pulse. The catalogue's existing Half Sine is half
a cosine across one symbol — the shaping of an offset format's staggered axes, and of MSK read at
half the bit rate, where a symbol is two bits.

The two are one factor of two apart and produce entirely different signals:

Pulse at the bit rate Envelope varies by EVM Is it MSK?
Half sine, one symbol 240 dB (it reaches zero at every symbol boundary) 0.000000 %rms No
Half cosine, two symbols 0.17 dB 0.000000 %rms Yes

Both demodulate perfectly. Only one is a constant-envelope modulation, and constant envelope is the
entire reason MSK exists — a transmitter with no envelope variation can be run at saturation. A
round trip that checked only EVM would have accepted the wrong one, which is why
FormatCatalogueTests now measures the envelope as well.

Why this is the requirement's own logic

REQ-DEM-021 already carries the exactly analogous filter for the other member of that family:
EDGE's c₀(t), the linearised-GMSK main pulse, is in the list because EDGE cannot be measured
without it. MSK's linear pulse is the same object for the case with no Gaussian filter in front of
the modulator. Listing one and not the other looks like an omission rather than a decision.

Implemented

PulseFilterType.Msk = 9, appended so that no older state file contains the value.
PulseFilterCatalogueTests.TheCatalogueHasTheNineTypesTheRequirementListsAndOneItImplies now
asserts ten and says which is which.

What to decide

Whether REQ-DEM-021's text should say ten and name it — in which case this is a specification
edit and sync_issues.py regenerates the issue — or whether MSK should instead be demodulated in
its offset form at half the bit rate, where the existing Half Sine is the right pulse and no tenth
entry is needed. The cost of that alternative is the symbol rate an operator types: it would be
half the bit rate, where the reference product and every standard quote the bit rate.

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