原文地址:CRC校验原理作者:神人

转载:CRC校验原理

1、循环校验码(CRC码):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

2、生成CRC码的基本原理:任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

3、CRC码集选择的原则:若设码字长度为N,信息字段为K位,校验字段为R位(N=K+R),则对于CRC码集中的任一码字,存在且仅存在一个R次多项式g(x),使得

V(x)=A(x)g(x)=xRm(x)+r(x);

其中:    m(x)为K次信息多项式, r(x)为R-1次校验多项式,

g(x)称为生成多项式:

g(x)=g0+g1x+ g2x2+...+g(R-1)x(R-1)+gRxR

发送方通过指定的g(x)产生CRC码字,接收方则通过该g(x)来验证收到的CRC码字。

4、CRC校验码软件生成方法:

借助于多项式除法,其余数为校验字段。

例如:信息字段代码为: 1011001;对应m(x)=x6+x4+x3+1

假设生成多项式为:g(x)=x4+x3+1;则对应g(x)的代码为: 11001

x4m(x)=x10+x8+x7+x4 对应的代码记为:10110010000;

采用多项式除法:  得余数为: 1010     (即校验字段为:1010)

发送方:发出的传输字段为: 1 0 1 1 0 0 1 1 0 10

                          信息字段      校验字段

接收方:使用相同的生成码进行校验:接收到的字段/生成码(二进制除法)如果能够除尽,则正确,

CRC(Cyclic Redundancy Check)循环冗余校验码

  是常用的校验码,在早期的通信中运用广泛,因为早期的通信技术不够可靠(不可靠性的来源是通信技术决定的,比如电磁波通信时受雷电等因素的影响),不可靠的通信就会带来‘确认信息’的困惑,书上提到红军和蓝军通信联合进攻山下的敌军的例子,第一天红军发了条信息要蓝军第二天一起进攻,蓝军收到之后,发一条确认信息,但是蓝军担心的是‘确认信息’如果也不可靠而没有成功到达红军那里,那自己不是很危险?于是红军再发一条‘对确认的确认信息’,但同样的问题还是不能解决,红军仍然不敢贸然行动。
  对通信的可靠性检查就需要‘校验’,校验是从数据本身进行检查,它依靠某种数学上约定的形式进行检查,校验的结果是可靠或不可靠,如果可靠就对数据进行处理,如果不可靠,就丢弃重发或者进行修复。
  CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。它的编码规则是:
  1、首先将原信息码(kbit)左移r位(k+r=n)
  2、运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。
  非常简单,要说明的:模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:
  0+0=1+1=0,1+0=0+1=1
  即‘异’则真,‘非异’则假。
  由此得到定理:a+b+b=a 也就是‘模2减’和‘模2加’真值表完全相同。
  有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。
  例如: g(x)=x4+x3+x2+1,(7,3)码,信息码110产生的CRC码就是:
  对于g(x)=x4+x3+x2+1的解释:(都是从右往左数)x4就是第五位是1,因为没有x1所以第2位就是0。
  11101 | 110,0000(设a=11101 ,b=1100000)
  取b的前5位11000跟a异或得到101
  101加上b没有取到的00得到10100
  然后跟a异或得到01001
  也就是余数1001

101
     11101 | 110,0000
             111 01
               1 0100
               1 1101
                 1001

  余数是1001,所以CRC码是110,1001

  标准的CRC码是,CRC-CCITT和CRC-16,它们的生成多项式是:
  CRC-CCITT=x^16+x^12+x^5+1
  CRC-16=x^16+x^15+x^2+1

先举个例子:

