初识海明码校验
一、简介
海明校验码是一种用冗余数据位来检测和纠正差错的方法,是一种多重奇偶检错的方法。这种方法只能检测和纠正一位出错的情况(如果有多个错误,就不能查出了)。
二、编码原则
海明码中的全部传输码字由信息位和附加的奇偶校验位组成,每一个奇偶位被编在传输码字的特定位置(原则1),这个系统对于错误的数位无论是原有信息位还是附加校验位中都能把它分离出来。实际是将数据氛围k个小组,每个小组一个校验位,校验位的取值采用奇偶校验方式确定。
数据为n位,校验位k位,n与k之间的关系:
(2^k)-1>=n+k
公式的理解:k个校验位可以表示2^k 个状态,可用一种状态指出“指出没有发生错误”,其余的(2^k)-1指出错误发生在某一位(包括k个校验位,n个数据位)
1、一般校验码Pi 放在2^(i-1)的位置
校验位P1、P2、…、Pi,分别放在2^0、 21、…、2^(i-1)的位置上,其他位上为有效信息位。
即:P1放在海明码的H1,P2放在海明码的H2,P3放在海明码的H4,P4放在海明码的H8。。。
2、海明码中任何一位都是由若干校验位来校验
校验位Pi由信息位中的一位或若干位所校验
3、被校验的海明位的下标等于所有参与校验该位的校验位的下标之和,而校验位由自身校验
第i位,由校验位位号(P1、P2、P4…中的1,2,4…)之和等于i的那些校验位所校验(Hn:代表第n位海明码,Pn:代表第n位校验位,Dn:代表第n位校验位)
eg:H3:由P1和P2所校验(因为3=1+2)
H5:由P1和P3所校验
1->2^(1-1)=1;
4 -> 2^(3-1)=4
三、示例
问题:传递的信息1010,求奇校验规则下的海明码。
(一)发送方
第一步:获取校验位数
2^k>=n+k+1(其中n=4),通过计算可知k=3
第二步:确定校验位的位置
第三步:根据海明位的下标确定每一个海明位由哪些校验位确定
上图通过不同颜色诠释了上方编码规则3,举例示意了:海明位H1由P1,海明位H2由P2,海明位H3由P1和P2共同决定,其他以此类推,eg:H7=1+2+4,故由P1、P2、P3共同确定。
第四步:根据奇偶校验规则确定校验位
第五步:确定发送方数据
0110010
(二)接收方(隔几划几)
1、假如接收正确位0110010
按照奇偶校验第一组:0100✅
按照奇偶校验第二组:1110✅
按照奇偶校验第三组:0010✅
均符合校验,数据正确
2、1位校验位发生错误:假如接收H2发生错误:0010010
按照奇偶校验第一组:0100✅–》说明H1、H3、H5、H7符合奇校验,为0
按照奇偶校验第二组:0110❌–〉说明H2、H3、H6、H7不符合奇校验,为1
按照奇偶校验第三组:0010✅–》说明H4、H5、H6、H7符合奇校验,为0
不符合标记为1,则三组情况为:010:为第2位出现错误