最通俗易懂的海明码校验纠错讲解

一、海明码编码

1.1. 求海明码位数

公式:2^{k}≥N+k+1,其中N为有效信息位数,K为校验码位数。

例子:编码前有效信息为10011101,求校验码位数?

解:

        有效信息码10011101长度为8则,N=8,求K=?,可以将N带入公式2^{k}≥8+k+1然后K可依次用正整数带入,取维持等式成立的最小值,解得K=4。并根据经验总结,得出信息码位与校验码位关系,如下表所示。

信息码位数

1

2~4

5~11

12~26

27~57

58~120

121~247

校验码位数

2

3

4

5

6

7

8

                                                                            1-1 信息码位数与校验码位数关系表

1.2. 求海明码位置

公式:效验码只能放在2^{n}2^{0}2^{1}2^{2}...)位置。

例子:当效验码为4位时(即K=4)校验位置分布如下表,P代表校验码,D代表信息码。

1

2

3

4

5

6

7

8

9

10

11

12

P1

P2

D1

P3

D2

D3

D4

P4

D5

D6

D7

D8

2^{0} 2^{1}

 

2^{2}.

 

 

 

2^{3}

 

 

 

 

 

1.3. 求海明码数值

1

2

3

4

5

6

7

8

9

10

11

12

P1

P2

D1

P3

D2

D3

D4

P4

D5

D6

D7

D8

1

0

0

1

1

1

0

1

公式:在偶校验方式下Pn的取值,受到Pn所能验证位中所有1的个数影响,当1为偶数个时则Pn=0,当1的个数为奇数个时则Pn=1。Pn能验证的位=Pn位数起,校验n位,然后跳过n位,以此规则循环至末尾。

例子:

        P1(第1个校验位,也是整个码位的第1位)的校验规则是: P1位数起,连续校验1位,然后跳过1位,再连续校验1位,再跳过1位,……。如下表

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

P1

P2

1

P3

0

0

1

P4

1

1

0

1

P1

 

 

 

 

 

 

                                      P1取值

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

P1

 

1

 

0

 

1

 

1

 

0

 

        此时有奇数个1,为保证偶校验,则此时P1应取1,即P1=1。

         P2(第2个校验位,也是整个码位的第2位)的校验规则是: P2位数起,连续校验2位,然后跳过2位,再连续校验2位,再跳过2位,……。如下表

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

P2

1

P3

0

0

1

P4

1

1

0

1

P1

 

 

 

 

 

 

P2

 

 

 

 

 

 

                                      P2取值

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

P2

1

 

 

0

1

 

 

1

0

 

        此时有奇数个1,为保证偶校验,则此时P2应取1,即P2=1

         p3(第3个校验位,也是整个码位的第4位)的校验规则是:从当前位数起位数起,连续校验4位,然后跳过4位,再连续校验4位,再跳过4位,……。如下表

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

1

1

P3

0

0

1

P4

1

1

0

1

P1

 

 

 

 

 

 

P2

 

 

 

 

 

 

P3

 

 

 

 

 

 

 

                                      P3取值

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

 

 

P3

0

0

1

 

 

 

 

1

        此时有偶数个1,为保证偶校验,则此时P3应取0,即P3=0

        P4(第4个校验位,也是整个码位的第8位)的校验规则是:从当前位数起位数起,连续校验8位,然后跳过8位,再连续校验8位,再跳过8位,……。如下表

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

1

1

0

0

0

1

P4

1

1

0

1

P1

 

 

 

 

 

 

P2

 

 

 

 

 

 

P3

 

 

 

 

 

 

 

P4

 

 

 

 

 

 

 

                                      P4取值

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

 

 

 

 

 

 

P4

1

1

0

1

        此时有奇数个1,为保证偶校验,则此时P4应取1,即P4=1

        到此整个编码工作结束,各校验码的码值和码位如下

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

1

1

0

0

0

1

1

1

1

0

1

 

二、海明码解码

        举一个例子来说明,经过此前编码工作源端发送出的海明码为111000111101共12位长度,假设在传输过程中出现了错误,将第5位由0变成了1,则接收端实际接收到的编码为111010111101。

2.1. 求出错位置

        将P1、P2、P3、P4所负责验证的码位取名为组,即得到对应的G1、G2、G3、G4四个组,然后分别用奇偶校验法去验证各组码值定位错误。

G1验证组:经过奇偶校验发现G1组中有奇数个1,使用异或运算G1=1(简单办法是直接数1的个数奇数为1偶数为0)

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

 

1

 

1

 

1

 

1

 

0

 

G2验证组:经过奇偶校验发现G2组中有偶数个1,使用异或运算G2=0(简单办法是直接数1的个数奇数为1偶数为0)

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

1

1

 

 

0

1

 

 

1

0

 

G3验证组:经过奇偶校验发现G3组中有奇数个1,使用异或运算G3=1(简单办法是直接数1的个数奇数为1偶数为0)

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

 

 

0

1

0

1

 

 

 

 

1

G4验证组:经过奇偶校验发现G4组中有偶数个1,使用异或运算G4=0(简单办法是直接数1的个数奇数为1偶数为0)

 

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

 

 

 

 

 

 

 

1

1

1

0

1

        根据以上验证结果可以使用计算法或图表法来定位出错位。

1)计算法

        将校验位降序排列可得G4 G3 G2 G1(二进制高位在左),设出错位为N,则得公式N = G4 G3 G2 G1,即N=0101转换成十进制得5则说明,接收端得到的海明码第五位出现了传输错误。

2)图表法

码位

1

2

3

4

5

6

7

8

9

10

11

12

码值

1

1

1

0

0

0

1

1

1

1

0

1

P1

G1

 

 

 

 

 

 

P2

G2

 

 

 

 

 

 

P3

G3

 

 

 

 

 

 

 

P4

G4

 

 

 

 

 

 

 

       经过计算只有G1和G3的值为1,结合图表可以看出仅由G1和G3同时验证的码位只有第5位,则说明第五位出现了传输错误。

2.2. 纠正错误值

       二进制位非0即1,当判断出是哪位出错对该位取反即可。则经过纠正的海明码为111000111101,与发送端保持了一致。

你可能感兴趣的:(最通俗易懂的海明码校验纠错讲解)