海明码

1. 海明码的概念

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

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

海明码的编码效率为:

R=k/(k+r)

式中 k 为信息位位数

r
为增加冗余位位数

2.
海明码的生成与接收

方法一:

1)
海明码的生成。

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

S2=a2+a4+a5+a6

S1=a1+a3+a5+a6

S0=a0+a3+a4+a6

求:海明码码字。

解: 1) 由监督关系式知冗余码为 a 2a 1a 0

2)
冗余码与信息码合成的海明码是: " 0010a 2a 1a 0"

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

错码位置

无错

a 0

a 1

a 2

a 3

a 4

a 5

a6

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

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

5)
把冗余码 a 2a 1a 0 删除得发送端的信息码: "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 分别插于 2k (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)
把位于 2k 位的冗余码删除得信息码: "1 1 0 0 1 1 0 0"
 

你可能感兴趣的:(职场,休闲,海明码)