海明码与CRC码

 软考的过程遇到海明码和CRC的码,觉得不是很了解,查了一下资料,整理下。也是帮助自己理解,同样希望可以大家理解海明码和CRC校正码。


海明码

    核心公式:2r ≥k+r+1


其中k为信息的个数,r为校验位的个数,那么我们怎样来确定校验位?


实例


二进制码 101101100,求它的海明编码


1、信息为k=9;r的最小值为4,所以校验位为4


2、所以校验码的位数为13位,如何分配校验码位置和信息位?以及校验位的值为多少?


3、分配校验码的位置:校验位的位置一般为2^n(n≥0),针对此题来说就是1、2、4、8的位置上。


4、信息位的位置:除了校验码位,其余的从高到低依次存放。如图



5、R1、R2、R3、R4的数值如何确定?

想要确定校正位的数值,就首先必须知道哪些信息位需要校正位来校正,校正的原则:想要校正第几(i)位,则应该满足对应的那几个校正位相加等于i。例如3=1+2;7=1-+2+4。

               

从上面的位置能知道每一个校验码参与的信息位,然后就是异或⊕(相同的两个数异或为0,不同的两个数为1)

          

R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1;


根据上表和计算公式得出R1=1,R2=1,R3=0;R4=0;则把结果填入其中得到


错误的案例,把海明校验码中的第11位该为1,验证错误,并找出错误位。

R1=B3⊕B5⊕B7⊕B9⊕B11⊕B13=1⊕0⊕1⊕0⊕1⊕0=1

R2=B2⊕B3⊕B6⊕B7⊕B10⊕B11=1⊕1⊕1⊕1⊕1⊕0=1

R3=B4⊕B5⊕B6⊕B7⊕B12⊕B13=0⊕0⊕1⊕1⊕0⊕0=0

R4=B8⊕B9⊕B10⊕B11⊕B12⊕B13=0⊕0⊕1⊕0⊕0⊕0=1

从高位往下写得到1101,即十进制的11,因此错误的位数为第11位。


CRC校验码


    CRC的实现原理十分易于硬件实现,因此被广泛的应用于计算机网络上的差错控制。CRC校验码需根据CRC生成多项式进行。


实例:原始报文为1101010101,其多项式为X4+X3+X+1。在原始报文的后面若干个0(等于校验码的位数,而生成多项式的最高幂次就是校验位数,即使用该生成多项式产生的校验码为4位)作为被除数,除以生成多项式所对应的二进制数。

X4+X3+X+1对应的二进制为11011,则除数作为11011

                 


然后把0011添加到原始报文的后面就是结果110010101010011。


【总结】


    关于软考中涉及到的海明码和CRC校验码,主要是两种的验证方式。海明码的校验过程比较复杂,在计算机中不经常用,而CRC校验码比较容易,先确定校验码的位数,以及除数是什么?所以个人感觉想要掌握这两种情况,就需要分析的方式。

猜你喜欢

转载自blog.csdn.net/lasuerte/article/details/80607953