当前位置:文档之家› 海明码详解

海明码详解

海明码详解
①海明校验的基本思想
将有效信息按某种规律分成若干组,每组安排一个校验位,做奇偶测试,就能提供多位检错信息,以指出最大可能是哪位出错,从而将其纠正。

实质上,海明校验是一种多重校验。

②海明校验的特点
它不仅具有检测错误的能力,同时还具有给出错误所在准确位置的能力。

一.校验位的位数校验位的位数与有效信息的长度有关
设:N--为校验码的位数 K--是有效信息位 r--校验位(分成r组作奇偶校验,能产生r位检错信息)
海明码应满足 N=K+r≤2r-1 若r=3 则N=K+r≤7 所以K≤4
二.分组原则`
在海明码中,位号数(1、2、3、……、n)为2的权值的那些位,即:
1(20)、2(21)、 4(22)、8(23)、…2r-1位,作为奇偶校验位
并记作: P1、P2、P3 、P4、…Pr,余下各位则为有效信息位。

例如: N=11 K=7 r=4 相应海明码可示意为
位号 1 2 3 4 5 6 7 8 9 10 11
P占位P1 P2 × P3 × × × P4 × × ×
其中×均为有效信息,海明码中的每一位分别被P1P2P3P4… Pr 中的一至若干位所校验,其规律是:
第i位由校验位位号之和等于i的那些校验位所校验
如:海明码的位号为3,它被P1P2(位号分别为1,2)所校验
海明码的位号为5,它被P1P3(位号分别为 1,4)所校验
归并起来: 形成了4个小组,每个小组一个校验位,校验位的取值,仍采用奇偶校验方式确定。

如表2·6 、表2·7所示:
三.编码、查错、纠错原理
以4位有效信息(b1、b2、b3、b4)和3位校验位(P1、P2、P3)为例: K=4 r=3 海明序号 1 2 3 4 5 6 7
海明码 P1 P2 b1 P3 b2 b3 b4
根据表2-8可以看到
(1)每个小组只有一位校验位,第一组是P1、第二组是P2、第三组是P3。

(2)每个校验位校验着它本身和它后面的一些确定位。

1.编码原理(采用偶校验)
1)若有效信息b1b2b3b4=1011 先将它们分别填入第3、5、6、7位
2)再分组进行奇偶统计,分别填入校验位P1、P2、P3的值
如:第一组有:P1b1b2b4 因b1b2b4含偶数个1,故P1应取值为0
第二组有:P2b1b3b4因b1b3b4含奇数个1,故P2应取值为1
第三组有:P3b2b3b4 因b2b3b4含偶数个1,故P3应取值为0
海明编码为:P1P2b1P3b2b3b4=0110011
2.查错与纠错
因为分三组校验,每组产生一位检错信息、3组共3位检错信息,便构成一个指误字,上例指误字由G1G2G3组成。

其中:
G3=P3⊕b2⊕b3⊕b4 P3b2b3b4=0011
G2=P2⊕b1⊕b3⊕b4 P2b1b3b4=1111
G1=P1⊕b1⊕b2⊕b4 P1b1b2b4=0101
采用偶校验,在没有出错情况下G1G2G3=000。

由于在分组时,就确定了每一位参加校验的组别,所以指误字能准确地指出错误所在位。

如:若第3位b1出错,由于b1参加了第一组和第二组的校验,必然破坏了第一组和第二组的偶性,从而使G1和G2为1。

因为b1未参加第三组校验,故G3=0,所以构成的指误字G3G2G1=011它指出第3位出错。

反之:若G3G2G1=111 则说明海明码第7位b4出错。

因为只有第7位b4参加了3个小组的校验,破坏了三个小组的偶性。

假定:
源部件发送海明码为:0110011 接收端接收海明码为:0110011
则: 三个小组都满足偶校验要求,这时G3G2G1=000,表明收到信息正确,可以从中提出有效信息1011参与运算处理。

纠错:若接收端收到的海明码为0110111,分组检测后指误字G3G2G1=101,它指出第5位出错,则只须将第5位变反,就可还原成正确的数码0110011。

正文字体大小:大中小
海明码和CRC编码
(2009-04-17 22:03:44)
转载▼
标签:
分类:软件设计
海明码
原码
校验码
报文
it
一、CRC编码
1、已知多项式和原报文,求CRC编码,如:使用多项式G(x)=x^5 + x^4 + x +1,对报文10100110进行CRC编码,则编码后的报文是什么?
方法与步骤:
步骤1:对报文10100110,在末尾添加所给多项式的最高次阶个0,如本题为x^5,则添加5个0,变为:1010011000000。

步骤2:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。

步骤3:步骤1中求得的1010011000000对步骤2中求得的110011进行模二除法,所得到的余数即为校验码,把校验码添加在原报文尾部即为所求的编码报文1010011011000,具体如下:
2.已知道接收到的CRC编码,求原编码或判断是否出错,如:已知G(x)=x^5 + x^4 + x +1,接收的为1010011011001,问是否出错?
步骤一:由多项式G(x)=x^5 + x^4 + x +1,得其阶数为1的二进制编码为:110011。

步骤二:用接收的报文1010011011001对步骤一的110011进行模二除法,看余数是否为0,如为0则正确,如不为0,则出错,计算余数为1,则出错。

如下图:
二、海明码
1.求海明码,如:求1011海明码。

步骤一:求校验码位数r,公式为:2^r ≥r+k+1的最小r。

题目中为2^3≥3+4+1,所以取r=3,即校验码为3位。

步骤二:画图,并把原码的位编号写成2的指数求和的方式,其中位编号长度为原码和校验码个数之和,从1开始。

校验码插在2的阶码次方的位编号下,且阶小于r。

如下:
原码的位编号写成2的指数求和:
7=2^2+2^1+2^0;
6=2^2+2^1;
5=2^2+2^0;
3=2^1+2^0;
步骤三:求校验位,即每个校验位的值为步骤二中“原码的位编号写成2的指数求和”式子中相应2的阶出现的位编号下原码的值异或。

即:
r0=I4异或I2异或I1=1;(2^0次出现在7,5,3位,其对应的值为I4,I2,I1)
r1=I4异或I3异或I1=0;(2^1次出现在7,6,3位,其对应的值为I4,I3,I1)
r2=I4异或I3异或I2=0;(2^0次出现在7,6,5位,其对应的值为I4,I3,I2)
把r0,r1,r2带入海明码,得所求的海明码为:1010101
2.已知海明码,求原码或判断是否出错并改正错位,如:信息位8位的海明码,接收110010100000时,判断是否出错,并求出发送端信息位。

步骤一:求校验码位数r,公式为:2^r ≥r+k+1的最小r。

题目中为2^4≥4+8+1,所以取k=4,即校验码为4位。

步骤二:根据作图,求得信息位编码和发过来的校验码记为r,并由原编码从新计算出新的校验码与发来的校验码r进行异或运算,具体如下:
得到,原码11000100,发送来的校验码r为1000
再根据求R,把原码的位编号写成2的指数求和:
12=2^3+2^2;
11=2^3+2^1+2^0;
10=2^3+2^0;
9=2^3+2^0;
7=2^2+2^1+2^0;
6=2^2+2^1;
5=2^2+2^0;
3=2^1+2^0;
求得:
S3=r3异或(I8异或I7异或I6异或I5)
S2=r2异或(I8异或I4异或I3异或I2)
S1=r1异或(I7异或I6异或I4异或I3异或I1)
S0=r0异或(I7异或I5异或I4异或I2异或I1)
S3S2S1S0,其十进制为0,表示没出错,如果不为零,则其十进制数即为出错的位。

本题S3S2S1S0=1001,十进制为9,即第九位出错。

改过来既为:11010100
注:不管用海明还是CRC编码,如果不是有必要或学密码学,不用想办法搞清原理,就拿它当像勾股定理一样使用就ok,否则,对一般来讲,的确有点痛苦。

相关主题