在电信领域中,汉明码(英语:hammingcode),也称为海明码,是(7,4)汉明码推广得到的一种线性纠错码,由理查德·卫斯里·汉明于1950年发明。

简要

相比而言,简单的奇偶检验码除了不能纠正错误之外,也只能侦测出奇数个的错误。汉明码是完备码,它在于它分组长度相同、最小距离为3的码中能达到最高的码率。用数学术语来说,汉明码是一种 二元线性码。对于所有整数 r ≥ 2,存在一个分组长度 n = 2r − 1、k = 2r − r − 1 编码。经过计网课程的学习,我们了解到海明码除了有检查错误以外,还有对错误进行纠正的作用,且只能进行一位数的纠错.而课本上并没有介绍太多,通过课下搜索的我在此简单说一下海明码的计算过程,希望能帮到大家!

计算原理

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

过程

检验码位数

进行海明码纠错时,要先确定原数据所需要的检验位数.规定:假设用N表示原信息位数,X为海明码位数,要求满足"N+1<=2的X次方-X",X要求最小值( 圈起来).如N=5,代入"5+1<=2^X-X"求得X最小为4:如N=8,求得X最小也为4.由此得知:信息位与检验位之间的关系:

1
2
3
信息位数     1     2~4     5~11     12~26     27~57     58~120 

检验位数     2     3       4        5         6         7

检验码位置

我们确定了检验码的个数,但检验码并不是依次排列放在发送信息中的,接下来我们就要找到检验码插入的位置,很简单,检验码放在"2^n"位置上,即:第1,2,4,8,16…信息位就放在其他的位置上,即 :3,5,6,7,9…(当然,在这里我们学校老师讲的是:发送信息顺序不变,检验码从后往前插入,即第1位在最后面.) 举一个例子:假设有8位信息位"a1,a2,a3,a4,a5,a6,a7,a8".8位信息位由此得知需要4个检验位,即"Y1,Y2,Y3,Y4".编码后的数据为:“a1,a2,a3,a4,Y4,a5,a6,a7,Y3,a8,Y2,Y1”. 如那8位信息位为"10011101",=====编码后表示为"1001#110#1##".

计算检验码

在上面步骤中我们确定了检验码的个数和位置,接下来我们应该知道的是在那些位置上的检验码要具备的作用,即每个检验码需要检验哪些信息位. 简单来说:在上一步中,我们对发送信息进行了编号,检验码的插入位置编号为1,2,4,8…在这些位置上的检验码遵循一个原则:在第几个位置上的就检验几个位数( 从每个检验码自己本身开始),然后跳过同样的位数再检验同样的位数,依次进行. 如例题计算得:Y1=a8+a7+a5+a4+a2.Y2=a8+a6+a5+a3+a2.Y3=a7+a6+a5+a1.Y4=a4+a3+a2+a1.(计算过程遵循异或原理:如果1的个数为偶数结果为0,反之为1).最后求得Y1=1,Y2=1,Y3=1,Y4=0.

结果

将求得的检验码插入信息中,就得到发送的码子为:100101101111.