M17_spec icon indicating copy to clipboard operation
M17_spec copied to clipboard

CRC, Golay and convolutional encoder

Open sp5wwp opened this issue 2 years ago • 4 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.

sp5wwp avatar Aug 20 '21 15:08 sp5wwp

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

sp5wwp avatar Aug 21 '21 19:08 sp5wwp

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

silseva avatar Oct 25 '21 17:10 silseva

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 :)

sp5wwp avatar Oct 25 '21 17:10 sp5wwp

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.

mobilinkd avatar Jan 23 '22 02:01 mobilinkd

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

sp5wwp avatar Mar 15 '23 14:03 sp5wwp