© 2000 Nino Porcino IZ8BLY & M. Greenman ZL1BPU
Ver 1.0, 11 July 2000
Grateful thanks to Phil KA9Q for the algorithms and Viterbi decoder routines. Check the KA9Q web site for lots of good stuff on coders and decoders.
Therefore, for every input data bit there are two output data "dibits", generated by two polynomials from the taps of a 7 stage shift register. Call the outputs of these registers O1 to O7. The polynomials are each the modulo 2 sum (XOR) of five of these register outputs. The polynomials are:
Dibit2 = O1 + O2 + O3 + O4 + O7
The reason for this approach is flexibility: this technology is intended for anywhere from 1 to 5 or more bits per symbol.
The FEC decoder is of the Viterbi type. As mentioned, there is no fixed relationship between the coder dibits and the bit weighting of the MFSK symbol (or the PSK63F dibits, which are on the same data stream), and so the decoder must decide from the results whether it has the correct order of dibits. There are two choices - Dibit1 then Dibit2 (correct), or Dibit2 of one bit then Dibit1 of the next (incorrect).
One technique for solving this ambiguity is to use two short "trial decoders" and use the metrics from these to decide which of the two ambiguous alternatives gives the best result, and therefore the order in which the dibits must be used for the full-length decoder.
The FEC coder is followed (in MFSK only) by an interleaver. See the Interleaver Description for details. The interleaver is a simple diagonal 10 stage concatenated n-bit interleaver, where n is the number of bits represented by the MFSK symbol.