海明码

来源:互联网 发布:ubuntu挂起命令 编辑:程序博客网 时间:2024/06/09 23:48

一.码距
   
我们以重复编码来简单地阐述差错编码在相同的信噪比情况下为什么会获得更好的系统性能。假设我们发送的信息01(等概率出现),采用2PSK方式,我们知道最佳接收的系统比特误码率为:
                  
     现假设(即平均接收1000个中错一个)。
   
如果我们将信息0编码成00,信息1编码成11,仍然采用上述系统,则在接收端可以作以下判断:如果发送的是00,而收到的是0110,此时我们知道发生了差错,要求发送端重新传输,直到传送正确为止,只有当收到11时,我们才错误地认为当前发送的是1。因此在这种情况下发生译码错误的概率是;同理,如果发送的是11,只有收到00时才可能发生错误译码,因此在这种情况下发生译码错误的概率也是。所以采用0011编码的系统比特误码率为,即106。系统的性能将明显提高。
    在如,在上例中,将01采用0000011111编码,在接收端我们用如下的译码方法,每收到5个比特译码一次,采用大数判决,即5个比特中0的个数大于1的个数则译码成0,反之译码成1;不采用ARQ方式。那么,我们看到这种编码方式就变成了纠错编码。
    由于传输错误当接收端收到11000101001001010001011000101001001001100010100011中的任何一种时,都可以自动纠正成00000

二.最小码距

最小码距是码的一种属性,如(nk)码中任何两个码字C1C2之间的码距的最小值,用dmin表示。码的最小码距决定了码的纠错、检错性能。
   
1、为了检测e个错误,要求最小码距dmin e1
   
2、为了纠正t个错误,要求最小码距dmin 2t1
    3、
为了纠正t个错误,同时检测e个错误,要求最小码距dmin te1 e>t

注:当码字出现t个或者小于t个错时,系统按照纠错方式工作;当码字出现超过t个错而小于等于e个错时,系统按照检错方式工作。

三.海明码

设码长为n,信息位长度为k,监督位长度为r=n-k。如果需要纠正一位出错,因为长度为n的序列上每一位都可能出错,一共有n种情况,另外还有不出错的情况,所以我们必须用长度为r的监督码表示出n+1种情况。而长度为r的监督码一共可以表示2^r种情况。因此
2^r >= n + 1, 即r >= log(n+1)
    我们以一个例子来说明汉明码。假设k=4,需要纠正一位错误,则
2^r >= n + 1 = k + r + 1 = 4 + r + 1
    解得 r >= 3。我们取r=3,则码长为3+4=7。用a6,a5,...a0表示这7个码元。用S1,S2,S3表示三个监关系式中的校正子。

四.海明码校验位放置位置与出错位置的指示

为了让r个校验码表示n个信息位,且无论哪一位错误都能表示出来,先将码字的位从左到右标号,分别为1,2,3,……。显然要将校验位安排在第1,2,4,8,……编号上,数据放在其他的编号上。为了能够将n位信息全部表示出来还应该有2r-1>=n。每个数据位影响几个校验位,譬如编号11对应的数据影响编号1、2、8对应的校验位,因为11=1+2+8。为了更清楚理解上面的意思,让我们来看一个例子:将1001000编码成海明码。

    因为编号1、2、4、8处是校验位,所以3、5、6、7、9、10、11处是数据位,将要传输的数据与编号对应如下:

3    5    6    7    9    10    11

1    0    0    1    0     0    0

    数据位影响的校验位如下:

    编号3处的数据位影响编号1、2处的校验位,

    编号7处的数据位影响编号1、2、4处的校验位,

    经偶校验的校验位1、2的值为0,校验位4的值

    为1,其他校验位均为0。所以对应的海明码

    为:00110010000。
    接受方通过检验校验位来计算出错的位,如果校验位i的奇偶性不正确,则将计数器的值加i,如果所有的校验位都检查完了,且计数器为0,则检查成功,否则计数器的值就是出错的位所对应的编号,并将该位取反。