Isa*_*ick 5 c++ qr-code generator error-correction reed-solomon
在我的数据结构课程中,我想为我的最终项目创建一个二维码生成器。但是,我在理解其中的“格式化错误更正”部分时遇到了一些麻烦。我想使用 11 (L) 的纠错和 100(每隔一行)的掩蔽模式。由于我是一名本科生,我想尽量简单地处理版本 1 QR 代码并使用字节编码。
然后就是不明白数据输出后怎么搞出纠错框。
查看一些规范,纠错级别L(低,可以纠正7%)被识别为两位模式01,而不是11。链接到QR码格式字符串,其中包括掩码和纠错级别。
\n\nhttp://www.thonky.com/qr-code-tutorial/format-version-information
\n\n由于您选择了特定的纠错级别和掩码模式(与 thonky.com 网页中使用的相同),因此格式字符串将是固定的 15 位模式:“代码的最终格式字符串纠错级别 L 和掩码模式 4 为 110011000101111" ,因此您不必费心计算它。
\n\n对于QR码,8位字段GF(2^8)基于9位多项式
\n\n x^8 + x^4 + x^3 + x^2 + 1 = hex 11d\n the primitive \xce\xb1 = x + 0 = hex 2\nRun Code Online (Sandbox Code Playgroud)\n\n请注意,二进制字段的加法和减法与异或相同。
\n\nQR 码版本 1 是 21 x 21 位 = 441 位的矩阵,表示为黑色或白色方块,其中 208 位 == 26 字节用于数据和 ecc。
\n\n纠错级别L的QR码有152位==19字节的数据和56位==7字节的ecc,4个用于纠错,3个用于检测。用于校正的4个字节可以校正26个字节中的2个,大约是26个数据字节的7%。除了用于检测的 3 个字节之外,如果在解码过程中计算出的任何一个位置超出了 26 个字节数据的范围,也会检测到不可纠正的错误。
\n\n生成多项式 g(x) 是一个 8 项多项式,可产生 7 项余数。g(x) = 0 的 7 个根是 \xce\xb1 的连续幂,在本例中为 \xce\xb1^0, \xce\xb1^1, ... \xce\xb1^6 == hex 01, 02、04、08、10、20、40。
\n\ng(x) = (x-1)(x-\xce\xb1)(x-\xce\xb1^2)(x-\xce\xb1^3)(x-\xce\xb1^4)(x-\xce\xb1^5)(x-\xce\xb1^6)\nRun Code Online (Sandbox Code Playgroud)\n\n由于加法==减法==异或,减号可以用加号代替:
\n\ng(x) = (x+1)(x+\xce\xb1)(x+\xce\xb1^2)(x+\xce\xb1^3)(x+\xce\xb1^4)(x+\xce\xb1^5)(x+\xce\xb1^6)\ng(x) = (x+01)(x+02)(x+04)(x+08)(x+10)(x+20)(x+40)\ng(x) = 01 x^7 + 7f x^6 + 7a x^5 + 9a x^4 + a4 x^3 + 0b x^2 + 44 x + 75\nRun Code Online (Sandbox Code Playgroud)\n\n将 19 字节数据视为多项式 m(x)(m 代表消息)。19 个字节的数据通过乘以 x^7 来填充 7 个字节的零。然后将 26 字节多项式除以生成多项式,并将余数“减去”(异或或由于填充产生零,余数仅替换填充的字节)到填充数据的低 7 字节。调用余数r(x),以及编码结果c(x):
\n\nr(x) = (m(x) x^7) % g(x)\nc(x) = (m(x) x^7) - r(x)\nRun Code Online (Sandbox Code Playgroud)\n\n再次注意,减法是异或,与加法相同。
\n\n维基百科上有一篇关于里德·所罗门的不错的文章:
\n\nhttp://en.wikipedia.org/wiki/Reed%E2%80%93Solomon_error_ Correction
\n\nNASA 有一个教程:
\n\nhttp://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/19900019023.pdf
\n| 归档时间: |
|
| 查看次数: |
2839 次 |
| 最近记录: |