在我的数据结构课程中,我想为我的最终项目创建一个QR代码生成器。但是我在理解“格式化错误纠正”部分时遇到了一些麻烦。我想使用11(L)的纠错和100(每隔一行)的掩码模式。由于我是本科生,我想通过处理版本1的QR码并使用字节编码来保持简单。
然后我不明白在输出数据后如何提出纠错框。
答案 0 :(得分:1)
查看一些规范,纠错级别L(低,可以校正7%)被识别为两位模式01,而不是11.链接到QR码格式字符串,包括掩码和纠错级别。
http://www.thonky.com/qr-code-tutorial/format-version-information
由于您选择了特定的纠错级别和掩码模式(与thonky.com网页中使用的相同),格式字符串将是固定的15位模式位:“最终格式字符串具有纠错级别L和掩码模式4的代码是110011000101111“,因此您不必费心计算它。
对于QR码,8比特字段GF(2 ^ 8)基于9比特多项式
x^8 + x^4 + x^3 + x^2 + 1 = hex 11d
the primitive α = x + 0 = hex 2
请注意,二进制字段的加法和减法都与xor相同。
QR码版本1是21乘21位= 441位的矩阵,表示为黑色或白色方块,208位= = 26个字节用于数据和ecc。
具有纠错等级L的QR码具有152位== 19字节的数据和56位== 7字节的ecc,4用于校正,3用于检测。用于校正的4个字节可以纠正26个字节中的2个,约占26个数据字节的7%。除了用于检测的3个字节外,如果在解码过程中,任何一个计算出的位置都在26个字节的数据范围之外,还会检测到无法纠正的错误。
生成多项式g(x)是8项多项式,得到7项余数。 g(x)= 0的7个根是α的连续幂,在这种情况下α^ 0,α^ 1,...α^ 6 == hex 01,02,04,08,10,20,40。
g(x) = (x-1)(x-α)(x-α^2)(x-α^3)(x-α^4)(x-α^5)(x-α^6)
由于加法==减法== xor,所以可以用加号替换这些错误:
g(x) = (x+1)(x+α)(x+α^2)(x+α^3)(x+α^4)(x+α^5)(x+α^6)
g(x) = (x+01)(x+02)(x+04)(x+08)(x+10)(x+20)(x+40)
g(x) = 01 x^7 + 7f x^6 + 7a x^5 + 9a x^4 + a4 x^3 + 0b x^2 + 44 x + 75
将19个字节的数据视为多项式m(x)(m代表消息)。通过乘以x ^ 7,用7个字节的零填充19个字节的数据。然后将26字节多项式除以生成多项式,并将余数“减去”(xor'ed或由于填充产生零,其余部分只是替换填充的字节)到填充数据的低7字节。调用余数r(x)和编码结果c(x):
r(x) = (m(x) x^7) % g(x)
c(x) = (m(x) x^7) - r(x)
再次注意减法是xor,与加法相同。
Wiki有一篇关于里德·所罗门的文章:
http://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_correction
和NASA有一个教程:
http://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19900019023.pdf