QR码纠错码原理及实现
增刊 1
冯汉禄等: QR 码纠错码原理及实现
41
原始 信 息 v( x) 在 传 输 的 过 程 中 受 到 的 错 误 影 响 为 E( X) , 则实际接收到的信号 R( x) = v( x) + E( x) , 则原始信 息 v( x) = R( x) - E( x) , 设接收到的码字多项式为:
[4 ] r
σ( x) =
∏ ( 1 - x x) ; 0 ≤ r ≤ t
i i =1
( 7)
把 σ( x) 展开: σ ( x ) = ( 1 - x1 x ) ( 1 - x2 x ) ( 1 - x3 x ) … ( 1 - x t x ) = 1 - ( x1 + x2 + … + x t ) x + ( x1 x2 + x1 x3 + … + x t - 1 x t ) x2 - … + ( - 1 ) t x1 x2 … x t 令 σ1 = - ( x 1 + x 2 + … + x t ) ( 8)
1
RS 码编译算法
域是能够进行加与乘两种运算的非空元素的集合 。 伽罗 GF) 是一个有限域, 瓦域( Galois Field, 以素数 q 为模的整数 构成 q 阶的伽罗瓦域为 GF( q) 。 在 GF( q) 中, 某一个元素 a 满 q -1 a = 1 , a GF ( q ) 。 GF 足 称 为 的本原元 在任何 ( q) 中都能找 到一个本原元, 能够用它的幂次表示所有 q - 1 个非零元素, 0 a1 , a2 , a3 , a4 , …, a q -1 ,其 中 从而组 成 一 个 循 环 群 G( a) : a , q -1 a = 1。 [3 ] 可以纠正 t 个错误的 RS 码的生成多项式 为: 2 2t 2t g ( x ) = ( x - a ) ( x - a ) … ( x - a ) = x + g2 t - 1 x 2 t - 1 + g2 t - 2 x n - 2 + … + g1 x + g0 ( 1) 1, 2, …, 2 t - 1 ) 是 GF( q) 中元素, a 为 GF( q) 其中: g i ( i = 0 , 中的一个本原元。 1 2 若原始信息的多项式为 d( x) = d0 + d1 x + d2 x + … +
中很容易受到污染、 涂痕、 撕裂等各种形式的破坏, 直接影响 因此采用一种好的检错与纠错算法尤为重要 。 目前在 识别, Solomon ) 错误控 二维条码中应用的最为广泛的是 RS ( ReedSolomon 码是一种重要的循环码, 制码。Reed是分组中纠错 能力最强的一种码, 在 QR 码中利用 RS 纠错码, 最高纠错等 [2 ] Solomon 码编译码 级能纠错 30% 的错误码字 。 但是 Reed算法比较复杂, 本文对 RS 纠错码算法在 QR 码中的应用进行 了相关研究。
n -1
R( x) =
∑r x
i i =0
i
= r0 x0 + r1 x1 + r2 x2 + … + r n - 2 x n - 2 + ( 3)
S3 … Sr S1 S2 S2 S3 S4 … S r + 1 T , B =[ 其中 A = σ x σ x -1 …σ t] S r S r + 1 S r + 2 … S2 r - 1 因此, 译码的关键是求解 σ( x) , 从而求出错误位置的值 。 系数 矩阵的行列式不为零时, 求解方程, 错误值的个数即为矩阵的 [5 ] 译码流程如图 2 。 秩 ,
S = Y1 ( X1 ) 2 + Y2 ( X2 ) 2 + … + Y r ( X r ) 2 2 S3 = Y1 ( X1 ) 3 + Y2 ( X2 ) 3 + … + Y r ( X r ) 3 S = Y ( X ) 2t + Y ( X ) 2t + …Y ( X ) 2t 2t 1 1 2 2 r r
S j = R( a j ) = C( a j ) + E( a j ) = E( a j ) =
t
∑Y X
i i =1
li
= ( 5)
图2
RS 码译码流程
∑Y a
i i =1
li
2
RS 码在 QR 码中的编码过程
l 2, …, r) , 令 Xi = X i ( i = 1, 于是有 S1 = Y1 X1 + Y2 X2 + … + Yr Xr 。 同理用 a 的各次幂, 即式( 1 ) 的各个零点, 对差错 多项式( 5 ) 求值, 可得到 2 t 个方程的方程组。 S1 = Y1 X1 + Y2 X2 + … + Y r X r
∑Y X
i i =1
li
( 4)
l 其中 Y i ∈ GF( q) ,X i 称为错误位置, 说明错误发生在 R( x) n -1 中的第 n - l i ( x 的系数算第一位) 位, 错误值是 Y i 。 j 2, …, 2t) 对 用纠错码生成多项式 g( x) 的各个零点 a ( j = 1, j R( x) 求值, 其结果定义为伴随多项式 Sj 。 因为 C( a ) = 0, 故 t
0
引言
QR 二维条码又称为快速响应矩阵码, 相比于一维条码 它具有数据量大、 不依赖数据库、 应用方便、 纠错能力强等特 [1 ] 点 。也正因为二维条码的这些特点, 使二维条码比一维条 码的编码与解码技术更为复杂 。本文在对国内外的二维条码 进行对比研究之后, 论述了 QR 二维条码的编码与解码原理, Solomon 的原理。 并详尽阐述了二维码中所应用的 ReedQR 码如图 1 所示, 由正方形模块组成的一个正方形矩阵 列构成, 它包括编码区、 功能图形和空白区三部分 。编码区是 由文本信息转化的二进制码组成, 它包括格式信息、 版本信 息、 数据和纠错码字。功能图形包括位置探测图形 、 位置探测 定位图形和校正图形。 图形分隔符、
r n -1 x n -1
n -1 + e n - 2 x n - 2 + … + e1 x1 + e0 。 错误多项式 E( x) = e n -1 x 如果含有 r( 0 ≤ r ≤ t) 个错误, 它们发生在未知错误位置 i1 , i2 , …, i r 上, 则 t
E ( x ) = Y t X l t + Y t - 1 X l t - 1 + … + Y 1 X l1 =
第 31 卷增刊 1 2011 年 6 月 文章编号: 1001 - 9081 ( 2011 ) S1 - 0040 - 03
计算机应用 Journal of Computer Applications
Vol. 31 Suppl. 1 June 2011
QR 码纠错码原理及实现
冯汉禄, 黄颖为, 牛晓娇, 钱银超
摘
Principle and implementation of error correcting coding of QR code
FENG Hanlu, HUANG Yingwei, NIU Xiaojiao, QIAN Yinchao
( Faculty of Printing and Packaging Engineering,Xi'an University of Technology, Xi'an Shaanxi 710048,China)
σ t = ( - 1 ) x1 x2 … x t 则式( 8 ) 变为:
r 2 t σ t = 1 + σ1 x + σ2 x + … + σ t x = σ ( x ) =
{
QR 码多项式算法用位的模 2 算法和字节的模 100011101 算 8 8 4 3 这是伽罗华域 2 以 100011101 表示模块多项式: x + x + x + 法, 2 [7 ] x +1 。 数据码字为多项式各项的系数, 第一个数据码字为 最高次项的系数, 第一个纠错码字前的最后一个数据码字是 最低项的系数。 纠错码字是数据码字被纠错码字多项式 g( x) 除得的余 数。 余数的最高次系数为第一个纠错码字, 最低次项系数为最 后个纠错码字, 也是整个块的最后一个码字 。 格式信息是由 5 个数据位和 10 个纠错位组成的一个 15 QR 码中用 BCH( 15 , 5 ) 码纠错, 位序列, 以数据位串为系数的 [6 ] 10 8 G ( x ) = x + x + x5 + x4 + x2 + x + 1 多项式被生成多项式 除, 所得的剩余多项式的系数串追加到系数串上形成 ( 15 , 5 ) BCH 码字符串。 最后通过用 101010000010010 对位串进行 异或运算掩模, 来保证掩模图形和纠错等级的任意组合的格 式信息不全为 0 。 例: 纠错等级 M; 掩模图形参考 101 00101 二进制字符串: x2 + 1 生成多项式: 5 位信息组位长( 15 - 5) : x12 + x10 将次数升 15 位码字总长度, 10 8 5 4 2 2 7 被 G( x) 除后: = ( x + x + x + x + x + x + 1) x + ( x + 6 4 3 2 x +x +x +x ) 把上面的剩余多项式的系数字符串附加至格式信息数据串 00101 + 0011011100 → 001010011011100