M17-Project/M17_spec

CRC, Golay and convolutional encoder

sp5wwp opened this issue · 5 comments

Provide a CRC value for some example LSF, like SRC: A1BCD, DEST: E2FGH, TYPE: 0x0005, CAN: 0, META: 0, reserved bits zeroed. Just so the reader/implementer can test his/her code against it.

"The Golay (24,12) encoder uses the polynomial 0xC75 to generate the 11 check bits."

That polynomial has a name, it's g(x), just as used below. Putting a hex value straight in the text without explanation looks bad too. It needs clarification. It would also be a good idea to put in the generator matrix G along with the parity check matrix H straight in the text.

The table below has no number and is somewhat hard to read. The "Field" could be omitted. Maybe sort the bits from 0 to 23 (mirror vertically)?

The order of input bits for the convolutional encoder is undefined. Just like G_1 and G_2 order in the resulting bitstream.

Rewrite the "Code puncturing" subchapter. Update the P_1 puncturing scheme.

I would suggest also adding some test vectors for Golay (24,12) encoding, as already done for CRC, to provide a known reference for implementers of decoding/encoding routines

This type of coding comes down to multiplying two matrices, the data matrix and generating matrix G. I'm not convinced if this needs examples. Just my 2 cents :)

There are test cases in the m17-cxx-demod codebase for various CRC and Golay encodings. You are welcome to pull examples from the test cases. There are full working Python examples for both in my m17-demodulator Jupyter notebooks which can be used to encode any arbitrary LSF.

No longer needed, as there is one reference implementation that the implementer can test against.