海明码(Hamming Code)是一个可以有多个校验位,具有检测并纠正一位错误代码的纠错码,所以它也仅用于信道特性比较好的环境中,如以太网中,因为如果信道特性不好的情况下,出现的错误通常不是一位。
海明码的检错、纠错基本思想是将有效信息按某种规律分成若干组,每组安排一个校验位进行奇偶性测试,然后产生多位检测信息,并从中得出具体的出错位置,最后通过对错误位取反(原来是1就变成0,原来是0就变成1)来将其纠正。
根据海明码的纠错原理,得出了:
m+k+1<=2K
其中:m表示有效的信息位数;k表示用于纠错的位数。满足了上面的公式,才能进行纠错。
举例说明,假设有一组信息码为:1101 0111 0,如何计算海明码?
一、确定纠错用的冗余位数
M=9,那么,9+k+1<=2k,由此得出k=4,也就是说要在原始有效信息位填充4bit二进位。
二、冗余填充位的计算
4个bit的冗余位按照海明码的原理要填充在2n位上,即1、2、4、8……位上。由此得出如下的表格
将信息位与冗余位间的关系整理成一张表格如下。
由此得出:
第1个冗余位由3、5、7、9、11、13参与校验
第2个冗余位由3、6、7、10、11参与校验
第4个冗余位由5、6、7、12、13参与校验
第8个冗余位由9、10、11、12、13参与校验
如果全部按偶校验计算得出如下图结果:
可以这样理解:
第1bit位:B1⊕B3⊕B5⊕B7⊕B9⊕B11⊕B13=0⊕1⊕1⊕1⊕0⊕1⊕0=0
第2bit位:B2⊕B3⊕B6⊕B7⊕B10⊕B11 =0⊕1⊕0⊕1⊕1⊕1=0
第4bit位:B4⊕B5⊕B6⊕B7⊕B12⊕B13 =1⊕1⊕0⊕1⊕1⊕0=0
第8bit位:B8⊕B9⊕B10⊕B11⊕B12⊕B13 =1⊕0⊕1⊕1⊕1⊕0=0
我们称上面的4个式子为监督关系式。
也就是说,校验与原有的信息做异或运算按偶校验计算得出的结果全部是0 。
因此,这4个bit的冗余位是:0011
三、信息校验
假设有一位数据出错了,我们这里假设是第10位在传输过程中由1变成了0,出错了,这样上面的4个监督关系式就会发生变化,变成如下:
第1bit位:B1⊕B3⊕B5⊕B7⊕B9⊕B11⊕B13=0⊕1⊕1⊕1⊕0⊕1⊕0=0
第2bit位:B2⊕B3⊕B6⊕B7⊕B10⊕B11 =0⊕1⊕0⊕1⊕0⊕1=1
第4bit位:B4⊕B5⊕B6⊕B7⊕B12⊕B13 =1⊕1⊕0⊕1⊕1⊕0=0
第8bit位:B8⊕B9⊕B10⊕B11⊕B12⊕B13 =1⊕0⊕0⊕1⊕1⊕0=1
由此可以看出,1和4式没有错,而2和8出现了错误,由此B3、B6、B7、B10、B11、B9、B12、B13可能是出错位,但是从1和4位可以看出正确的位是:B3、B5、B7、B9、B11、B13、B6、B12,从可能出错的位中把正确的去掉,就剩下了B3、B6、B7、B10、B11、B9、B12、B13(红色字是去掉的位),这样就仅剩下第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位出错
写得不好,请指教!!!!
本文出自 “网络学习笔记” 博客,请务必保留此出处http://cdlaowang.blog.51cto.com/5022872/1752369
原文地址:http://cdlaowang.blog.51cto.com/5022872/1752369