locked #MSK144 Waveform #MSK144

Andy Talbot

Purely out of interest :
While looking at the MSK144 coding process I noted there are two procedures in the Fortran code to generate the waveform for transmission.

First is to use the raw output from the coding process, ie. sync+message+CRC+parity and alternately modulate I and Q12kHz sampled  NCO data streams to generate offset QPSK at audio.
This is what is actually done inside WSJT-X to generate MSK144

But there's a secondary bit of code in there whose output is used in the MSK144CODE.EXE utility.  That differentially encodes that stream of '1's and '0's, inverting alternate bits to generate a pattern for modulating an FSK source for a frequency shift exactly half that of the symbol rate. Another way of generating MSK.

I've taken that bit pattern and applied it to a two channel quadrature DDS to generate the two frequencies [plus] +500Hz  and [minus] -500Hz, ie FSK at 1000Hz shift centred on zero frequency.  This can be done by swapping the I/Q channels, or inverting one of them, but in a quadrature output DDS it's easier to feed the NCO with +/- twos complement values of the increment for the wanted frequency.

The attached picture is of the two I/Q baseband streams from the DDS.  As can be seen, the maximum of one channel flips at the zero crossing of the other - exactly what you'd expect of an offset QPSK baseband signal.

It is nice to see theory and practice come together once in a while!