循环冗余校验算法
㈠ 什么叫循环冗余校验
什么叫循环冗余校验
循环冗余校验即循环冗余检查。灶则
循环冗余检查(CRC)是一种数据传输检错亏神功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完销辩亏整性。若CRC校验不通过,系统重复向硬盘复制数据,陷入死循环,导致复制过程无法完成。出现循环冗余检查错误的可能原因非常多,硬件软件的故障都有可能。
㈡ 循环冗余校验(CRC)码
与海明校验码类似,CRC码也是数据通讯中常用的校验方式。
CRC 算法的基本思想是将传输的数据当做一个位数很长的数。将这个数除以另一个数。得到的余数作为校验数据附加到原数据后面。
与海明校验码数据位和校验位穿插不同,CRC码中,校验位(R位)在信息位(K位)后面
以一个慎碧高题目为例:设待校验的数据为。D8~D1 = 10101011,若采用CRC,且生成多项式为 10011,则其 CRC 码为:
这里首先要注意题目中的一个表述——“多项式”,该题目中写作“10011”,在有的题目中往往写作“x^4+x+1”
首先,在数据位后加 多项式最高幂次 个0,比如这里的多项式最高次项为x^4,那就在数据位后加四个0,变成:101010110000,作为被除数
然后,将多项式 10011 作为除数进行断除。需要注意的是,图中所框的部分,对应位只做xor运算,也就是做减法但不影响其他位
最后得到的余数:1010,即是校验位。那么宽尺整个CRC码为:10101011 1010
以上一节例题为例,假设收到的CRC码变成了10001011 1010,第10位(右边为低位)发生了错误。
现在尝试慧嫌用CRC码与多项式 10011 进行短除:
得到余数为 1010(2) = 1 8+1 2 = 10(10) ,即第10位发生错误,只需要反转第10位的值,便可获得正确的值