本篇是学习编码理论时写的杂记,内容可能枯燥。
二维码笔记系列(原文地址):
- 『二维码学习笔记(一) | 二维码概述』
- 『二维码学习笔记(二) | 数据分析与数据编码』
- 『二维码学习笔记(三) | 纠错编码』
- 『二维码学习笔记(四) | 信息构建与模块放置』
- 『二维码学习笔记(五) | 数据掩码与版本信息』
唠唠闲话
二维码是一种存储二进制数据的矩阵条码,其使用 RS(Reed-Solomon) 编码进行纠错。RS 码是一种线性码(Linear code),其在现实生活中应用广泛,且存在高效的编解码算法。
本篇介绍编码原理,纠错算法以及拓展知识,跳转目录:
- 分组码
- 线性码
- 信息率
分组码
本节介绍分组码的定义例子,以及汉明距离等重要概念。
概述
在信息传输中,因传输通道噪音的干扰,接收端收到的信息与发送端发出的信息可能有误差。纠错码的引入,通过增加额外数据位,使传输的数据抵抗干扰的能力更加鲁棒(robust)。
在编码理论中,分组码(block code)是一大类重要的纠错码,它以块的形式对数据进行编码。分组码的抽象定义在概念上很有用,因为它允许编码理论家、数学家和计算机科学家以统一的方式研究所有分组码的局限性。这种局限性通常对编码界限进行研究,研究其与分组码不同参数的联系,例如信息率与检测纠正错误能力。
定义及例子
纠错码用于在受信道噪声影响的不可靠通信信道上可靠地传输数字数据。当发送者想要使用分组码传输长数据流时,发送者将流分成一些固定大小的片段,每个这样的片段称为消息(message)。分组码过程中,将每 message 单独编码成块(block)。然后,发送者将所有 block 传输给接收者,接收者又可以使用某种解码机制(希望)从可能损坏的接收 block 中恢复原始消息。整体传输的性能和成功取决于信道和分组码的参数。
定义,记号和例子:
- 设 为长度为 的字符集,记
- 将子集 称为块长(block length)为 的分组码(注:编码=嵌入映射=子集)
- 的消息长度或维数定义为 (形式定义,可能非整数)
- 编码 的编码率或信息率(code rate/information rate) 定义为
注: - 的元素 称为码字(codeword)
- 设分组码 的距离为 ,将 简称为 ,距离的定义在下边给出
- 分组码可以看成嵌入映射 ,映射左侧为原始信息,右侧为加密后的信息
- 例1: 是以 为字符集的,块长为 2, 维数为
- 例2: 是以 为字符集的,块长 3 ,维数 1 的分组码,写成映射形式
- 用大空间 表示小空间
- 察觉错误(detect error):用 传输信息 0 时,若发生了至多 2 个错误,比如
接收端收到 - 填补缺失(correct erasure):用 传输信息 0 时,若丢失了至多 2 个位置的数据(且丢失位置已知),比如
接收端通过余下数据仍能还原初始数据 - 纠错能力(correct error):假设传输 时,有至多 1 个位置的数据错误,比如
由于错误位置至多一个,初始数据只可能是
- 显然,编码的纠错能力是有上限的,假设数据 传送时发生 2 个位置的错误,比如变成 ,接收端并不能确定原数据是 还是 。类似地,检测错误和填补缺失的能力也是有限的,假设传送时发生 3 个位置的错误,这种错误显然不能被检测出来。
汉明距离
汉明距离衡量编码处理错误能力的关键指标,下边给出具体定义,总不妨设字符集
- 设码字 ,定义权重(weight) 为
- 对 ,定义 和 的汉明距离(Hamming distance) 为
注:容易验证 关于 - 编码 的(最小)距离定义为
注:距离 描述了码字 转变为另一码字 的最少修改数 - (定理)容易证明,分组码
- 编码 能检测至多
- 编码 能填补至多
- 编码 能纠正至多 个错误,即
- 用图像理解第三条性质:根据定义,以码字为圆心,半径 的“小球”互不相交,当错误数目 时,错误数据仍在小球范围内,因此能被纠正
衡量指标
编码在设计上有几个重要目标,或者说衡量指标:
- 处理错误的能力,比如检测错误,纠正错误
- 尽量小的冗余信息(minimize overhead)
- 计算效率,比如编码,解码和纠错等操作的执行效率
在分组码 中,错误处理能力用距离 或相对距离 描述,冗余信息用编码率/信息率
一般地,编码距离 越大,错误处理能力越强,但相应地,冗余信息将越多,这导致了信息率 的减小。因此,协调错误处理能力 与信息率
尽管如此,有不少研究在某些方面给出了解答,例如下边要介绍的汉明界。
有时也用相对距离
汉明界
在编码理论领域,汉明界(Hamming Bound) 是对分组码参数的限制,它对编码空间的利用率提出了重要限制。汉明界也被称为球包装界或体积界,这可以从推导过程看出来。
- 设 ,如下定义 ,并称为 的以 为半径的 Hamming Ball。
- 将汉明球 包含的 元素个数称为球的体积(Volume) ,记为
由于对称性,球体积与 的选取无关,因而体积定义中不含参数 - 推导易得下边公式
其中加项 代表与 的汉明距离为 的 。换言之,这些元素可通过 - 设 为 的距离,同前边示意图易知,汉明球 之间两两不交,继而有
取等当且仅当这些汉明球覆盖了整个空间;整理可得
上式表明,当编码块长 ,字符集长 以及编码距离 确定时,信息率 存在不等式右侧给出的上界,这一上界便称为汉明界 - 汉明界在某些角度上回答了编码距离与信息率的关系,假设编码块长 和字符集 确定,汉明界表明:当编码距离 确定时,信息率 不会超过某个数值。而取到边界当且仅当所构造编码的半径为 的汉明球覆盖了整个空间。达到汉明界的编码被称为完美编码(perfect code) 或汉明码(Hamming code)
- 举个例子,考虑二进制字符集 ,设编码的块长为 ,距离为 ,维数为 ,计算汉明界
根据汉明界,编码维数 ,如下编码可以取到等号
例中,编码用线性变换定义,这种编码方式称为线性码,Reed Solomon 编码便是一类特殊的线性码。
线性码
线性码是一种纠错码,任何码字的线性组合也是一个码字。线性码传统上分为分组码和卷积码,以下仅讨论分组码。
下设 为
基本概念
- (定义) 编码空间 的真子空间 称为 上的维数为 ,块长为 的线性码(Linear Code)。将矩阵 称为 的生成元矩阵(Generator Matrix),若
借助生成矩阵 ,线性码 可写为映射形式 - 生成元矩阵不唯一:任意可逆矩阵左乘生成元矩阵,仍得到生成元矩阵。特别地,通过调整 的索引,总能左乘得到上分块为单位阵的生成元矩阵:
容易发现,初始信息 嵌在编码后的信息中。我们将满足这一性质的编码称为系统码(Systematic Code) - 称 为线性码 的奇偶检验矩阵(Parity Check Matrix),若
由线性代数知识,易见 ,即矩阵 为列满秩,矩阵 - 设 为一组线性码,则 也为一组线性码,称为 的对偶码(Dual Code),其中
注:编码可以理解为信息空间到表示空间的单射,线性码则是通过列满秩矩阵给出这个单射。
编码距离
相比分组码,线性码的编码距离可以用矩阵 或
- 以下命题等价
- 编码 的汉明距离为
- 列空间非零向量最小权重,即
- 的任意 个列向量线性无关,且存在长为 的线性相关列向量组;换言之, 的线性相关列向量组的最小长度为
- 的任意 个行向量构成的向量组中,存在 个线性无关向量;换言之, 的任意
- 我们依次证明这几个命题
根据线性性:
先将 列分块化,并由 知
的 个非零元数目对应得到 中
根据定义: 的编码距离为 等价于 , 的任意 项出错不会得到另一个码字;等价于方程组 中,将 的任意 个行向量丢弃得到的方程 ,其只有唯一解 ;等价于 去掉任意
- 一般地,选取列向量 得距离上界 ,选取 的 个线性相关向量得到距离下界 ,比如前边例子
由 的第一列非零数得 ,由 前三列向量线性相关性 ,于是
信息率
前边提到衡量编码的三个重要指标:处理错误能力,尽量小的冗余信息,以及计算效率。关于错误处理能力,我们用编码距离 来衡量,对于线性码还可以借助生成元矩阵 和奇偶检验矩阵 做相关计算;对于冗余信息,Hamming Bound 给出了某些方面的回答,本节将对信息率的边界做更深入的探讨。
本节侧重介绍辛格尔顿界,其与 Reed Solomon 纠错直接关联,其他作为拓展兴趣只做科普性地介绍,不讨论证明。
辛格尔顿界
在编码理论中,辛格尔顿界(Singleton Bound) 以 Richard Collom Singleton 命名,其表明 分组码中,信息长满足 ,继而
这个定理的证明非常简单,考虑复合映射 为单射
必为单射,由于 与 至多前 d-1 个位置不同,即
由 为单射,比较集合立得 。
对于线性码,从上一节编码距离的刻画(4) 立知,。
GV 界
在编码理论中,GV Bound(Gilbert–Varshamov Bound) 是由 Edgar Gilbert 和 Rom Varshamov 分别独立提出的,关于编码(未必线性)参数的边界,Varshamov 通过使用线性码的概率方法证明了这一界限。有关该证明的更多信息请参阅这里。
定理 (Gilbert–Varshamov) 设 为素数幂次,,则存在线性码
- 的块长为 ,字符集数目为 , 汉明边界为
- 的信息率 满足下边性质
定理证明过程并不复杂,但使用了分析概率的方法,属于非构造性证明,感性趣看这个视频。
渐进分析(Asymptotics)
GV Bound 给出了 的下界,结合 Hamming Bound 得到
这个不等式中,信息率 与参数 均有关,且形式复杂,不利于理解 的性质。为此,我们使用渐进分析的方式,通过取极限去除某些参数,以研究
信息率与距离
- 设 为编码构成的序列,其中 为 分组码,定义序列 为
定义 的相对距离(简称距离) 为 - 前边讨论汉明界时,举了 -汉明码的例子,类似地,容易构造编码序列 ,其中 为 汉明码,此时
的信息率趋近于 ,但距离趋近于 0,即纠错能力趋于没有。 - 我们希望在 和 中找到最佳的协调方式,特别地,将满足 的编码序列称为渐进好的(Asymptotically Good)
边界分析
- GV Bound 和 Hamming Bound 公式中的体积球 不利于讨论,为此先定义 q-ary 熵函数(q-ary entropy function),用于化简公式
- 当
- 当 时,上式趋
- 当 时,
- 图像整体开口朝下
- 设 ,则(略去证明)
- 根据 Hamming Bound,对任意编码序列 ,有
根据 GV Bound,存在编码序列 ,使得 - 综上,有
我们将这两个边界分别称为编码序列 的渐进 GV Bound 和渐进 Hamming Bound。当 时,图像表现为 - 延伸
- Q1:是否存在编码序列,满足渐进 GV Bound,即落在黄色区域
- 当
- 当
- 能否构造编码序列,满足渐进 GV Bound,同样地,这个问题也仅在
- 渐进 GV Bound 给出蓝线以下的存在性,继而说明了存在“渐近好的”编码序列
- 关于边界分析,还有 Plotkin Bound 等,将图像进一步细化,这些都描述了比率 与距离 之间的关系
- 特别注意,本节讨论对编码序列的渐进分析,从图像上看 Singleton Bound 始终在 Plotkin Bound 上方,但这是在