软考的过程遇到海明码和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校验码比较容易,先确定校验码的位数,以及除数是什么?所以个人感觉想要掌握这两种情况,就需要分析的方式。