差错检验与纠正: 循环冗余校验与汉明码

差错检验与纠正: 循环冗余校验与汉明码

对于信号传输过程种出现错误是很正常的
我们提供了两种策略

  1. 添加只能使对方推测出有无错误的冗余信息,检错码
  2. 添加使对方推测出没有出错前的数据的冗余信息,纠错码

两种策略占据不同的生态位置,
高度可信的信道(光纤)使用检错码更合算,偶尔发生错误就重传
错误发生频繁的信道上(无线链路)使用纠错码更合算,以便接收方能够计算原来的数据

检错码

  1. 奇偶
  2. 校验和
  3. 循环冗余校验

纠错码

  1. 汉明码
  2. 二进制卷积码
  3. 里德所罗门码
  4. 低密度奇偶校验码

下面介绍两种 循环冗余和法海明码

一丶循环冗余

在传输过程中可能会产生比特差错:1 可能会变成 0 而 0 也可能变成 1,误码率与信噪比有很大的关系,我们就要在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。

在数据链路层传送的帧中,广泛使用了循环冗余检验 CRC 的检错技术,使用CRC获得FCS,下面演示CRC的用法

差错检验与纠正: 循环冗余校验与汉明码
余数为0就没有错,且除数p越大,检测效果越好,越小可能有些错检测不出来

二丶汉明码

数据块总长度n,其中数据位长度m,校验位长度为r,n=m+r
码率=n/m 码率差别很大 有噪声的信道码率或许为1/2,光纤接近1

编码距离

合法代码集 {10001001,10110001}
可以看出 需要3个一位错误 才能使得 10001001 变成 10110001,直接两个进行异或运算
差错检验与纠正: 循环冗余校验与汉明码
不同位数的个数称为编码距离,这个与检错能力与检错能力有关

一个完整的合法码字列表,从这找出两个具有最小还没距离的码字,这个距离就是编码距离,比如编码距离为d,需要d个1位错才能将一个合法代码转变成另一个合法代码,另外说假如我们

  1. 为了检测d个错误,需要一个距离为d+1的编码方案,
  2. 为了纠正d个错误,需要一个距离为2d+1的编码方案,

汉明码

海明码是具有1位纠错能力的编码,重叠分组的奇偶校验方法,如下图的7位数据

差错检验与纠正: 循环冗余校验与汉明码

汉明码的产生

差错检验与纠正: 循环冗余校验与汉明码

汉明码的纠错

差错检验与纠正: 循环冗余校验与汉明码