海明校验码
特点:是一种多重分组奇偶校验
做法:将代码组织为若干分组,每组进行奇偶校验
用途:能够检验是否出错,也能定位出错位
1.怎么分组
分成几组?每组包含多少校验位?
设 编码位数为k位,分成r组,每组1个校验位,则校验码位数为r位,海明编码总长n=k+r
代码检验时:每组能产生一个指误码,则r位指误码能产生2^r中可能的指误代码
当指误码为全0时,则表示海明编码无错,因此剩下2^r-1指误码能用来表示1位错的情况
*各参数应该满足:k+r<=2^r-1
因此,当k=4时 带入公式得4+r<=2^r-1 解得 r>=3 ,所以能组成7位海明码
2.分组方法
以有效信息:A1A2A3A4为例,则校验位为P1P2P3,方式为偶校验
由图可知:第一组选定p1a1a2a4第二组选定p2a1a3a4第三组选定p3a2a3a4
每组选定应不相同
根据偶校验的规则,得到指误码的编码,如图,当数据码取1011010时,G3G2G1=000,则编码没有错误,当数据码取1011110时,G3G2G1=101(二进制)=5(十进制),表示第五位错误,则可将第五位变反得到正确编码1011010
海明距离(k=4,r=3)的海明距离为d=3
3.编码规则
每组均采用偶校验,填入检验码,组内具有偶数个1
【例题】4比特有效码(待编码数据)1001
(k=4,r=3)海明编码:0011001(黄色的为检验码)
4.检错与纠错
【例题】读取到数据:0011011
指误码:第3组0011011->G3=1
第2组0011011->G2=1 --------->G3G2G1=110(二进制)=6(十进制)
第1组0011011->G1=0
因此第6位出错,0011011->0011001
问?如果有多位数字发生错误呢?需增加分组扩大码距!
【注意】各组单独进行奇偶校验编码,以确定各组的校验位