汉明码和扩展汉明码

2023-04-10 20:25:45

纠错编码的基本原理

  3位二进制数字构成的码组,共有8种不同的组合。任一码组在传输中若发生一个或多个错码,将变成另一信息码组,此时无法发现错误。若如下所示,使用部分码字,则接收端在某一位发生错误时,可以发现一个错码。但是这种码不能发现两个错码,因为发生两个错码后产生的是许用码字。该码只能检测错误,不能纠正错误,当收到的码组为禁用码字100时,无法判断时哪一位码发生了错误,如000、101、110都可能变成100。要想能纠正错误,还要增加冗余度。
  000
  001(不可用)
  010(不可用)
  011
  100(不可用)
  101
  110

分组码和线性分组码

  信息码分组,每组信码附加若干监督码,称为分组码。(n, k)表示分组码,n为码组长度(码长),k为信息码长,m=n-k为监督码长。
  码重:“1”的数量称为码重。
  码距:两个码字对应位置上数字不同的位数称为码字的距离,又称汉明距离。
  最小码距:某种编码中各个码字间距离的最小值称为最小码距d。(即校验矩阵H中任意(d-1)列线性无关)
  最小码距与码的纠错能力有以下关系:
(1) 检测e个随机错误,要求d≥e+1;
(2) 纠t个随机错误,要求d≥2t+1;
(3) 纠t个随机错误,同时检测e(e≥t+1)个随机错误,要求d≥e+t+1。
  奇偶监督码的编码原理利用了代数关系式,这类建立在代数学基础上的编码称为代数码,在代数码中常见的是线性码。线性码中信息位和监督位是由一些线性代数方程联系起来的,或者说线性码是按一组线性方程构成的。

汉明码

  汉明码(Hamming Code)是由Richard Hamming于1950年提出的,属于线性分组码的范畴,其基本原理是将信息码元与监督码元通过线性方程式联系起来的,每一个监督位被编在传输码字的特定比特位置上。系统对于错误的数位,无论是原有信息位中的,还是附加监督位中的都能把它分离出来。各种码之间的大致关系如下:
这里写图片描述
  标准汉明码的码长n=2^m-1,监督位数为m,信息位数为k=n-m,最小码距d=3,因此它的纠错能力t=1,是一种常用纠单个位错误的编码方式。还可以根据需要对标准汉明码进行扩展,增加1个校验位对所有位进行监测,就得到扩展汉明码。1个(n,k)汉明码经过扩展以后,就变成了(n+1,k)汉明码。扩展以后的汉明码d=4,t=2,e=1,可以纠正单个位错误,并检测出双位的错误。
  Hamming Rule
  m个监督位构造出m个监督关系式,指示一种错码的n种可能位置,则
2^m≥n+1=k+m+1

(7,4)汉明码示例

  设信息位4位,校正子3位,(7,4)汉明码用a6,a5,…a0表示这7个码元,用S1,S2,S3表示三个监督关系式中的校正子,校正子与错码位置的对应关系如下规定(这个规定是任意的):

S1 S2 S3 错码位置
001 a0
010 a1
100 a2
011 a3
101 a4
110 a5
111 a6
000 无错

  按照表中的规定可知,仅当一个错码位置在a2,a4,a5或a6时校正子S1为1,否则S1为0。这就意味着a2,a4,a5,a6四个码元构成偶校验关系:
    S1 = a6⊕a5⊕a4⊕a2
  同理,可以得到:
    S2 = a6⊕a5⊕a3⊕a1
    S3 = a6⊕a4⊕a3⊕a0
  在发送信号时,信息位a6,a5,a4,a3的值取决于输入信号,是随机的。监督为a2,a1,a0应该根据信息位的取值按照监督关系决定,即监督位的取值应该使上述(1)(2)(3)式中的S1,S2,S3为0,这表示初始情况下没有错码。即
    S1=a6⊕a5⊕a4⊕a2 = 0
    S2=a6⊕a5⊕a3⊕a1 = 0
    S3=a6⊕a4⊕a3⊕a0 = 0
  由上式进行移项运算,得到:
    a2 = a6⊕a5⊕a4
    a1 = a6⊕a5⊕a3
    a0 = a6⊕a4⊕a3
  已知信息位后,根据上式即可计算出a2,a1,a0三个监督位的值。
  接收端收到每个码组后,先按监督方程计算出S1, S2, S3,再按表格判断错码情况。

线性分组码的一般原理

  上述信息位和监督位满足的线性方程可以表示为:
这里写图片描述
  记为这里写图片描述
  H=[P Ir]称为监督矩阵,H矩阵各行是线性无关的,行数=监督位数,列数=码字长度
这里写图片描述
  转置得
这里写图片描述
  G = [Ik Q]称为生成矩阵,生成矩阵G的每一行都是一个码字。
这里写图片描述
  (n,k)线性分组码的生成矩阵G和校验矩阵H分别为k×n和(n-k) ×n维矩阵,其中校验矩阵H决定信息位与校验位的关系,在编码和译码中都要用到。
这里写图片描述

译码

  若发送码组为A,接收码组为B,二者之差E=B-A,E称为错误图样。
这里写图片描述
  当接收码组无错时,S=0,有错但不超过检错能力时,S不等于0,当错码超过检错能力时,S仍等于0,这样的错码是不可检测的。S称为校正子(伴随式),S只与E有关,而与A无关,S与E有线性变换关系,与E一一对应,可指示错码位置。
  伴随式译码,是由接收码B和校验矩阵H算出伴随式S,再根据S就可以算出E,判断哪一位发生了错误并纠正。标准阵列译码法是一种非常直观的方法,标准阵列有2^m行,2^k列,包含了所有2^n种可能的n维二元向量。

校验算法设计

  首先根据原始信息码长确定需要多少个监督位。
  再确定监督位和信息位的码字位置,确定伴随式(监督位)和错码位置的关系。
  根据偶监督测试原理,可知监督位参与了哪几个码位上的计算,得到生成矩阵/生成方程。
  接收码后,由校验矩阵计算出伴随式,根据伴随式计算出错误图样,哪一位发生了错误并纠正。

(72, 64)扩展汉明码

这里写图片描述
  矩阵中的值代表伴随式P7P6P5P4P3P2P1P0,d5d4d3d2d1d0指示0~63位哪一位数据发生了错误。根据发送和接收数据,计算出8 bit ECC(PSEND和PRECV)。伴随式S=PSEND^PRECV。如果没有错误,S=0;出现单比特错误时,S为上表中某一数值;如果S只有1bit为1,则错误位在ECC中;如果S不在上表中,说明出现2位或以上错误。
  下表是ECC编码规则:
这里写图片描述
这里写图片描述
这里写图片描述

  • 作者:ivy_reny
  • 原文链接:https://blog.csdn.net/ivy_reny/article/details/78134425
    更新时间:2023-04-10 20:25:45