Nav-Soft an OpenSource Software GNSS company.

Home > Hardware Rx > Waas

WAAS/EGNOS Signal Decoding

If WAAS functionality is enabled and this channel is allocated to a WAAS satellite the doppler offset is set to zero as these are geostationary with small doppler offset.

Decoding the WAAS data signal is more complicated than the Navstar data as it incorporates FEC coding and CRC parity coding as well as a frame and preamble.

For WAAS the FEC coding must first be decoded using a viterbi algorithm and then the preamble located before the parity check can be made.

However since the FEC consists of symbol pairs transmitted at 250 Hz, we first need to achieve bit lock, with only 4 signal bits to use it is not possible to determine which two signal bits correspond to the first symbol, only when there is a new symbol.

For this reason two viterbi decoders are run in parallel until the correct symbol pairing can be determined.

The viterbi channels are processed identically but are fed with symbol pairs two signal bits out of synch.

The output data bit of the viterbi decoder is fed into a shift byte that holds the last 8 data bits and this is checked for a PREAMBLE bit pattern when a new data bit output by the viterbi decoder.

The output of the shift byte is moved into a fifo structure that contains the last 250 data bits.

This means when a PREAMBLE is detected that the fifo contains the whole of the previous frame allowing the CRC parity check to be completed immediately in one operation to confirm that a valid frame aligns with the preamble.

At this point frame lock has been achieved and only one viterbi channel continues to be processed.

Preamble and parity checks are repeated every frame to make sure the channel stays locked to the data frame.

I have used the gnuradio version of Phil Karn's open source viterbi decoder for this so thanks to Phil and Matt Ettus for saving me having to write my own. However I did manage to convert this from a hard to a soft decoder and so the Receiver had less difficulty maintaining a lock on the Waas data signal.

So the program now deciphers most of the message types expect 27, 28 and of course the ones not yet assigned. If WAAS data has been captured it can be viewed in some WAAS Display screens for Fast and Long Term corrections, Almanac data, Ephemeris data and the Ionospheric data.

Perhaps of most interest is the deciphering of the Ionospheric grid (message 18) and the values of the grid point, i.e, the ionospheric delay at the grid points (message 26).

First the grid point mask is saved for a particular band, then the mask is cycled through whilst the grid point values are decoded and a check is done to see if the next grid point value is assigned to the current mask or not. If it is the grid point value is assigned to the mask position and the program moves onto to look at the next value of both. If it is not the next mask position is checked for the current grid point, until the next allocated mask point is reached.

Back to Top of Page