已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。
M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011
M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010
CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010
其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下:
(1)将待编码的k位信息表示成多项式 M(x)。
(2)将 M(x)左移 r 位,得到 M(x)*xr 。
(3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。
(4)将M(x)*xr 与R(x)作模2加,得到CRC码。

“模2除”的演示图片:

“模2除”中间过程的减法为“模2减”,即异或运算。

转载于:https://www.cnblogs.com/JustDoFPGA/archive/2012/08/13/8412742.html

[转载]CRC校验原理相关推荐

  1. CRC校验原理及STM32 IAP在线升级程序

    CRC校验原理: 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据 ...

  2. CRC校验原理及CRC-8简单校验函数设计

    CRC校验原理及CRC-8简单校验函数设计 CRC为循环冗余校验码,是一种常用的.具有检错.纠错能力的校验码.通常发送方在发送的数据之后,附上其CRC校验码.接收方收到数据后,也做同样的CRC校验,得 ...

  3. 简单易懂的CRC校验原理阐述

    不要跑,CRC没这么难!(简单易懂的CRC原理阐述) 网上大多的教材都是面向大佬的很多细节原理都没有讲清楚,对于我们这些新萌菜鸟们实在太不友好了.于是我写一篇相对轻松易懂的博客,希望能对学习CRC的朋 ...

  4. CRC校验原理的完整学习

    前言:1.想直接用CRC的可以直接看程序,想了解原理,或者写程序的原理的.可以看按顺序看整篇 2.模二除法没有深入研究,所以模二除法待验证,也不去验证了,我花了一个月的业余时间写.3.本文只进行了16 ...

  5. CRC校验原理和推导过程及Verilog实现(一文讲透)

    目录 一.CRC简介 1.1 CRC可检测的错误 1.2 CRC需要知道的基本名称 1.2.1 多项式公式 1.2.2 多项式简记式 1.2.3 数据宽度 1.2.4 初始值与结果异或值 1.2.5 ...

  6. 【个人学习总结】CRC校验原理及实现

    [个人学习总结]CRC校验原理及实现 一.CRC校验原理[理论篇] 1.硬核视频讲解[重点看,非常非常好!!!] 2.基础文章[略看] 3.深入文章!!![代码.查表法有点看不懂,跨越有点大] 理解重 ...

  7. CRC校验原理及步骤

    什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并 ...

  8. CRC校验原理及两种代码实现方法(c语言和labview实现)

    CRC校验原理及代码实现 目录 背景 原理 模2除法 多项式 计算流程 代码实现() c语言实现 c语言测试结果 labview实现 labview测试结果 目录 背景 在进行数据传输时,为了避免数据 ...

  9. CRC校验原理及代码

    参考:CRC校验原理及步骤https://blog.csdn.net/d_leo/article/details/73572373 什么是CRC校验? CRC即循环冗余校验码:是数据通信领域中最常用的 ...

  10. 【RE】3 CRC校验原理及实现

    0 简介 循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可 ...

最新文章

  1. 庆祝自己过了ACP!!
  2. mysql pricing amp; licensing_Global Pricing and Licensing
  3. 子之错父之过什么意思_胎教是什么意思?胎教有何意义?
  4. Numpy实现BP神经网络(包含Dropout、BN等训练技巧)
  5. 生成汉字拼音首字母函数!
  6. 基于JAVA+SSH+MYSQL的大学生入学注册自助系统
  7. python中for用法_python中for的用法探索
  8. 计算机二级c语言程序设计题评分标准,计算机二级C语言题型和评分标准
  9. Scene窗口—Scene视图导航
  10. 蚁群算法(ACO)最短路径规划(MATLAB)
  11. 用程序阻止计算机睡眠,PreventTurnOff防止电脑休眠工具|win10电脑防止屏幕休眠软件_最火软件站...
  12. 水星mr807虚拟服务器,水星MR807路由器怎么连接Internet上网
  13. Invoking “make -j1“ failed
  14. FDM打印机使用总结(三)
  15. PCB设计十条黄金法则
  16. 汽车SoC全生命周期功能+网络安全架构设计
  17. java银器锁,银器保值吗?S925、S990、S999又是什么银……
  18. 4-2-1 求e的近似值 (15分)
  19. cap与一致性(强一致性、弱一致性、最终一致性)
  20. 【无人机 学习笔记 7】 真实空速、指示空速、标准空速、当量空速之间的关系

热门文章

  1. PHP找出专题下重复的商品数据
  2. win10系统eclipse中整合hadoop错误
  3. LINUX OpenGL简单测试代码
  4. 全网首发:VS编译的文件不在指定位置,怎么办
  5. WORD中如何进行双行合一
  6. 测试webRTC时浏览器机器一定要有摄像头
  7. configure: error: You requested G729 audio codec but not found...die
  8. 共享一个可用的谷歌相机
  9. 把c的char数组转换为python image的代码
  10. C# 获取二维数组的元素个数;获取行数,列数