Search code examples
algorithmqr-codeerror-correctionreed-solomonbch-code

QR code generation algorithm implementation case analysis


I'm implementing a QR code generation algorithm as explained on thonky.com and I'm trying to understand one of the cases:

as stated in this page and this page I can deduct that if the code is protected with M error correction level, and the chosen mask is No. 0, the first 5 bits of the format string (non-XORed) are '00000', and because of this the whole string of 15 bits is zeros.

the next step is to remove all leading zeros, which are, again, all of them. it means that there's nothing to XOR the generator polynomial string(10100110111) with, thus giving us a final string of 15 zeros, which means that the final (XORed) string will be simply the mask string (101010000010010). I'm seeking for confirmation that my logic is right.

Thank you all very much in advance for the help.


Solution

  • Your logic is correct.

    remove all leading zeroes

    The actual process could be described as appending 10 zero bits to the 5 bits of data and treating the 15 bits as 15 single bit coefficients of a polynomial, then dividing that polynomial by the 11 bit generator polynomial resulting in a 10 bit remainder polynomial, which is then subtracted from the 5 data bits + 10 zero bits polynomial. Since this is binary math, add and subtract are both xor operations, and since the 10 appended bits are zero bits, the process can just append the 10 remainder bits to the 5 data bits.

    As commented above, rather than actually implementing a BCH encode function, since there are only 32 possible format strings, you can just do a table lookup.

    https://www.thonky.com/qr-code-tutorial/format-version-tables