海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。

海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(原来是1就变成0,原来是0就变成1)来将其纠正。

根据海明码的纠错原理,得出了:


                              m+k+1<=2K

    其中:m表示有效的信息位数;k表示用于纠错的位数。满足了上面的公式,才能进行纠错。

    举例说明,假设有一组信息码为:1101 0111 0,如何计算海明码?

一、确定纠错用的冗余位数

    M=9,那么,9+k+1<=2k,由此得出k=4,也就是说要在原始有效信息位填充4bit二进位。

二、冗余填充位的计算

    4bit的冗余位按照海明码的原理要填充在2n位上,即1248……位上。由此得出如下的表格

海明码的理解计算_第1张图片

将信息位与冗余位间的关系整理成一张表格如下。

海明码的理解计算_第2张图片

由此得出:

1个冗余位由35791113参与校验

2个冗余位由3671011参与校验

4个冗余位由5671213参与校验

8个冗余位由910111213参与校验

如果全部按偶校验计算得出如下图结果:

海明码的理解计算_第3张图片

可以这样理解:

1bit位:B1B3B5B7B9B11B13=0⊕1⊕1⊕1⊕0⊕1⊕0=0

2bit位:B2B3B6B7B10B11 =0⊕1⊕0⊕1⊕1⊕1=0

4bit位:B4B5B6B7B12B13 =1⊕1⊕0⊕1⊕1⊕0=0

8bit位:B8B9B10B11B12B13 =1⊕0⊕1⊕1⊕1⊕0=0

我们称上面的4个式子为监督关系式。

也就是说,校验与原有的信息做异或运算按偶校验计算得出的结果全部是0

因此,这4bit的冗余位是:0011

三、信息校验

假设有一位数据出错了,我们这里假设是第10位在传输过程中由1变成了0,出错了,这样上面的4个监督关系式就会发生变化,变成如下:

1bit位:B1B3B5B7B9B11B13=0⊕1⊕1⊕1⊕0⊕1⊕0=0

2bit位:B2B3B6B7B10B11 =0⊕1⊕0⊕1⊕0⊕1=1

4bit位:B4B5B6B7B12B13 =1⊕1⊕0⊕1⊕1⊕0=0

8bit位:B8B9B10B11B12B13 =1⊕0⊕0⊕1⊕1⊕0=1

由此可以看出,14式没有错,而28出现了错误,由此B3B6B7B10B11B9B12B13可能是出错位,但是从14位可以看出正确的位是:B3B5B7B9B11B13B6B12,从可能出错的位中把正确的去掉,就剩下了B3B6B7B10B11B9B12B13(红色字是去掉的位),这样就仅剩下第10位了,这样我们把10进行反转就得到了正确的信息了。

更简单的方法是由高位往低位写(即由第8位写到第一位)结果是1010,转换为10进制数为10,就是第10位出错了

有这样一道题:

使用海明码进行前向纠错,如果冗余为4位,那么信息位最多可以用到多少位?假定码字位a6  a5  a4  a3  a2  a1  a0,并且有下面的监督关系式:

S2=a2+a4+a5+a6

S1=a1+a3+a5+a6

S0=a0+a3+a4+a6

若S2S1S0=110,则表示出错位是哪一位?

答案:可以用到11位;a5位出错

写得不好,请指教!!!!