1.CRC简介
CRC循环冗余校验码
是数据通信中的一种查错校验码。
2.CRC原理
CRC 算法的基本思想是将传输的数据[M(X)]
当做一个位数很长的数。将这个数除以另一个数[G(X)] ,得到的余数[R(X)] 作为校验数据附加到原数据后面,组成循环校验码。
M(X)代表待编码的有效信息
G(X)代表约定好的多项式
R(X)代表代表检验位
由于,CRC的结构 = 信息位(N位) + 校验位(K位)
所以,CRC编码 = M(X) + R(X)
3.CRC编码方法
把待编码的N位有效信息位表示为多项式M(X)
把M(X)左移K位,得到
M(X)*X^K
,这样就空出了K位,以便拼接K位余数,这里的K
位是由多项式G(X)
的最高位决定的选取一个生成多项式G(x),对
M(X)*X^K
做模二除 (多项式G(X)一般会直接给你,模二除看下面例子,实质是异或运算),以下是运算公式(
M(X) * X^K
) / G(X) = Q(X) + R(X) / G(X)这里的
Q(X)
是商,它本身不重要,这里最重要的是求出余数R(X)
将信息位M(X)与余数R(X)拼接起来,构成CRC循环冗余校验码
CRC编码 = M(X) + R(X)
4.举个栗子
题目:选择产生多项式位1011,把4位有效信息1100编成CRC码
M(X) = X^3 + X^2 = 1100
M(X) * X^3 = X^6 + X^5 = 1100000 (这里多项式最高位位3,左移3位)
G(X) = X^3 +X +1 = 1011
(
M(X) * X^K
) / G(X) = 1100000 / 1011 = 1110 +010
/ 1011 (关键,这里进行模二运算,实质上是异或运算,求R(X)
)
经运算,此时确定R(X)为
010
此时得出CRC编码 = M(X) + R(X) = 1100010
5.CRC编码的校验
校验原理:将得到的CRC码用约定的G(X)去除,余数为0,结果正确 ,某一位出错,则余数不为0
纠错的话,与G(X)的选择有关系,这方面比较深,考研大纲不考察纠错这块的知识点