The last row of REQ-DEM-010's table. Everything else in it is demodulated and round-trips; this
one does not fit the shape of demodulator the chain is, and which way it should be made to fit is a
decision rather than an implementation.
evidence/req-dem-010/ has the script, its output and the reasoning.
Why it is not just another pulse
Two continuous-phase formats are already in the catalogue — MSK and GMSK — and they are
there because Laurent's decomposition writes a binary CPM as a linear pulse driven by
pseudo-symbols that walk around a ring, exactly. That pulse is what OpenVSA shapes with and
matches against: it is what PulseFilterType.Msk and PulseFilterType.Edge are.
SOQPSK's excitation is not binary. IRIG 106 Chapter 2 equation 2-10 produces impulses in
{−1, 0, +1}, and the zero is what breaks the construction: when the phase does not move, two
adjacent pulse tails add in phase rather than in quadrature, and the linear model's envelope rises
by exactly √2 on a waveform that is constant-envelope by definition.
Measured on a rectangular frequency pulse of one bit period, where Laurent's decomposition has a
single term and is exact — so the only thing that changes between the two rows is the alphabet:
| impulses |
EVM of the linear model |
model's envelope |
| binary, {−1, +1} — which is MSK |
0.000000 %rms |
0.000 dB |
| ternary, from equation 2-10 |
14.17 %rms |
3.010 dB |
3.010 dB is 20 log₁₀ √2 to three decimals. On SOQPSK-TG's own four-bit-period pulse the same
comparison reads 13.21 %rms, with the true waveform flat to 3.9e-15 dB as a CPM's must be.
It is the alphabet. Not the pulse, not the arithmetic, and no choice of pulse fixes it.
The two routes, and what each costs
A detector over the modulation's phase states — a trellis. h = 1/2 and a four-bit-period pulse
gives a manageable state count, and it is what the format was designed to be received with. But
REQ-DEM-001 fixes fourteen steps in a stated order and enforces it; a sequence detector is not
step 9 with a different decision rule, it replaces steps 8 and 9 for one family and needs its own
place in that order. That is a requirements change, not a code change.
The ternary PAM decomposition (Perrins & Rice). Gives a detection pulse, and the chain then
handles SOQPSK the way it handles GMSK — as offset QPSK through a pulse, with the equaliser taking
out the intersymbol interference the pulse puts in. Cheaper by a long way. But the pulse comes from
the literature rather than from the standard: IRIG 106 defines the transmitter, and equation
2-10 with Table 2-4 is all of it. This project has escalated exactly that kind of sourcing before —
#425 is a reading of 3GPP TS 45.004 rather than an implementation of it — and a detection pulse
taken from a paper would be the first thing in the filter catalogue whose definition is not a
published standard's. It would also be a filter, so #437's count moves again.
What is already done
The frequency pulse, the amplitude A from equation 2-8, the phase integral, the precoder and the
principal Laurent pulse are all evaluated from IRIG Standard 106-15 (Part 1), Chapter 2, subclause
2.4.3.2 in evidence/req-dem-010/soqpsk-pulse.py, and checked for the properties the mathematics
requires — c₀ symmetric about its centre to 7.5e-6, peak 0.998983, energy 0.999107. Whichever route
is chosen, the definition it starts from has been read once already.
Meanwhile Constellation.ByName("SOQPSK") refuses the name and says all of the above, rather than
answering with a constellation that would report a respectable EVM against a signal it does not
describe.
One more thing the standard settles
IRIG 106 admits one variant: "For purposes of this standard, only one specific variant of SOQPSK
and SOQPSK-TG is acceptable." SOQPSK-MIL exists but belongs to a different document with a different
frequency pulse, so if this arrives, whether the catalogue offers one name or two is part of the
same decision.
The last row of
REQ-DEM-010's table. Everything else in it is demodulated and round-trips; thisone does not fit the shape of demodulator the chain is, and which way it should be made to fit is a
decision rather than an implementation.
evidence/req-dem-010/has the script, its output and the reasoning.Why it is not just another pulse
Two continuous-phase formats are already in the catalogue — MSK and GMSK — and they are
there because Laurent's decomposition writes a binary CPM as a linear pulse driven by
pseudo-symbols that walk around a ring, exactly. That pulse is what OpenVSA shapes with and
matches against: it is what
PulseFilterType.MskandPulseFilterType.Edgeare.SOQPSK's excitation is not binary. IRIG 106 Chapter 2 equation 2-10 produces impulses in
{−1, 0, +1}, and the zero is what breaks the construction: when the phase does not move, two
adjacent pulse tails add in phase rather than in quadrature, and the linear model's envelope rises
by exactly √2 on a waveform that is constant-envelope by definition.
Measured on a rectangular frequency pulse of one bit period, where Laurent's decomposition has a
single term and is exact — so the only thing that changes between the two rows is the alphabet:
3.010 dB is 20 log₁₀ √2 to three decimals. On SOQPSK-TG's own four-bit-period pulse the same
comparison reads 13.21 %rms, with the true waveform flat to 3.9e-15 dB as a CPM's must be.
It is the alphabet. Not the pulse, not the arithmetic, and no choice of pulse fixes it.
The two routes, and what each costs
A detector over the modulation's phase states — a trellis. h = 1/2 and a four-bit-period pulse
gives a manageable state count, and it is what the format was designed to be received with. But
REQ-DEM-001fixes fourteen steps in a stated order and enforces it; a sequence detector is notstep 9 with a different decision rule, it replaces steps 8 and 9 for one family and needs its own
place in that order. That is a requirements change, not a code change.
The ternary PAM decomposition (Perrins & Rice). Gives a detection pulse, and the chain then
handles SOQPSK the way it handles GMSK — as offset QPSK through a pulse, with the equaliser taking
out the intersymbol interference the pulse puts in. Cheaper by a long way. But the pulse comes from
the literature rather than from the standard: IRIG 106 defines the transmitter, and equation
2-10 with Table 2-4 is all of it. This project has escalated exactly that kind of sourcing before —
#425 is a reading of 3GPP TS 45.004 rather than an implementation of it — and a detection pulse
taken from a paper would be the first thing in the filter catalogue whose definition is not a
published standard's. It would also be a filter, so #437's count moves again.
What is already done
The frequency pulse, the amplitude A from equation 2-8, the phase integral, the precoder and the
principal Laurent pulse are all evaluated from IRIG Standard 106-15 (Part 1), Chapter 2, subclause
2.4.3.2 in
evidence/req-dem-010/soqpsk-pulse.py, and checked for the properties the mathematicsrequires — c₀ symmetric about its centre to 7.5e-6, peak 0.998983, energy 0.999107. Whichever route
is chosen, the definition it starts from has been read once already.
Meanwhile
Constellation.ByName("SOQPSK")refuses the name and says all of the above, rather thananswering with a constellation that would report a respectable EVM against a signal it does not
describe.
One more thing the standard settles
IRIG 106 admits one variant: "For purposes of this standard, only one specific variant of SOQPSK
and SOQPSK-TG is acceptable." SOQPSK-MIL exists but belongs to a different document with a different
frequency pulse, so if this arrives, whether the catalogue offers one name or two is part of the
same decision.