1.1 纠错码介绍
纠错码介绍
引入
现代人们在生活中的通信方式是多种多样的,如打电话、传送电子邮件以及宇宙飞船将金星图片传回地球等. 虽然它们的形式不同,但是它们的数学模型可以表示成以下最简单的形式:
发方把信息 \(x\) 通过信道传给收方. 在有线电话系统中, 电话线就是传输信息的信道. 在唐诗 “烽火连三月,家书抵万金”中, 烽火台燃起的烽火和邮差(驿站)分别是传递敌人入侵消息和寄送家书的信道.
通常信息被编码为字符串或数字串发出,事实上,通信中使用最多的是二元域 \(F_2=\{0\), \(1\}\) 来编码信息.现在假设要传递 8 个信息 {赵, 钱, 孙, 李, 周, 吴, 郑, 王}。如果每位数字取自二元域 \(F_2\)中的 0 或 1 , 可以用长为 3 的 8 个向量来表示它们:
设想把 “钱 \(=(100)\) ”传出, 如果信道中出错, 如第二位的 0 变成 1 , 收方收到了 \((110)\). 这时收方对于出错毫无所知, 因为收方可认为没有出错, 即发来的是 \((110)=\) 李, 也有可能是第 1 位出错, 即发来的是 \((010)=\) 孙, 如此等等. 总之, 这种传输方式完全没有检查和纠正错误的能力.其主要原因是收方收到的任何向量 \(\left(a_1 a_2 a_3\right)\) 都是有意义的, 从而收方没有任何判别能力.
例 1 (奇偶校验码) 前面把 “赵、钱、孙、李、周、吴、郑、王” 8 个信息编成 3 位的向量.现在把每个向量后面增加 1 位,变成 4 位的向量, 使得其中 1 的个数是偶数. 例如, “钱”为 (100), 后面加上 1 成为 (1001), 而 “李” 为 (110), 后面加上 0 成为 (1100). 这样一来,8 个姓分别重新编成 :
于是, 长为 4 的二元向量共有 \(2^4=16\) 个, 其中, 1 的个数为偶数的向量占一半, 是有意义的信息, 而另一半 (即 1 的个数为奇数的 8 个向量 (1000), (0100), , , (0111)) 是没有意义的, 不代表任何信息.
现在如果有 1 位发生错误, 如李 \(=(1100)\)的第 2 位出错, 则收方得到 \((1100)+(0100)=(1000)\) , 其中, 1 的个数为奇数, 它没有意义,于是收方可以断定信道发生了错误. 所以这种编码方式可以检查任何一位出错. 但是收方并不能判定错在哪一位, 因为赵 \(=(0000)\) 的第 1 位出错也可以收到 (1000). 所以收方不能纠正任何 1 位的错误. 类似地可以看出,对于这种编码方式, 收方不能检查 2 位出错, 如赵 \(=(0000)\) 和钱 \(=(1001)\) 只有首末两位不同,赵 \(=(0000)\) 的首末两位出错就错成钱 \(=(1001)\).
例 2 (重复码) 将表示 8 个姓的 3 位向量都重复 3 次,成为:
这就好像是军舰上旗手打旗语时重复 3 次,或者电话中有杂音时, 每句话都重复说 3 次. 这时, 每个姓的编码都是相同的 3 段(每段 3 位).对于不同的姓,在一段中至少有 1 位不同,所以 3 段中至少有 3 位不同. 也就是说, 不同姓的 9 位向量中, 至少有 3 位不同, 所以若一个姓 (如 \(钱 =(100100100)\)) 的 9 位中有 1 位或 2 位出错 (如前两位出错, 收到 (010100100)), 收到向量不会是有意义的, 从而收方发现出错. 这表明, 这种编码方式可以检查出 1 位或 2 位错误. 但是出 3 位错误则不一定能检查出来, 如钱 \(=(100100100)\) 出 3 位错可能变成赵 \(=\) (000000000). 进而,这种编码方式可以纠正 1 位错误. 例如, 钱 \(=(100100100)\) 只有 1 位错, 收到(000100100)(第 1 位出错), 那么它一定有两段一样,而第 1 段 000 的第 1 位是错的. 这就表明,这种编码方式可以纠正 1 位错误. 但是收方不能纠正 2 位错误, 如若钱 \(=(100100100)\) 错两位成为 (000000100), 收方无法判定发出的信息为 “钱”, 因为它也可能是赵 \(=(000000000)\) 发生 1 位错误.
分析
长为 9 的二元向量共有 \(2^9=512\) 个, 只有 8 个向量是有意义的,剩下 504 个向量没有意义.本来传 8 个信息, 每个信息只用 3 位即可. 现在为了有纠错能力, 将它们重新进行纠错编码, 每个信息要用 9 位. 这样一来,传一个信息所花的时间为原来的 3 倍, 即效率是原来的 \(\frac{3}{9}=\frac{1}{3}\). 所以是牺牲了效率而得到了通信的纠错能力. 在例 1 中, 长为 3 的向量为了纠错重新编成长为 4 的向量. 效率 \(\frac{3}{4}\) 比例 2 中的 \(\frac{1}{3}\) 损失要小, 但是例 1 只能检查 1 位错, 完全不能纠错, 所以纠错性能不如例 2.
数学模型
从以上例子可以看出, 为了使通信系统有纠错能力, 需要把原始信息重新进行纠错编码,将向量拉长, 从而有许多向量不代表任何信息.在接收端要有设备,能够把出错后收到的向量纠正成正确的信息,发现错误并找出错误, 恢复成正确的信息. 这一步叫做纠错译码. 在增加了纠错编码和纠错译码步骤之后, 一个有纠错能力的通信系统可以表示成如下的数学模型:
它的工作方式为发方将原始信息 \(x\) (长为 \(k\) 的向量) 编成码字 \(c\) (长为 \(n\) 的向量, \(n>k\) ) 传给收方.在传送过程中发生错误 \(\varepsilon\) (长为 \(n\) 的向量), 所以收到 \(y=c+\varepsilon\). 收方进行纠错译码, 求出错误 \(\boldsymbol{\varepsilon}\),然后恢复出正确码字 \(c=y-\varepsilon\), 再得到原始信息 \(x\).
习题
\(1.\) 假设每个信息位取值于 \(F_7=\{0,1,2\), \(3,4,5,6\}\). 将 7 个信息分别编成 (00000), (11111),\(\cdots\), (66666). 试问这个纠错码最多可以检查出几位错误, 最多可以纠正几位错误?
\(2.\) 能否将 4 个信息中的每个均编成长为 5 的二元码字 \(\left(a_1 a_2 a_3 a_4 a_5\right)\) (每个 \(a_i\) 为 0 或 1 ), 使得可以纠正 1 位或 2 位错误?
解: 纠正一位错误
\(3.\) 从以上两个习题能否看出:要想纠正 3 位错误, 编出的码字应当具备什么性质?

浙公网安备 33010602011771号