Just for fun I've been trying to implement an FT8 encoder that would run on a Teensy (or Arduino) microcontroller. As part of that effort, I've run into a problem trying to replicate the CRC12 used in WSJTX. I've come to the conclusion that the use of 0xC06 in crc12.cpp is a mistake/bug. I notice that Mike W9MDB pointed out this problem on the wsjt-devel list back in March when he wrote: > You may want to check your polynomial.  I do believe 0xc06 should be 0xc07 --
> you never want a zero x^0 term.

Although I agree with him that when specifying a CRC to BOOST, it must be an odd number - i.e. low order bit is set - I disagree that 0xC06 should be 0xC07.

When specifying a polynomial to BOOST, the highest-order term of the polynomial is omitted. But in the paper by Koopman & Chakravarty (K&C), the low-order term is omitted. If it were decided to use the K&C polynomial 0xC07 (which is a much better choice than 0xC06), this would have to be specified as 0x80F to BOOST.

Mike also asked:
> What's the logic behind using a 12-bit CRC?  Is there a plan of some sort here?

If I understand Table 4 in K&C correctly, any one of the 8-bit polynomials 0x97, 0x98, 0x83 or 0xCD would perform better than the 12-bit 0xC06 even if it had been correctly specified to BOOST. An 8-bit polynomial would also free up four bits in the message.

If the polynomial as currently implemented in 1.8.0 is indeed incorrect, what is involved in getting it changed to a better 12-bit or 8-bit polynomial?

73
Pete VE5VA


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
wsjt-devel mailing list
wsjt-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wsjt-devel

Reply via email to