纠错码是一种通过有结构的冗余来表示信息的方法,使传输或存储过程中产生的错误能够得到纠正。编码器将消息映射为称为码字的合法序列;解码器则利用这些序列的结构,从可能受损的数据中推断出原始消息。纠错码在信息论和数字电信中占有核心地位。如果纠错过程无需请求重传,就称为前向纠错(FEC)。(nokia.com)
原理与参数
冗余使合法码字即使受到有限程度的破坏,仍能彼此区分。一种简单的重复码用三个比特表示一个比特:0 编为 000,1 编为 111。只要最多有一个位置发生变化,多数判决解码就能恢复原始比特。因此,收到 101 时,解码结果为 1。这种码容易实现,但每传输一个信息比特,就需要发送三个比特。(math.mit.edu)
分组码将消息编码为固定长度的码字。如果一种码将 (k) 个信息符号映射为同一符号集上的 (n) 个符号,其码率为
[ R=\frac{k}{n}. ]
码率越高,冗余越少,不过可靠性还取决于码的结构、信道和解码器。系统编码器在指定位置保留原有信息符号,并补充校验符号;非系统编码器则不必保留这种直观的信息与校验分离形式。(nokia.com)
距离、检错与纠错
两个等长序列之间的汉明距离,是它们对应位置上符号不同的位置数。一个码的最小距离 (d_{\min}),是任意两个不同码字之间距离的最小值。它决定了针对符号替换错误的最坏情况保证:一个码能够检测出所有不超过 (d_{\min}-1) 个错误的模式,并能唯一纠正所有不超过
[ t=\left\lfloor\frac{d_{\min}-1}{2}\right\rfloor ]
个错误的模式。这是两项独立的保证:配置为纠错的解码器,不一定能将所有超出纠错范围、但原本可以检测出的错误模式标记出来。(math.mit.edu)
纠错之所以可行,是因为与不同码字距离不超过 (t) 的接收序列集合互不重叠。超出这个半径后,解码仍可能成功,但无法保证;受损的序列可能被误判为另一个码字。检错则是判断一个序列不合法,而不一定确定原始消息。系统可以利用检错来请求重传,而不是在本地纠正错误。(math.mit.edu)
线性码与伴随式解码
线性码是 (\mathbb{F}_q^n) 的一个线性子空间,其中 (\mathbb{F}_q) 是一个有限域。一个 (k) 维线性码包含 (q^k) 个码字。其代数结构使编码和校验可以通过矩阵完成,而不必显式存储每个码字。采用行向量记法时,生成矩阵 (G) 将消息 (u) 编码为 (c=uG)。对于每个码字,校验矩阵 (H) 都满足 (Hc^T=0)。(ocw.mit.edu)
若接收向量为 (r=c+e),其伴随式为
[ s=Hr^T=He^T. ]
伴随式取决于错误向量 (e),而与发送的码字无关。伴随式解码器将伴随式与候选错误模式对应起来,并消除推断出的错误。伴随式为零意味着接收向量是一个合法码字,并不一定意味着传输没有发生错误。对于二元码,加法采用异或运算,等价于模算术中的模二加法。(ocw.mit.edu)
二元[[hamming-code|汉明 ([7,4,3]) 码]]将四个信息比特编码为七个比特,并能纠正任意单比特错误。它的三比特伴随式能够区分七种可能的单比特错误位置以及无错误的情况。(ocw.mit.edu)
主要码族与解码方法
里德–所罗门码通过计算有限域上多项式的取值来构造码字。其符号可以表示一组比特,而符号级纠错能力使它们适合处理连续比特受损的情况。这类码已用于光盘和航天器通信。(learn.mit.edu)
卷积码采用有限状态机制对数据流进行编码,其输出取决于当前输入和存储的状态。解码通常使用维特比算法,在状态转移网格图中寻找最可能的路径。硬判决解码使用离散的符号判决结果;软判决解码保留接收信号的可靠性信息,从而能够作出依据更充分的选择。(ocw.mit.edu)
低密度奇偶校验(LDPC)码使用稀疏校验矩阵,通常通过迭代消息传递进行解码。Turbo 码借助交织器组合分量码,并在各分量解码器之间交换可靠性信息。在适当条件下,这两类码都能逼近信道容量极限。级联结构将不同的码组合起来,例如以里德–所罗门码作为外码、卷积码作为内码。(ocw.mit.edu)
历史基础与实际限制
1948 年,克劳德·香农确立了有噪信道编码定理。对于离散无记忆信道,当信息速率低于其信道容量时,存在这样的码:随着分组长度增加,其解码错误概率可以变得任意小。该定理确立的是一个可达到的极限,并不保证每一种有限长度的码都能达到这一极限。理查德·汉明在 1950 年的论文中提出了实用的检错与纠错构造方法。(mtlsites.mit.edu)
实际选择编码方案时,需要权衡冗余、时延、解码运算量和残余错误概率。更长的分组和更复杂的解码器可以改善性能,但也需要缓冲存储和计算资源。航天器通信链路体现了这些取舍:美国国家航空航天局(NASA)的文档介绍了里德–所罗门码、卷积码、Turbo 码和 LDPC 码,其性能取决于分组大小、编码方案和链路余量。数据压缩旨在缩短数据的表示长度,而纠错则有意引入冗余,以保护信息。(ocw.mit.edu)