奇偶校验码
奇偶校验码出现:数据传输会因各种原因发生错误、失败
校检原理
假设有01、00两个数据,01的1数据发生跳变会变成00,引发错误数据
可以设想01、00两个数据之前加入一个冗余码位,变成001,100,这样在假设冗余码未发生跳变,数据发生跳变,可以很好检测出数据发生跳变
码字:由若干位代码组成的一个字
将两个码字逐位对比,不同位个数称为两个码字间距
所有合法码字之间的距离叫码距,简称d
当d=1时,无检错能力;当d=2时,有检错能力;当>3时,设计合理即检错,又纠错
奇偶校验
在信息位的首部或尾部添加一个奇偶校验位
奇校验码:整个校验码中“1”的个数为奇数,如001,凑个0,变成0001
偶校验码:整个校验码中“1”的个数为偶数,如001,凑个1,变成1001
局限性:码距为2,只能检测奇数个数据跳变的错误,无纠错能力(思考是不是d为偶数就只能检测奇数个数据)
计算机如何实现奇偶校验:通过各个位的异或运算(模2加)
海明码
海明码思路
一个校验位只能携带2种状态信息(对/错)
多个校验位能携带多种状态信息(对/错,错在哪) 对n个信息位分k个分组(一个分组对应一个校验位)=k个
怎么分组,设置多少校验位
-
校验位k有 2k种状态
-
信息位n+校验位K
综合上述有如下公式
所有状态必须包含一个正确信息
D4D3D2D1(1010),共四位,校验位P3P2P1,
对应海明码信息位为H7H6H5H4H3H2H1
P的位置放在2i-1位置上,如同二进制的权值
形成D4D3D2P3D1P2P1这种数据格式
根据D数据位所占用信息位的2进制表示方式
3——》 011
5——》 101
6——》 110
7——》 111
二进制每个纵列发现问题可以配对
这样P所处的权重可以和二进制的4 2 1 对应
这样
P1=H3⊕H5⊕H7=D1⊕D2⊕D4 /6为0所以不算
P2=H3⊕H6⊕H7=D1⊕D3⊕D4
P3=H5⊕H6⊕H7=D2⊕D3⊕D4
如何纠错
S1=P1⊕D1⊕D2⊕D4
S2=P2⊕D1⊕D3⊕D4
S3=P3⊕D2⊕D3⊕D4
如果无数据丢失/正确则为0
如果数据位出错则出错位置为S3S2S1的数值二进制组合
海明码有1bit的纠错能力,有2bit的检错能力
如果有两个比特位的跳变则可能出错:P1P2跳变无法定位哪里出错,所以加入H8的偶校验进行全校验
S3S2S1=000且全体偶校验成功-》无错误
S3S2S1不=000且全体偶校验失败-》有1位错,纠正即可
S3S2S1不=000且全体偶校验成功-》有2位错,需重传