海明码(海明码校验)

频道:电子元器件 日期: 浏览:297

海明码

本文内容来自于互联网,分享海明码(海明码校验)

1.海明码的概念

  海明码是一种可以纠正一位差错的编码。它是利用在信息位为k位,增加r位冗余位,构成一个n=k+r位的码字,然后用r个监督关系式产生的r个校正因子来区分无错和在码字中的n个不同位置的一位错。它必需满足以下关系式:

  2^r>=n+1 或 2^r>=k+r+1

  海明码的编码效率为:

海明码(海明码校验)

  R=k/(k+r)

  式中 k为信息位位数

  r为增加冗余位位数

  2.海明码的原理

  在数据中间加入几个校验码,将玛距均匀拉大,将数据的每个二进制位分配在几个奇偶校验组里,当某一位出错,会引起几个校验位的值发生变化。

  海明不等式:

  校验码个数为K,2的K次幂个信息,1个信息用来指出“没有错误”,其余2K-1个指出错误发生在那一位,但也可能是校验位错误,故有N<=2的K次-1-K能被校验。

  海明码的编码规则:

  1.每个校验位Ri被分配在海明码的第2的i次的位置上,

  2.海明玛的每一位(Hi)是由多个/1个校验值进行校验的,被校验玛的

  位置玛是所有校验这位的校验位位置玛之和。

  一个例题:

  4个数据位d0,d1,d2,d3, 3个校验位r0,r1,r2,对应的位置为:

  d3 d2 d1 r2 d0 r1 r0 ======b7 b6 b5 b4 b3 b2 b1

  校验位的取值,就是他所能校验的数据位的异或

  b1为b3,b5,b7的异或,b2为b3,b6,b7 b4为b5,b6,b7

  海明玛传送到接受方后,将上三式的右边(b1,b2,b4)的逻辑表达式分别

  异或上左边的值就得到了校验方程,如果上题采用偶校验

  G1=b1 b3 b5 b7的异或

  G2=b2 b3 b6 b7的异或

  G3=b4 b5 b6 b7的异或

  若G1G2G3为001是第四位错

  若为011是第六位错

  3.海明码的生成与接收

  特注:以下的+均代表异或

  方法一:

  1)海明码的生成。

  例1.已知:信息码为:"0010"。海明码的监督关系式为:

  S2=a2+a4+a5+a6

  S1=a1+a3+a5+a6

  S0=a0+a3+a4+a6

  求:海明码码字。

  解:1)由监督关系式知冗余码为a2a1a0。

  2)冗余码与信息码合成的海明码是:"0010a2a1a0"。

  设S2=S1=S0=0,由监督关系式得:

  异或运算:

  a2=a4+a5+a6=1

  a1=a3+a5+a6=0

  a0=a3+a4+a6=1

  因此,海明码码字为:"0010101"

  2)海明码的接收。

  例2.已知:海明码的监督关系式为:

  S2=a2+a4+a5+a6

  S1=a1+a3+a5+a6

  S0=a0+a3+a4+a6

  接收码字为:"0011101"(n=7)

  求:发送端的信息码。

  解:1)由海明码的监督关系式计算得S2S1S0=011。

  2)由监督关系式可构造出下面错码位置关系表:

  S2S1S0

  000

  001

  010

  100

  011

  101

  110

  111

  错码位置

  无错

  a0

  a1

  a2

  a3

  a4

  a5

  a6

  3)由S2S1S0=011查表得知错码位置是a3。

  4)纠错--对码字的a3位取反得正确码字:"0 0 1 0 1 0 1"

  5)把冗余码a2a1a0删除得发送端的信息码:"0010"

  方法二:(不用查表,方便编程)

  1)海明码的生成(顺序生成法)。

  例3.已知:信息码为:" 1 1 0 0 1 1 0 0 " (k=8)

  求:海明码码字。

  解:1)把冗余码A、B、C、…,顺序插入信息码中,得海明码

  码字:" A B 1 C 1 0 0 D 1 1 0 0 "

  码位: 1 2 3 4 5 6 7 8 9 10 11 12

  其中A,B,C,D分别插于2的k次方位(k=0,1,2,3)。码位分别为1,2,4,8。

  2)冗余码A,B,C,D的线性码位是:(相当于监督关系式)

  A->1,3,5,7,9,11;

  B->2,3,6,7,10,11;

  C->4,5,6,7,12;(注 5=4+1;6=4+2;7=4+2+1;12=8+4)

  D->8,9,10,11,12。

  3)把线性码位的值的偶校验作为冗余码的值(设冗余码初值为0):

  A=∑(0,1,1,0,1,0)=1

  B=∑(0,1,0,0,1,0)=0

  C=∑(0,1,0,0,0) =1

  D=∑(0,1,1,0,0) =0

  4)海明码为:"1 0 1 1 1 0 0 0 1 1 0 0"

  2)海明码的接收。

  例4.已知:接收的码字为:"1 0 0 1 1 0 0 0 1 1 0 0"(k=8)

  求:发送端的信息码。

  解:1)设错误累加器(err)初值=0

  2)求出冗余码的偶校验和,并按码位累加到err中:

  A=∑(1,0,1,0,1,0)=1 err=err+20=1

  B=∑(0,0,0,0,1,0)=1 err=err+21=3

  C=∑(1,1,0,0,0) =0 err=err+0 =3

海明码(海明码校验)

  D=∑(0,1,1,0,0) =0 err=err+0 =3

  由err≠0可知接收码字有错,

  3)码字的错误位置就是错误累加器(err)的值3。

  4)纠错--对码字的第3位值取反得正确码字:

  "1 0 1 1 1 0 0 0 1 1 0 0"

  5)把位于2的k次方位的冗余码删除得信息码:"1 1 0 0 1 1 0 0"

关键词:明码校验