CRC 循环冗余码原理 收藏 一
在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制
循环冗余校验CRC(Cyclic Redundancy Check)是对一个传送数据块进行校验,是一种高效的差错控制方法
1 循环冗余校验码原理 CRC 校验采用多项式编码方法,如一个8 位二进制数(B7B6B5B4B3B2B1B0)可以用7阶二进制码多项式B7X7+B6X6+B5X5+B4X4+B3X3+B2X2+B1X1+B0X0表示
例如11000001 可表示为 1X7+1X6+0X5+0X4+0X3+0X2+0X1+0X0 一般说,n 位二进制数可用(n-1)阶多项式表示
它把要发送的数据位串看成是系数只能为“1”或“0”的多项式
一个n 位的数据块可以看成是从Xn-1 到X0 的n 项多项式的系数序列,位于数据块左边的最高位是Xn-1 项的系数,次高位是Xn-2 项的系数,依此类推,位于数据块右边的最低位是X0 项的系数,这个多项式的阶数为n-1
多项式乘除法运算过程与普通代数多项式的乘除法相同
多项式的加减法运算以2 为模,加减时不进、错位,如同逻辑异或运算
采用CRC 校验时,发送方和接收方事先约定一个生成多项式G(X),并且 G(X)的最高项和最低项的系数必须为1
设 m 位数据块的多项式为M(X),生成多项式G(X)的阶数必需比 M(X)的阶数低
CRC 校验码的检错原理是:发送方先为数据块生成CRC 校验码,使这个CRC 校验码的多项式能被 G(X)除尽,实际发送此CRC 校验码;接收方用收到的CRC 校验码除以G(X),如果能除尽,表明传输正确,否则,表示有传输错误,请求重发
生成数据块的CRC 校验码的方法是: (1) 设 G(X)为r 阶,在数据块末尾添加r 个0,使数据块为m+r 位,则相应的多项式为XrM(X); (2