视频参考:http://v.youku.com/v_show/id_XMTA2Mzc5ODg=.html
用到多项式和二进制数之间的转换
然后用到的主要运算是模2除法
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减”,即异或运算。
相关推荐
### CRC校验原理 CRC校验的原理基于模2除法,这是一种不同于常规算术除法的操作,其特点在于任何数除以2时都不进位。模2除法也被称为异或除法,即对两个二进制数进行异或(XOR)操作。在模2除法中,异或运算相当于...
"CRC校验原理与算法.pdf"文档很可能详细介绍了CRC校验的基本概念、工作原理、计算过程,以及CRC8的具体实现方法,可能还包括其他常见的CRC校验,如CRC16、CRC32等。此外,文档可能还包含了CRC在实际应用中的例子,如...
CRC 校验原理解释以及范例 CRC 校验是一种常用的差错校验码,在数据通信领域中广泛应用。它的特征是信息字段和校验字段的长度可以任意选定。下面将详细介绍 CRC 校验的原理、生成方法、软件生成方法和源代码分析。 ...
MODBUS 协议 CRC 校验原理 MODBUS协议是串行通信协议,广泛应用于工业自动化领域,RS485 是一种常用的通讯总线。MODBUS 协议中的 CRC 校验是确保数据传输正确性的重要机制。下面将对 MODBUS 协议中的 CRC 校验原理...
CRC校验的核心在于生成多项式,这些多项式在CRC计算过程中起到关键作用。 CRC的工作原理是这样的:在发送端,原始数据(k位)与一个预定义的n位生成多项式G(X)进行“除法”运算(这里的除法是模2除法,即异或运算)...
CRC校验的核心在于使用一个预定义的生成多项式,这个多项式与数据进行某种数学运算,生成的校验位附加到原始数据后面,接收方再使用相同的生成多项式进行验证。 CRC的基本原理: 1. **循环冗余校验码**:CRC码的...
CRC 校验原理步骤以及CRC校验码的计算 CRC(循环冗余校验码)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附加在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。CRC 校验...
### 16位CRC校验原理与算法分析 #### 一、16位CRC校验原理概述 循环冗余校验(Cyclic Redundancy Check, CRC)是一种广泛应用于通信领域中的错误检测方法,用于检测传输过程中数据是否发生改变。CRC通过生成一个固定...
### CRC校验原理浅析 CRC(Cyclic Redundancy Check)校验是一种广泛应用于通信领域中的错误检测方法,主要用于确保数据传输过程中信息的完整性和准确性。本文将深入解析CRC校验的工作原理,并通过数学基础、多项式...
### CRC校验原理以及HDL实现 #### 一、CRC校验原理 ##### 1.1 循环冗余校验(CRC) 循环冗余校验(Cyclic Redundancy Check,CRC)是一种广泛应用于数据通信领域中的检错技术。其主要作用是在数据传输过程中检测...
### CRC校验原理详解 #### 一、CRC校验码简介 循环冗余校验(Cyclic Redundancy Check,简称CRC)是一种广泛应用于数据通信领域的差错检测方法。CRC码的主要特点是信息字段和校验字段的长度可以任意选定,这使得它...
CRC 校验原理与其 C 语言实现 CRC 校验原理是利用线性编码理论,在发送端根据要传送的 k 位二进制码序列,以一定的规则产生一个校验用的监督码(既 CRC 码)r 位,并附在信息后边,构成一个新的二进制码序列数共(k+...
### CRC校验原理及其C语言实现 #### 一、CRC校验原理概述 CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用于数据通信和存储系统中的错误检测方法。它通过在线性编码理论的基础上,为待传输的数据添加...
### CRC校验原理详解 #### 一、CRC校验概述 CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用于数据通信领域的差错校验技术。它的主要特点是信息字段和校验字段的长度可以灵活设定,并且通过特定的...
CRC校验原理及其C语言实现,是数据通信与存储领域中一种重要的错误检测技术,用于确保数据在传输过程中的完整性和准确性。CRC(Cyclic Redundancy Check)校验码是一种基于多项式除法的检错机制,通过在数据后面附加...
### CRC校验原理及其C语言实现 #### 一、CRC校验原理概述 CRC(Cyclic Redundancy Check,循环冗余校验)是一种广泛应用于数据通信和存储系统中的错误检测方法。它通过生成一个固定长度的校验值来检测数据在传输...
总的来说,CRC校验是一种有效且广泛应用的数据完整性检验方法,它利用多项式理论生成校验码,通过软件或硬件实现来确保数据传输的可靠性。理解CRC的工作原理和实现方式对于软件开发人员来说至关重要,尤其是在涉及...