循环冗余检验的原理说明
- 格式:pdf
- 大小:211.88 KB
- 文档页数:32
循环冗余码校验原理循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。
它是利用除法及余数的原理来作错误侦测(Error Detecting)的。
他将要发送的数据比特序列当作一个多项式f(x)的系数,发送时用双方预先约定的生成多项式G(x)去除,求得一个余数多项式,将余数多项式加到数据多项式之后发送到接收端,接收端同样用G(x)去除接收到的数据,进行计算,然后把计算结果和实际接收到的余数多项式数据进行比较,相同的话表示传输正确。
CRC校验检错能力强,容易实现,是目前应用最广的检错码编码方式之一。
在国际标准中,根据生成多项式G(x)的不同,CRC又可分为以下几种标准:①CRC-12码: G(x)=X12+X11+X3+X2+X+1②CRC-16码: G(x)=X16+X15+X2+1③CRC-CCITT码: G(x)=X16+X12+X5+1④CRC-32码: G(x)=X32+X26+X23+X22+X16+X12+X11+X10+X8+X7+X5+X4+X2+X1+X+1 CRC-12码通常用来传送6-bit字符串。
CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。
CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。
下面以最常用的CRC-16为例来说明其生成过程。
CRC-16码由两个字节构成,在开始时CRC寄存器的每一位都预置为1,然后把CRC 寄存器与8-bit的数据进行异或,之后对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与预定义的多项式码进行异或,否则如果LSB为零,则无需进行异或。
重复上述的由高至低的移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。
循环冗余校验码的原理及应用循环冗余校验码(Cyclic Redundancy Check,简称CRC)是一种在数据传输中用于错误检测的校验码。
CRC的原理是通过在发送数据时附加一个校验值,接收端在接收数据时计算校验值,然后与发送端传递的校验值进行比较,如果两者一致,则说明数据传输没有错误,否则则存在数据错误。
CRC的应用非常广泛,包括网络传输、存储介质、通信等领域。
下面将详细介绍CRC的原理和应用。
1.原理:(1)生成多项式:CRC使用一个生成多项式进行计算。
该多项式可以是任意的,但在应用中通常使用一些标准的多项式。
生成多项式的位数确定了校验码的位数,通常为32位或64位。
(2)数据附加:在发送数据前,发送端会通过生成多项式对数据进行计算,生成一个校验码。
然后将校验码附加在原始数据的末尾。
(3)接收端计算:接收端在接收到数据后,通过与发送端使用同样的生成多项式对接收到的数据进行计算,生成一个接收端的校验码。
(4)校验比较:接收端的生成校验码与发送端传递的校验码进行比较,若一致,则说明数据传输没有错误;若不一致,则说明数据传输存在错误。
2.应用:(1)数据传输:CRC主要应用在网络传输领域,如以太网、Wi-Fi和蓝牙等。
在数据包发送前,发送端会对数据包进行CRC计算,然后将计算得到的校验码附加在数据包中。
接收端在接收到数据包后,再进行CRC计算,然后将计算得到的校验码与接收到的校验码进行比较,以判断是否存在传输错误。
(2)存储介质:CRC也应用在存储介质中,如硬盘驱动器、光盘等。
在数据存储时,CRC会被计算并存储在磁盘或光盘的头部或尾部。
在数据读取时,通过计算CRC来确保数据的完整性。
(3)通信:通信设备通常会使用CRC来检测数据的传输错误。
例如,调制解调器在发送数据前会计算CRC并将其附加在数据中,接收端在接收到数据后计算CRC,并与接收到的CRC进行比较。
(4)校验和验证:CRC也可以用于验证数据的完整性。
循环冗余校验码(CRC)的基本原理循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R 的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式f(X)表示,将f(x)左移R位(则可表示成f(x)*X R),这样f(x)的右边就会空出R 位,这就是校验码的位置。
通过f(x)* X R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式f(x)。
如生成多项式为G(x)=X4+X3+X+1,可转换为二进制数码11011。
而发送信息位1111,可转换为数据多项式为f(x)=X3+X2+X+1。
2、生成多项式是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。
在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。
但可以从有关资料查到常用的对应于不同码制的生成多项式如图9所示:N K 码距d G(x)多项式G(x)7 4 3 x3+x+1 10117 4 3 x3+x2+1 11017 3 4 x4+x3+x2+1 111017 3 4 x4+x2+x+1 1011115 11 3 x4+x+1 1001115 7 5 x8+x7+x6+x4+1 11101000131 26 3 x5+x2+1 10010131 21 5 x10+x9+x8+x6+x5+x3+1 11101101 00163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001 101011041 1024 x16+x15+x2+1 110000000000 00101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
循环冗余校验码(CRC)的基本原理模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
所以实际上就是异或。
然后再移位移位做下一位的模2减。
步骤如下:a、用除数对被除数最高几位做模2减,没有借位。
b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。
若余数最高位为0,商为0,除数继续右移一位。
c、一直做到余数的位数小于除数时,该余数就是最终余数。
循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。
通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。
CRC码的生成步骤4、得到011-------余数(校验位)5、编码后的报文(CRC码)10100111、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。
2、将信息码左移R位,相当与对应的信息多项式C(x)*2R3、用生成多项式(二进制数)对信息码做模2除,得到R位的余数。
4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
【例】假设使用的生成多项式是G(x)=x3+x+1。
4位的原始报文为1010,求编码后的报文。
解:1、将生成多项式G(x)=x3+x+1转换成对应的二进制除数1011。
2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成10100003、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除。
循环冗余检验的原理说明在数字通信和数据存储领域,为了确保数据的准确性和完整性,常常会使用各种校验方法。
其中,循环冗余检验(Cyclic Redundancy Check,简称 CRC)是一种被广泛应用的差错检测技术。
那什么是循环冗余检验呢?简单来说,它就像是数据的“质检员”,通过一系列复杂但又有规律的计算,来判断传输或存储的数据是否出现了错误。
要理解循环冗余检验的原理,我们先来看看它是怎么工作的。
假设我们要传输一段数据,比如说一串二进制数字。
在发送端,会根据预先设定好的一个生成多项式,对这串数据进行计算,得到一个余数,这个余数就是循环冗余码(CRC 码)。
然后,把这个 CRC 码附加在原始数据的后面,一起发送出去。
在接收端,收到数据后,同样根据那个生成多项式,对包括附加的CRC 码在内的整个数据进行计算。
如果计算得到的余数是零,那就说明数据在传输过程中没有出错;如果余数不是零,那就意味着数据出现了错误。
那这个神奇的生成多项式是怎么来的呢?它可不是随便选的。
生成多项式的选择直接影响到循环冗余检验的检错能力。
一般来说,生成多项式的阶数越高,检错能力就越强。
但同时,计算的复杂度也会增加。
为了更好地理解循环冗余检验的计算过程,我们来举个例子。
假设我们的生成多项式是 G(x) = x³+ x + 1,对应的二进制数是 1011。
要检验的数据是 1010。
首先,在数据后面补三个零,得到 1010000。
然后,用这个数除以生成多项式对应的二进制数1011。
计算过程就像我们平常做除法一样,只不过这里是二进制的除法。
通过计算,得到余数是 100。
这个 100 就是 CRC 码。
把它附加在原始数据 1010 后面,得到 1010100,发送出去。
接收端收到 1010100 后,再次除以 1011。
如果余数是零,说明数据没错;如果不是零,就说明数据出错了。
循环冗余检验之所以能够有效地检测错误,是因为它利用了数学上的多项式运算的特性。
循环冗余检验的原理说明嘿,朋友们!今天咱来聊聊循环冗余检验,这玩意儿可有意思啦!你看啊,循环冗余检验就像是我们生活中的质检员。
比如说你买了个水果,你得检查检查它有没有坏的地方吧,这就是一种检验。
而循环冗余检验呢,就是在数据传输的世界里做这样的检查工作。
想象一下,数据就像是一群排着队要去目的地的小人儿,在这个过程中,可能会有一些调皮捣蛋的家伙偷偷混进来,或者有些原本的小人儿不小心受伤了。
那怎么知道有没有问题呢?这时候循环冗余检验就出马啦!它会根据一些特定的规则,给这些数据小人儿们算个特别的“标记”。
等这些小人儿到达目的地后,接收方再用同样的方法算一下这个“标记”,如果两个“标记”一样,那就说明这些小人儿都好好的,没啥问题。
要是不一样呢,那可就糟糕啦,就知道在传输过程中有状况发生了。
这就好比你寄个包裹给朋友,你在包裹上做个特殊记号,你朋友收到后看看记号对不对,就知道包裹有没有被人动过手脚。
循环冗余检验不就是这么个道理嘛!而且它可厉害啦,能发现很多我们肉眼看不到的小错误呢。
这就好像你有一双超级厉害的眼睛,能看到那些隐藏得很深的问题。
它能把那些想要蒙混过关的错误都给揪出来,是不是很牛?那它具体是怎么工作的呢?其实就是通过一些复杂的计算啦,但咱不用太纠结那些细节,只要知道它很厉害,能帮我们保证数据的准确性就行啦!在我们现在这个信息时代,数据传输那是无处不在啊。
要是没有循环冗余检验这样的好帮手,那得有多少错误和混乱呀!想想如果你的手机信号老是出错,或者你在网上看个视频老是卡顿,那得多烦人啊!所以说呀,循环冗余检验可真是个大功臣呢!它默默地守护着我们的数据传输,让一切都能顺顺利利的。
下次你在享受顺畅的网络或者准确的数据传输时,可别忘了这里面有循环冗余检验的一份功劳哟!总之呢,循环冗余检验就是这么个神奇又重要的东西,它让我们的数据世界变得更加可靠和美好!怎么样,是不是觉得它很了不起呀?原创不易,请尊重原创,谢谢!。
循环冗余校验原理循环冗余校验(Cyclic Redundancy Check,CRC)是一种常用的数据传输错误检测技术,它通过对数据进行多项式计算生成一个校验码,并将该校验码附加在数据后面传输。
接收方接收到数据后,再对数据和校验码进行计算,如果计算结果与发送方生成的校验码一致,则说明数据传输过程中没有发生错误。
CRC的原理是基于余数定理和多项式除法。
将要传输的数据看作一个二进制数,在发送端对该数进行多项式除法运算,得到一个余数作为校验码。
接收方同样对接收到的数据进行多项式除法运算,并得到一个余数,如果该余数与发送方生成的校验码一致,则说明传输过程中没有发生错误。
具体地说,CRC通过以下步骤实现:1. 选择一个生成多项式G(x),通常为一个二进制数。
这个生成多项式必须满足以下条件:首先,它必须能够被二进制整除;其次,它必须能够检测出所有长度小于等于n位(n为生成多项式的位数)的单比特差错;最后,它必须尽可能地能够检测出所有长度大于n位的双比特差错。
2. 将要传输的数据看作一个二进制数,长度为n。
在该数的末尾添加一个长度为n-1的0序列,得到一个长度为2n-1的新数。
3. 将生成多项式左移n-1位,得到一个长度为2n-1的多项式P(x)。
4. 对新数和P(x)进行模2除法运算,得到一个余数R(x)。
将该余数附加在原数据后面传输。
5. 接收方接收到数据后,同样将数据看作一个二进制数,并在末尾添加一个长度为n-1的0序列,得到一个长度为2n-1的新数。
然后对新数和P(x)进行模2除法运算,得到余数R'(x)。
6. 如果R'(x)=0,则说明传输过程中没有发生错误;否则说明发生了错误。
总之,CRC通过对数据进行多项式计算生成校验码,并将其附加在原数据后面传输,接收方再对数据和校验码进行计算以检测是否发生错误。
它具有高效、简单、可靠等优点,在通信领域中被广泛应用。
CRC循环冗余校验的原理循环冗余校验(CRC)是一种用于检测或纠正错误的数据校验方法,常用于通信中对数据进行完整性校验。
CRC的原理是利用一个固定的产生多项式对数据进行除法运算,并将余数作为校验码添加到数据中,接收方通过对接收到的数据再次进行除法运算,将得到的余数与发送方发送的校验码进行比较,用于判断接收到的数据是否出现了错误。
CRC的计算方式如下:1.选择一个生成多项式,该多项式的位数比待校验数据的位数少1、通常使用的生成多项式有常用的CRC-32和CRC-16多项式。
2.在待校验数据后添加一组位数等于生成多项式位数的0,这个数据称为"扩展数据"。
3.将扩展数据除以生成多项式,取得的余数即为校验码。
4.将校验码添加到原数据后,形成带有校验码的完整数据,即为发送数据。
例如,我们用CRC-16多项式来演示CRC的运算步骤。
生成多项式是一个16位的二进制数:10001101000101000(0x1021)。
假设我们发送的数据是一个16位的二进制数:11010101000111100。
第一步,在待校验数据后添加16位的0,形成扩展数据:110101010001111000000000000000000。
第二步,将扩展数据与生成多项式进行除法运算,得到的余数为:0100110011100100(0x4CE4)。
第三步,将校验码添加到原数据后,得到发送数据为:110101010001111000100110011100100。
这样,发送方将这个发送数据发送给接收方。
接收方接收到数据后,进行相同的操作,再次用生成多项式进行除法运算,得到余数。
如果余数为0,则表明数据没有错误;如果余数不为0,则表明数据存在错误。
CRC的性质和应用:1.CRC可以检测出所有奇数位数量的错误,以及几乎所有偶数位数量的错误。
对于t位的生成多项式,CRC可以检测出所有长度小于t的错误序列。
2.CRC不仅可以用于数据的检错,还可以用于数据的纠错。