CRC校验原理与计算
2017-11-01 22:58
141 查看
CRC,(Cyclic Redundancy Check),循环冗余校验。
1,CRC的原理
CRC校验的原理在很多地方写的都比较详细,也比较复杂,但其本质就是一种校验码的计算方法。收、发双方在通信之前要约定好一个多项式(介绍原理的地方也叫做生成多项式,其实就是一串二进制码,关于多项式跟二进制码的对应关系可以参考附录1),通过信息码跟生成多项式做“模2除法”就能计算出校验码,当然,校验码的位数也是由生成多项式决定的(校验码位数=生成多项式对应二进制串位数-1)。
常用的生成多项式有:IBM的SDLC(同步数据链路控制)规程中使用的CRC-16,生成多项式g(x)= x16 + x15 + x2 +1(对应二进制比特串为:11000000000000101);而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)= x16 + x15 +
x5 +1(对应二进制比特串为:11000000000100001)。
“模2除法”跟“算术除法”不同,它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只是以相同位数做逻辑异或运算。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。
“模2除法”和“模2乘法”示例
2,CRC的计算步骤
假设信息码是10110011,生成多项式约定为G(X) = X4 + X3 + 1,则对应的二进制串为11001,所以需要计算的校验码位数为4位。
1)信息码左移4位,末尾补0,得到101100110000,这个数以“模2除法”的方式除以生成多项式11001,得到的余数为0100,此即为CRC校验码。
CRC校验码计算示例
2)将计算得到的CRC校验码0100,替换在信息码末尾补的4个0,得到101100110100,即为要发送的最终数据。
3)在接收端,因为把模2除法的余数加在了信息码的末尾,因此,在没有通信错误的情况下,收到的数是可以以“模2除法”的方式整除约定好的生成多项式的。这也就是CRC校验的原理。
附录
1,多项式跟二进制数的对应关系:多项式的最高幂次对应二进制数的最高位,以后各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0
参考文献:
https://baike.baidu.com/item/CRC%E6%A0%A1%E9%AA%8C/3439037?fr=aladdin http://winda.blog.51cto.com/55153/1063951
1,CRC的原理
CRC校验的原理在很多地方写的都比较详细,也比较复杂,但其本质就是一种校验码的计算方法。收、发双方在通信之前要约定好一个多项式(介绍原理的地方也叫做生成多项式,其实就是一串二进制码,关于多项式跟二进制码的对应关系可以参考附录1),通过信息码跟生成多项式做“模2除法”就能计算出校验码,当然,校验码的位数也是由生成多项式决定的(校验码位数=生成多项式对应二进制串位数-1)。
常用的生成多项式有:IBM的SDLC(同步数据链路控制)规程中使用的CRC-16,生成多项式g(x)= x16 + x15 + x2 +1(对应二进制比特串为:11000000000000101);而在ISO HDLC(高级数据链路控制)规程、ITU的SDLC、X.25、V.34、V.41、V.42等中使用CCITT-16生成多项式g(x)= x16 + x15 +
x5 +1(对应二进制比特串为:11000000000100001)。
“模2除法”跟“算术除法”不同,它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只是以相同位数做逻辑异或运算。模2加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位;模2减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位。
“模2除法”和“模2乘法”示例
2,CRC的计算步骤
假设信息码是10110011,生成多项式约定为G(X) = X4 + X3 + 1,则对应的二进制串为11001,所以需要计算的校验码位数为4位。
1)信息码左移4位,末尾补0,得到101100110000,这个数以“模2除法”的方式除以生成多项式11001,得到的余数为0100,此即为CRC校验码。
CRC校验码计算示例
2)将计算得到的CRC校验码0100,替换在信息码末尾补的4个0,得到101100110100,即为要发送的最终数据。
3)在接收端,因为把模2除法的余数加在了信息码的末尾,因此,在没有通信错误的情况下,收到的数是可以以“模2除法”的方式整除约定好的生成多项式的。这也就是CRC校验的原理。
附录
1,多项式跟二进制数的对应关系:多项式的最高幂次对应二进制数的最高位,以后各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0
参考文献:
https://baike.baidu.com/item/CRC%E6%A0%A1%E9%AA%8C/3439037?fr=aladdin http://winda.blog.51cto.com/55153/1063951
相关文章推荐
- 分布式计算框架Hadoop原理及架构全解
- 算法导论读书笔记:冒泡排序法、多项式计算及霍纳规则原理分析
- Matlab电路原理应用——计算未知电阻
- 实时流计算Spark Streaming原理介绍
- Struts 原理(二) --- 3.1使用DispatchAction开发计算器
- OPENCV直方图计算原理及反向投影检测原理
- [monitor] 2. Linux CPU占用率的计算原理
- CRC校验原理(cyclic redundancy check)
- 6.4、calculate member【计算成员】的实现原理
- 史上最通俗的海明码编码计算、检错和纠错原理解析
- 结构体大小的计算及设置内存字节对齐数原理理解
- 关于梯度计算和相关原理
- GPU对CNN计算的加速原理到底是怎样的?
- 【浏览器渲染原理】渲染树构建之样式计算
- 利用栈的原理计算一个表达式的值
- DirectX学习笔记(十三):取景变换矩阵计算及3D世界摄像机的原理分析和实现
- “外星人计算圆周率的程序”原理及性能分析(上)
- 异步 FIFO 最小深度计算方法及原理分析(转补)
- CRC校验和原理(附源程序)
- JAVA浮点数计算精度损失底层原理与解决方案