您的位置:首页 > 理论基础 > 计算机网络

海明码求解公式规律(转载自计算机网络高分笔记)

2016-03-31 00:00 459 查看
海明码求解的具体步骤:

1.确定校验码的位数r

2.确定校验码的位置

3.确定数据的位置

4.求出校验码的值

假设要推到D=101101这串二进制数的海明码,应按照以下步骤。

1.确定校验码的位数r。

数据的位数k=6,按照公式来计算满足条件r的最小值,如下:

2r-1≥k+r

2r≥7+r

解此不等式,满足不等式的最小r为4,也就是D=101101的海明码应该有6+4=10位,其中原数据6位,效验码4位。

2.确定校验码的位置。

不妨假设这4位效验码分别为P1、P2、P3、P4;数据从左到右为D1、D2、……、D6.编码后的数据共有6+4=10位,设为M1、M2、……、M10.

校验码Pi(i取1,2,3,4)在编码中的位置为2i-1,见表3-1.

表3-1 校验码Pi在编码中的位置
M1M2M3M4M5M6M7M8M9M10
P1P2P3P4
3.确定数据的位置。

除了效验码的位置,其余的就是数据的位置,填充进去即可,于是可以把数据信息先填进去,见表3-2的“乙”行。

表3-2 数据在编码中的位置

M1M2M3M4M5M6M7M8M9M10
P1P2D1P3D2D3D4P4D5D6
101101
4.求出校验码的值。(精华)

这个公式有规律可循,但基本没有任何教材讲过,无意在一篇论文中看到。

假设出错位为e1、e2、e3、e4,现在需要做的就是将M1、M2、……、M10和e1、e2、e3、e4的关系对应出来,只要这个关系出来了,所有问题就都解决了。演示几个。

M1下标中的1可以表示成0001,这里的0001分别对应e4、e3、e2、e1(倒过来看),由于e1的值为1,因此M1只和e1有关;M3下标中的3可以表示成0011,因此M3和e1

、e2有关;M7下标中的7可以表示成0111,因此M7和e1、e2、e3有关。其他以此类推,只需将这些有关的用异或符号“⊕”连接起来即可,最后可得以下公式:

e1=M1⊕M3⊕M5⊕M7⊕M9

e2=M2⊕M3⊕M6⊕M7⊕M9

e3=M4⊕M5⊕M6⊕M7

e4=M8⊕M9⊕M10

然后将表3-1中求出的数据对应过来,即

e1=P1⊕D1⊕D2⊕D4⊕D5

e2=P2⊕D1⊕D3⊕D4⊕D6

e3=P3⊕D2⊕D3⊕D4

e4=P4⊕D5⊕D6

如果海明码没有错误信息,e1、e2、e3、e4都为0,等式右边的值也得为0,由于是异或,因此Pi(i取1,2,3,4)的值跟后边的式子必须一样才能使整个式子的值为0,即

P1=D1⊕D2⊕D4⊕D5

P2=D1⊕D3⊕D4⊕D6

p3=D2⊕D3⊕D4

P4=D5⊕D6

下面只需要将值代入计算即可:

P1=D1⊕D2⊕D4⊕D5=1⊕0⊕1⊕0=0

P2=D1⊕D3⊕D4⊕D6=1⊕1⊕1⊕1=0

p3=D2⊕D3⊕D4=0⊕1⊕1=0

P4=D5⊕D6=0⊕1=1

接下来把Pi的值填写到表3-1中,见表3-3的“丙”行,就可以得到海明码。

表3-3 “丙”行中的数据

M1M2M3M4M5M6M7M8M9M10
P1P2D1P3D2D3D4P4D5D6
0010011101
故101101的海明码为0010011101.

但是知道了怎么编写海明码,还需要知道怎么校验,方法如下。

现在假设第5位出错了,也就是第5位在传输的过程中被改为“1”,即得到的数据为0010111101.现在要找出错误的位置(假设现在不知道出错的位置)。

继续使用:

e1=M1⊕M3⊕M5⊕M7⊕M9=0⊕1⊕1⊕1⊕0=1

e2=M2⊕M3⊕M6⊕M7⊕M9=0⊕1⊕1⊕1⊕1=0

e3=M4⊕M5⊕M6⊕M7=0⊕1⊕1⊕1=1

e4=M8⊕M9⊕M10=1⊕0⊕1=0

按照e4、e3、e2、e1的排序方式得到的二进制序列为0101,恰好对应十进制5,这样就找到了出错的位置,即出错位是第5位。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: