Bootstrap

Day10-【软考】海明校验码如何计算校验位?数据如何进行纠错?

九、差错控制–海明校验码与CRC

如何对数据进行检错和纠错?

差错控制,就是要检错,和纠错

方法其实就是通过增加二进制位的方式,补充信息来达到目的

所谓码距,实际上就是用多少位来编码,码距就是多少

首先,有的编码连发现错误,也就是检错都做不到

比如:

  • 如果只用1位进行编码,假设A=1,B=0,那么码距为1,此时是没法进行纠错的,也就是连错误都发现不了

因为你收到的信息只能是0或者1,无论收到0还在1,都无法判断这个信息是正确的还是错误的,因为0就是B,1就是A,不知道它对不对,它是错的你也不知道

解决方法是什么?

增加码距

  • 如果码距为2,假设A=11,B=00,此时就能做到检错了,如果你收到10的编码,马上就能知道传错了,因为根本就没有这个编码,但是仍然做不到纠错,也就是改错。因为你不知道它原来更近A还是B,10即有可能是A,也有可能是B,两者概率一样,无法纠错

进一步解决方法是什么?

继续增加码距

  • 如果码距为3,假设A=111,B=000,此时你收到了一个110,从常规统计来说,极少会出现错多位的情况,110更接近于A,因此可以进行改错,如果觉得概率不够高,可以继续增加码距

如何计算最小码距?

  • 如果要检测e个误码,最小码距d满足:d>=e+1

上面例子中,要检测误码为1,检错的最小码距就是d>=1+1,也就是2

  • 如果要纠正t个误码,最小码距d满足:d>=2t+1

上面例子中,要纠正的误码为2,纠错的最小码距就是d>=2*1+1,也就是3

什么是循环校验码CRC?

好像在计算机网络的部分中,也会用到这个东西

只能检错,无法纠错

原理是在数据后补上若干个校验位,接收方将数据除以生成的多项式,如果余数为0,校验通过,否则,校验失败

CRC使用什么除法进行校验?

一种模2除法

也就是按位进行异或操作

在这里插入图片描述

二进制普通除法是怎么除的,后面再看…

如何进行CRC编码结果的计算?

在这里插入图片描述

  1. 首先将多项式,转换为二进制,没有x的2次方,也就是第三位为0,其他有多项式的,就是1,得到生成的多项式为11011;
  2. 在原始报文后面,增加若干位的0,长度是多项式的长度-1,目前多项式长度是5位,则增加0000,4个0;为何补4个0,其实就是补余数的位数;
  3. 通过模2除法进行计算,将得出的余数0011,替换掉最后的0000,就得到了最终的CRC编码11001010101_0000;
  4. 其实到现在还不太清楚模2究竟是怎么除的,后面再仔细看看…
  5. 校验时,得出的余数就会是0000…

什么是海明校验码?

是一个难点,但是考试的频次很高!

校验位,规定了2的n次方位,是校验位

比如,对于一个字节的数据,第1位,第2位,第4位,第8位,就是校验位

如果信息位只有1位,那么整个编码就得是3位,因为第1位,第2位都必须是校验位,也就是说,编码长度最少都是3位,这不就是上面举例的如果码距为3的情况,看来海明校验码是能够进行纠错的。

如果信息为2位,整个编码就需要5位,第1位,第2位,第4位都是校验位,校验码有3位

如果信息位为3位,整个编码就需要6位,

如果信息位为4位,整个编码就需要7位,;这种还挺常见的,信息位4位

如果信息位为5位,整个编码就需要9位;也就是说,如果数据只有一个字节的大小,最多信息位其实只有4位

海明码如何计算?

信息1011的海明码

公式为2的r次方>=4+r+1

如果校验码是3位

则r就是3,4是信息位的个数

比如,信息位是4位,它能计算出校验位有多少位

2的3次方为8,4+3+1为7,刚好小于8

  • 以上,就确定了第1位,第2位,第4位都是校验位,第7、6、5、3是信息位,信息位直接填入即可

接下来确定校验位的值是多少

I4,=2的2次方+2的1次方+2的0次方,第7位

I3,=2的2次方+2的1次方,第6位

I2,=2的2次方+2的0次方,第5位

I1,=2的1次方+2的0次方,第3位

第4位,也就是第三个校验位,r2,等于,I4,I3,I2异或,因为这几个都有2的2次方,值为0

第2位,r1,等于I4,I3,I1异或,值为0

第1位,r0,等于I4,I2,I1异或,值为1

怎么异或得出的这些值,后面看看…

整个编码就是101_0_1_01,其中0,和01是校验位

在这里插入图片描述

海明码如何进行纠错?

假设收到的校验码变成了000

  • 会将原来的校验位001,这个可以再次生成得出,和这个错误的000,进行异或操作,得出结果001

  • 意思是,错误的位置,就在第1位!

如果是010,表示错误位置就是第2位

如果是110,表示错误位置是第6位!

  • 如何改错,纠错?将错误位置取反即可,这里就是将第1位取反。

等以后遇到具体题目了,再学习学习…

;