CRC校验的理解和计算过程

CRC校验

即循环冗余校验
循环冗余校验码(cyclie redundancy check)简称CRC(循环码),是一种能力相当强的检错、纠错码,并且实现编码和检码的电路比较简单,常用于串行传送(二进制位串沿一条信号线逐位传送)的辅助存储器与主机的数据通信和计算机网络中。
循环码是指通过某种数学运算实现有效信息与校验位之间的循环校验(而海明码是一种多重校验)。 [3]
这种编码基本思想是将要传送的信息M(X)表示为一个多项式L,用L除以一个预先确定的多项式G(X),得到的余式就是所需的循环冗余校验码。 这种校验又称多项式校验。
理论上可以证明循环冗余校验码的检错能力有以下特点:①可检测出所有奇数位错;②可检测出所有双比特的错;③可检测出所有小于、等于校验位长度的突发错。

参考百度百科的解释,推荐去看一看:
百度百科-循环冗余校验码

更为精炼的解释是:
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。

再介绍下模2运算
模2加法与模2减法相同,类似于逻辑的异或运算。
模2加法:1+1=0,1+0=1,0+1=1,0+0=1;
模2减法:1-1=0,1-0=1,0-1=1,0+0=0;

Input1 Input2 Output
A B C
1 1 0
1 0 1
0 1 1
0 0 0

CRC校验码计算过程:
①选定的除数二进制位数设为K位
②要发送的原始数据帧二进制位数设为M位,在原始数据帧后面加上(K-1)位"0"
③加了(K-1)位"0"的新数据帧(此时共M+K-1位)以模2除法的方式除以之前定的除数(①中有K位的除数)
④模2除法之后得到的余数就是该原始数据帧的CRC校验码,也叫做FCS(帧校验序列)
⑤再把得到的CRC校验码附加在原始数据帧后面(即替换掉③中新数据帧后面的(K-1)位"0"),此时再将新构建的数据帧发送到接收端。
若接收端把新数据帧同样以模2除法的方式除以相同的除数(①中有K位的除数)后没有余数,则该原始数据帧在传输过程中没有出错,否则出错。

例:假设CRC生成多项式为G(X) = X5 + X4 +X+1,要发送的二进制序列为100101110,求CRC校验码是多少。
分析:
①由G(X) = X5 + X4 +X+1知除数位数是K=5+1=6位(总位数是最高位的幂次加1),除数是110011(第5、第4、第1和第0位均为1)。
②要发送的原始数据帧是9位的100101110,则在原始数据帧后面加上(6-1)位"0",即新的数据帧为M+K-1=14位的100101110 00000。
③模2除法运算:10010111000000除以110011。
CRC校验的理解和计算过程_第1张图片

④得余数为5位的CRC校验码:11010(余数的位数一定要是比除数位数只能少一位,哪怕前面位是0,甚至是全为0(附带好整除时)也都不能省略。
⑤要发送的新数据帧为:10010111011010

接收端接收到 10010111011010 后也执行模2除法除以除数 110011 ,计算得到的结果没有余数,即传输的数据 100101110 在传输过程中并没有出错。

你可能感兴趣的:(CRC校验的理解和计算过程)