1.1 纠错码介绍

纠错码介绍

引入
现代人们在生活中的通信方式是多种多样的,如打电话、传送电子邮件以及宇宙飞船将金星图片传回地球等. 虽然它们的形式不同,但是它们的数学模型可以表示成以下最简单的形式:

xx

发方把信息 x 通过信道传给收方. 在有线电话系统中, 电话线就是传输信息的信道. 在唐诗 “烽火连三月,家书抵万金”中, 烽火台燃起的烽火和邮差(驿站)分别是传递敌人入侵消息和寄送家书的信道.

通常信息被编码为字符串或数字串发出,事实上,通信中使用最多的是二元域 F2={0, 1} 来编码信息.现在假设要传递 8 个信息 {赵, 钱, 孙, 李, 周, 吴, 郑, 王}。如果每位数字取自二元域 F2中的 0 或 1 , 可以用长为 3 的 8 个向量来表示它们:

 赵 =(000), 钱 =(100), 孙 =(010), 李 =(110), 周 =(001), 吴 =(101), 郑 =(011), 王 =(111).

设想把 “钱 =(100) ”传出, 如果信道中出错, 如第二位的 0 变成 1 , 收方收到了 (110). 这时收方对于出错毫无所知, 因为收方可认为没有出错, 即发来的是 (110)= 李, 也有可能是第 1 位出错, 即发来的是 (010)= 孙, 如此等等. 总之, 这种传输方式完全没有检查和纠正错误的能力.其主要原因是收方收到的任何向量 (a1a2a3) 都是有意义的, 从而收方没有任何判别能力.

如何设计有检查和纠正错误能力的通信系统?

例 1 (奇偶校验码) 前面把 “赵、钱、孙、李、周、吴、郑、王” 8 个信息编成 3 位的向量.现在把每个向量后面增加 1 位,变成 4 位的向量, 使得其中 1 的个数是偶数. 例如, “钱”为 (100), 后面加上 1 成为 (1001), 而 “李” 为 (110), 后面加上 0 成为 (1100). 这样一来,8 个姓分别重新编成 :

 赵 =(0000), 钱 =(1001), 孙 =(0101), 李 =(1100), 周 =(0011), 吴 =(1010), 郑 =(0110), 王 =(1111).

于是, 长为 4 的二元向量共有 24=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 次,成为:

 赵 =(000000000), 钱 =(100100100), 孙 =(010010010), 李 =(110110110), 周 =(001001001), 吴 =(101101101), 郑 =(011011011), 王 =(111111111).

这就好像是军舰上旗手打旗语时重复 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 的二元向量共有 29=512 个, 只有 8 个向量是有意义的,剩下 504 个向量没有意义.本来传 8 个信息, 每个信息只用 3 位即可. 现在为了有纠错能力, 将它们重新进行纠错编码, 每个信息要用 9 位. 这样一来,传一个信息所花的时间为原来的 3 倍, 即效率是原来的 39=13. 所以是牺牲了效率而得到了通信的纠错能力. 在例 1 中, 长为 3 的向量为了纠错重新编成长为 4 的向量. 效率 34 比例 2 中的 13 损失要小, 但是例 1 只能检查 1 位错, 完全不能纠错, 所以纠错性能不如例 2.

数学模型
从以上例子可以看出, 为了使通信系统有纠错能力, 需要把原始信息重新进行纠错编码,将向量拉长, 从而有许多向量不代表任何信息.在接收端要有设备,能够把出错后收到的向量纠正成正确的信息,发现错误并找出错误, 恢复成正确的信息. 这一步叫做纠错译码. 在增加了纠错编码和纠错译码步骤之后, 一个有纠错能力的通信系统可以表示成如下的数学模型:

xcy=c+εcx

它的工作方式为发方将原始信息 x (长为 k 的向量) 编成码字 c (长为 n 的向量, n>k ) 传给收方.在传送过程中发生错误 ε (长为 n 的向量), 所以收到 y=c+ε. 收方进行纠错译码, 求出错误 ε,然后恢复出正确码字 c=yε, 再得到原始信息 x.

习题

1. 假设每个信息位取值于 F7={0,1,2, 3,4,5,6}. 将 7 个信息分别编成 (00000), (11111),, (66666). 试问这个纠错码最多可以检查出几位错误, 最多可以纠正几位错误?

2. 能否将 4 个信息中的每个均编成长为 5 的二元码字 (a1a2a3a4a5) (每个 ai 为 0 或 1 ), 使得可以纠正 1 位或 2 位错误?
解: 纠正一位错误

(11100100100101000001)

3. 从以上两个习题能否看出:要想纠正 3 位错误, 编出的码字应当具备什么性质?

posted @   Pizixsr  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示