循环冗余检验的原理说明
循环冗余校验原理及程序
ENDIF;
IFdtemp(7)='1'THEN
dtemp(7DOWNTO2):=dtemp(7DOWNTO2)XORPOLYNOMIAL;
ENDIF;
IFdtemp(6)='1'THEN
dtemp(6DOWNTO1):=dtemp(6DOWNTO1)XORPOLYNOMIAL;
rdata_r <=X"000";
dfinish_r <='0';
error01_r <='0';
ELSIFhrecv='1'THEN
rdatacrc <=datacrci;
rdtemp :=datacrci(16DOWNTO5);
IFrdtemp(11)='1'THEN
rdtemp(11DOWNTO6):=rdtemp(11DOWNTO6)XORPOLYNOMIAL;
while(--len>=0)
{
ch=*crcbuf++;ch<<=8;
for(i=0;i<8;i++)
{
crc<<=1;
if((ch&0x8000)!=0)crc|=1;
if(crc>=gx)crc∧=gx;
ch<<=1;
}
}
return((crc==0)?0∶1)
}
以上CRC编码和校验函数结构良好,调用接口清晰,执行效率很高,且具有良好的可
hsend<=hsend_r;
datacrco<=datacrco_r;
循环冗余码校验原理
循环冗余码校验原理循环冗余码校验英文名称为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)的基本原理循环冗余校验码(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)的基本原理
循环冗余校验码(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。
如果余数是零,说明数据没错;如果不是零,就说明数据出错了。
循环冗余检验之所以能够有效地检测错误,是因为它利用了数学上的多项式运算的特性。
循环冗余检验原理
常用的对应于不同的码制的生成多项式
Commonly used generating polynomials corresponding to different code systems源自应用场合应用于什么场合
For what occasion?
循环冗余检验的应用场合
No.1
CRC校验实用程序 库 在数据存储和
循环冗余检验实现过程
Step 1
1)先选择(可以随机选择,也可以按照标准选择)一个用于在接收端进行校验时,对接收的帧进 行除法运算的除数(是二进制比特串,通常以多项式表达,所以crc又称多项式编码方法,这个多 项式也称为“生成多项式”)。
Step 2
2)假定所选的数据帧为k位,然后在要发送的数据帧(假定m位)的后面补上k-1位“0”,然后用这 个新帧(一共m+k-1位)以“模2除法”的方式除以上面这个除数,所得到的余数(也是二进制比特 序列)就是该帧的crc校验码,也称之为FCS(帧校验序列)。但要注意的是,余数的位数一定要 只比除数的位数少一位,哪怕前面位是0,甚至全位0时都不能省略。
选择哪种多项式更合适?
Which polynomial to choose is more appropriate.
01 02 03 04
生成多项式需满足的要求
生成多项式的最高位和最低位必须为1。 当被传送信息(CRC码)任何一位发生错误时, 被生成多项式做除后应该使余数不为0。 不同位发生错误时,应该使余数不同。
THANKS
F or Yo u A Th o us a nd Tim es
O
v
e
r
Step 3
3)再把这个校验码附在原数据帧(就是m位的帧,不是生成的m+k-1位的帧)的后面,构建一个 新帧发送给接收端;最后再在接收端再把这个新帧以“模2除法”的方式除以前面选择的除数,如果 没有余数,则表明该帧在传输的过程中没有出错,否则出现了差错。
循环冗余检验的原理说明
循环冗余检验的原理说明嘿,朋友们!今天咱来聊聊循环冗余检验,这玩意儿可有意思啦!你看啊,循环冗余检验就像是我们生活中的质检员。
比如说你买了个水果,你得检查检查它有没有坏的地方吧,这就是一种检验。
而循环冗余检验呢,就是在数据传输的世界里做这样的检查工作。
想象一下,数据就像是一群排着队要去目的地的小人儿,在这个过程中,可能会有一些调皮捣蛋的家伙偷偷混进来,或者有些原本的小人儿不小心受伤了。
那怎么知道有没有问题呢?这时候循环冗余检验就出马啦!它会根据一些特定的规则,给这些数据小人儿们算个特别的“标记”。
等这些小人儿到达目的地后,接收方再用同样的方法算一下这个“标记”,如果两个“标记”一样,那就说明这些小人儿都好好的,没啥问题。
要是不一样呢,那可就糟糕啦,就知道在传输过程中有状况发生了。
这就好比你寄个包裹给朋友,你在包裹上做个特殊记号,你朋友收到后看看记号对不对,就知道包裹有没有被人动过手脚。
循环冗余检验不就是这么个道理嘛!而且它可厉害啦,能发现很多我们肉眼看不到的小错误呢。
这就好像你有一双超级厉害的眼睛,能看到那些隐藏得很深的问题。
它能把那些想要蒙混过关的错误都给揪出来,是不是很牛?那它具体是怎么工作的呢?其实就是通过一些复杂的计算啦,但咱不用太纠结那些细节,只要知道它很厉害,能帮我们保证数据的准确性就行啦!在我们现在这个信息时代,数据传输那是无处不在啊。
要是没有循环冗余检验这样的好帮手,那得有多少错误和混乱呀!想想如果你的手机信号老是出错,或者你在网上看个视频老是卡顿,那得多烦人啊!所以说呀,循环冗余检验可真是个大功臣呢!它默默地守护着我们的数据传输,让一切都能顺顺利利的。
下次你在享受顺畅的网络或者准确的数据传输时,可别忘了这里面有循环冗余检验的一份功劳哟!总之呢,循环冗余检验就是这么个神奇又重要的东西,它让我们的数据世界变得更加可靠和美好!怎么样,是不是觉得它很了不起呀?原创不易,请尊重原创,谢谢!。
循环冗余校验原理
循环冗余校验原理循环冗余校验(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的原理是利用一个固定的产生多项式对数据进行除法运算,并将余数作为校验码添加到数据中,接收方通过对接收到的数据再次进行除法运算,将得到的余数与发送方发送的校验码进行比较,用于判断接收到的数据是否出现了错误。
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不仅可以用于数据的检错,还可以用于数据的纠错。
循环冗余检验 (CRC) 算法原理
循环冗余检验(CRC) 算法原理Cyclic R edundancy C heck循环冗余检验,是基于数据计算一组效验码,用于核对数据传输过程中是否被更改或传输错误。
算法原理假设数据传输过程中需要发送15位的二进制信息g=101001110100001,这串二进制码可表示为代数多项式g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1,其中g中第k 位的值,对应g(x)中x^k的系数。
将g(x)乘以x^m,既将g后加m个0,然后除以m阶多项式h(x),得到的(m-1)阶余项r(x)对应的二进制码r就是CRC编码。
h(x)可以自由选择或者使用国际通行标准,一般按照h(x)的阶数m,将CRC算法称为CRC-m,比如CRC-32、CRC-64等。
国际通行标准可以参看/wiki/Cyclic_redundancy_checkg(x)和h(x)的除运算,可以通过g和h做xor(异或)运算。
比如将11001与10101做xor运算:明白了xor运算法则后,举一个例子使用CRC-8算法求101001110100001的效验码。
CRC-8标准的h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1,既h是9位的二进制串111010101。
经过迭代运算后,最终得到的r是10001100,这就是CRC效验码。
通过示例,可以发现一些规律,依据这些规律调整算法:1. 每次迭代,根据gk的首位决定b,b是与gk进行运算的二进制码。
若gk的首位是1,则b=h;若gk的首位是0,则b=0,或者跳过此次迭代,上面的例子中就是碰到0后直接跳到后面的非零位。
2. 每次迭代,gk的首位将会被移出,所以只需考虑第2位后计算即可。
这样就可以舍弃h的首位,将b取h的后m位。
比如CRC-8的h是111010101,b只需是11010101。
3. 每次迭代,受到影响的是gk的前m位,所以构建一个m位的寄存器S,此寄存器储存gk的前m位。
crc 原理
CRC原理详解1. 引言循环冗余检验(Cyclic Redundancy Check,CRC)是一种常用的错误检测技术,广泛应用于通信、存储等领域。
CRC通过对数据进行多项式计算,生成冗余校验码,并将其附加到数据中。
接收方在接收到数据后,使用相同的多项式计算方法对数据进行校验,如果校验结果与接收到的冗余校验码一致,说明数据未被错误修改;否则,说明数据可能存在错误。
本文将详细介绍CRC的基本原理,包括生成多项式、计算过程、校验方法等。
2. 多项式生成CRC通过多项式生成冗余校验码。
生成多项式是一个固定的二进制数,通常用一个二进制数表示,如110101。
生成多项式的选择对CRC的性能有很大影响,不同的生成多项式可以检测到不同数量的错误,并具有不同的误检率。
生成多项式的选取方法有很多种,常用的有标准CRC多项式、反射CRC多项式和非反射CRC多项式。
标准CRC多项式的最高次项为1,如100000111;反射CRC多项式的最高次项为0,如110101;非反射CRC多项式的最高次项为1,如100000111。
3. 计算过程CRC的计算过程可以简单描述为:将数据按照二进制形式进行处理,除以生成多项式并取余数,将余数作为冗余校验码附加到数据中。
具体计算过程如下: 1. 将要发送的数据转换为二进制形式。
2. 在数据的末尾添加n个0,其中n为生成多项式的位数减1。
3. 将数据除以生成多项式,并取余数。
4. 将余数作为冗余校验码附加到数据末尾。
例如,要发送的数据为101010,生成多项式为110101,则计算过程如下: 1. 将数据转换为二进制形式:101010。
2. 在数据末尾添加5个0:10101000000。
3. 将数据除以生成多项式并取余数:10101000000除以110101,余数为01110。
4. 将余数作为冗余校验码附加到数据末尾:10101001110。
最终发送的数据为10101001110。
循环冗余校验码(crc)的基本原理
A:①水平垂直奇偶校验②循环求和
③循环冗余④正比率
B:①模2除法②定点二进制除法
③二-十进制除法④循环移位法
C:①1100101010111②110010101010011
③110010101011100④110010101010101
D:①可纠正一位差错②可检测所有偶数位错
③可检测所有小于校验位长度的突发错
5、通信与网络中常用的CRC
在数据通信与网络中,通常k相当大,由一千甚至数千数据位构成一帧,而后采用CRC码产生r位的校验位。它只能检测出错误,而不能纠正错误。一般取r=16,标准的16位生成多项式有CRC-16=x16+x15+x2+1和CRC-CCITT=x16+x15+x2+1。
【例1】某循环冗余码(CRC)的生成多项式G(x)=x3+x2+1,用此生成多项式产生的冗余位,加在信息位后形成CRC码。若发送信息位1111和1100则它的CRC码分别为_A_和_B_。由于某种原因,使接收端收到了按某种规律可判断为出错的CRC码,例如码字_C_、_D_、和_E_。(1998年试题11)
1011
------------
11-------余数(校验位)
(4)编码后的报文(CRC码):
1010000
+ 11
------------------
1010011
CRC码为1010011(和纠错)。
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。若得到余数不为0,则接收的数据有错。
(2)此题生成多项式有4位(R+1),要把原始报文F(x)左移3(R)位变成1010000
循环冗余校验码(CRC)的基本原理
循环冗余校验码(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)得到的余数就是校验码。
几个基本概念1、多项式与二进制数码多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式C(x)。
如生成多项式为G(x)=X^4+X^3+X+1,可转换为二进制数码11011。
而发送信息位1111,可转换为数据多项式为C(x)=X^3+X^2+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 1110110100163 57 3 x6+x+1 100001163 51 5 x12+x10+x5+x4+x2+1 10100001101011041 1024 x16+x15+x2+1 11000000000000101图9 常用的生成多项式3、模2除(按位除)模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
简述循环冗余码crc校验方法的工作原理
简述循环冗余码crc校验方法的工作原理循环冗余码(CRC)校验方法是一种常见的错误检测技术,用于检测数据在传输过程中是否发生了错误。
CRC校验方法的工作原理是在发送端将数据通过多项式除法计算生成一个校验码,该校验码与数据一起发送到接收端,在接收端再次进行多项式除法计算,如果计算结果与发送端发送的校验码相同,则数据传输无误,否则数据传输存在错误。
具体地,CRC校验方法的实现过程包括以下几个步骤:
1. 确定生成多项式(generator polynomial)G(x):生成多项式是一个二进制数,通常用一个多项式的系数序列表示。
在CRC校验方法中,生成多项式的位数与数据位数相同,且第一位和最后一位都是1,其余位数为0或1。
2. 填充数据:为了保证计算过程的正确性,数据需要在最高位和最低位都添加r个0(r为生成多项式的位数-1),从而保证数据与生成多项式的位数相同。
3. 计算CRC码:将填充后的数据通过多项式除法计算生成CRC 码,并附加到数据末尾。
4. 发送数据:将数据和CRC码发送到接收端。
5. 接收数据:接收端接收到数据后,将接收到的数据和CRC码拆分开来。
6. 计算CRC码:在接收端再次通过多项式除法计算生成CRC码。
7. 校验数据:将接收端计算得到的CRC码与发送端发送的CRC
码进行比较,如果相同则数据传输无误,否则数据传输存在错误。
总体来说,CRC校验方法的核心是通过多项式除法计算生成CRC 码,以检测数据传输过程中是否发生了错误。
CRC校验方法具有计算速度快、误检率低等优点,被广泛应用于网络通信、存储系统等领域。
循环冗余码crc校验方法原理
循环冗余码crc校验方法原理CRC校验方法通过对待传输的数据进行计算,生成一组校验码,然后将校验码与数据一起传输。
接收方在收到数据后再次进行计算,如果接收到的校验码与计算得到的校验码一致,就表示数据传输过程中没有出错。
CRC校验是一种循环多项式计算方法。
具体原理如下:1. 定义一个产生多项式G,它是一个比特序列。
这个多项式进行无符号二进制数运算,通常写成如28-bit、32-bit等形式。
G为CRC生成多项式,与被校验数据的位数相关。
2.将待传输的数据D看做一个多项式,记为M(x),其中x为一个变量。
M(x)的次数不大于G的次数(G的次数等于M(x)的位数减去1)。
3.引入冗余位R,即是生成的校验码,也是一个比特序列。
R(x)的次数不大于G的次数。
4.计算M(x)乘以x的幂次后除以G,这个操作表示对M(x)进行长除法操作,最后得到商Q(x)和余数R(x)。
Q(x)表示M(x)与G的长除法过程中的商。
5.将R(x)作为冗余位添加到M(x)的低位,形成一个新的数M'(x)。
6.M'(x)除以G,得到R'(x)。
R`(x)通常是0,如果不为0,就表示传输过程中发生了错误。
7.将R'(x)作为校验码发送给接收方,接收方在收到数据后重复以上操作计算出的R’(x)与接收到的R'(x)进行比较。
如果在计算过程中R(x)和R'(x)相等,就表示数据没有出错。
如果不相等,则说明在数据传输过程中发生了错误。
接收方可以通过比较R(x)和R'(x)的差异来确定出错的位置,并进行识别和纠错。
CRC校验方法的优点在于简单、高效。
由于CRC码是通过位运算,可以通过硬件电路或者软件算法来实现,具有较高的速度和性能。
此外,CRC码还具有较好的错误检测能力,能够检测出多位、批量错误。
总的来说,CRC校验方法利用多项式的除法原理,在待传输的数据上附加一组冗余位校验码,接收方通过对数据进行相同的计算,可以判断数据传输是否出错,并进行错误检测和纠正。
循环冗余校验原理
循环冗余校验原理
循环冗余校验思想(CRC):
• 在K位信息码后再拼接R位的校验码,整个 编码长度为N位,因此,这种编码又称为 (N,K)码。 • 对于一个给定的(N,K)码,可以证明存在 一个最高次幂为R=N-K的多项式G(X),根据 G(X)可以生成K位信息的校验码。G(X)称为 这个CRC的生成多项式。
1、CRC校验码的生成过程
• 假设发送信息用信息多项式C(X)表示,将 C(X)左移R位,则可表示C(X)×2,这样C(X) 的右边就会空出R位,这就是校验码的位置, 通过C(X)×2除以生成多项式G(X)得到的余数 就是校验码。 • 多项式幂,以后的对 应多项式的各幂次,有此幂次项对应1,无 此幂次项对应0。
2、CRC纠错
• 在接收方收到CRC码后用生成多项式G(X) 做模2除,若得到余数为0,则码字没有错; 若有一位出错,余数不为0,而且不同位出 错,其余数也不同。
• 余数与出错位的对应关系只与码制及生成 多项式有关,而与待测码字无关。
• 例:假设生成多项式G(X)=X³+X+1,4位的原始报 文为1010,求CRC编码后的报文。 解析:R=生成多项式的最高次幂=3,K=报文的长 度=4,N=R+K=7 生成多项式G(X)对应的二进制数为1011,将原 始报文C(X)左移R(3)位,得到1010000,再和 1011进行模2除法运算,最后得到余数为011, 则报文编码后得到的报文即CRC码为1010011。 若发送发的消息为1010011,接收方得到的数 据为1010001,然后将这个数据与1011做模2除 运算,得到余数为010。说明第二位出错这里只 需对它求反即可。
循环冗余校验的原理
循环冗余校验(CRC,Cyclic Redundancy check) • 码多项式及其算术运算 假设循环码为 C= Cn-1 Cn-2…. C2 C1 C0
长度为n
M的码多项式(称为n-1次多项式) C(x) = Cn-1 xn-1 + Cn-2xn-2 + …. C2 x2 +C1 x + C0 例1: C = 1100101 C(x) =1x6 + 1x5 +0x4 +0x3 + 1x2 +0 x + 1 = x6 + x5 +x2 + 1
模2加=模2减 模 2乘 模2除=乘的可逆运算
பைடு நூலகம்
10110 10011
10100 10011 1110
余数 r(x)
差错检测
循环冗余校验码(CRC,Cyclic Redundancy check)
在接收端本来应该收到: c(x) = xr· m(x) + r(x) = Q(x)· P(x) 用协商好的生成多项式P(x)去除c(x),从余数来判断是否出错
差错检测方法
循环冗余校验(CRC,Cyclic Redundancy check)
将要传送的信息分成码组M,然后按某一种约定的规律 对每一个信息码组附加一些校验的码元R,形成新的码
组C,使得C中的码元之间具有一定的相关性(即码组中 “1”和“0”的出现彼此相关),再传输到接收端; 接收端根据这种相关性或规律性来校验码组C是否正确 ,还可对出错码组的错定位加以相应的纠正,最后将码 组C还原成信息码组M。
(2) x4· m(x) = 1101011011,0000
(3)
1101011011.0000 10011 商数:1100001010 余数:1110 r(x) = x3 + x2 + x + 0
循环冗余检验
接收端对收到的每一帧进行 CRC 检验
• (1) 若得出的余数 R = 0,则判定这个帧没有差 错,就接受(accept)。 • (2) 若余数 R 0,则判定这个帧有差错,就丢 弃。 • 但这种检测方法并不能确定究竟是哪一个或哪 几个比特出现了差错。 • 只要经过严格的挑选,并使用位数足够多的除 数 P ,那么出现检测不到的差错的概率就很小 很小。
循环冗余检验的原理说明
110101 ← Q (商) P (除数) → 1101 101001000 ← 2nM (被除数) 1101 1110 1101 0111 0000 1110 1101 0110 0000 1100 1101 001 在数据后面添加上的冗余码称为帧检验 序列 FCS (Frame Check Sequence)。 • 循环冗余检验 CRC 和帧检验序列 FCS并不 等同。
凡是接收端数据链路层接受的帧都没有传输差错有差错的帧就丢弃而不接要做到可靠传输即发送什么就收到什么就必须再加上确认和重传机制
循环冗余检验的原理
• 在数据链路层传送的帧中,广泛使用了循 环冗余检验 CRC 的检错技术。 • 在发送端,先把数据划分为组。假定每组 k 个比特。 • 假设待传送的一组数据 M = 101001(现在 k = 6)。我们在 M 的后面再添加供差错检测 用的 n 位冗余码一起发送。
冗余码的计算
• 用二进制的模 2 运算进行 2n 乘 M 的运算, 这相当于在 M 后面添加 n 个 0。 • 得到的 (k + n) 位的数除以事先选定好的长 度为 (n + 1) 位的除数 P,得出商是 Q 而余数 是 R,余数 R 比除数 P 少1 位,即 R 是 n 位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
CRC码的检错能力举例
若 r =16,则能检测出 所有的双错 所有的奇数位错 所有的突发长度小于等于16的突发错 99.997%的突发长度为17的突发错 99.998%的突发长度大于等于18的突发错。
简单的数学分析(续)
一帧的平均重传次数 = {1 × P[重传次数为 1] + 2 × P[重传次数为 2] + 3 × P[重传次数为 3] +…} = {1 × P[第 1 次发送出错] × P[第 2 次发送成功] + 2 × P[第 1, 2 次发送出错] × P[第 3 次发送成功] + 3 × P[第 1, 2, 3 次发送出错] × P[第 4 次发送成功] +…}
停止等待协议的注意点
连续出现相同发送序号的数据帧,表明发送端 进行了超时重传。连续出现相同序号的确认 帧,表明接收端收到了重复帧。 发送端在发送完数据帧时,必须在其发送缓存 中暂时保留这个数据帧的副本。这样才能在出 差错时进行重传。只有确认对方已经收到这个 数据帧时,才可以清除这个副本。
东南大学自动化学院
A
DATA0 DATA1 DATA2 DATA1 3 DATA4 DATA5 DATA2 6 DATA7 DATA8
B ACK1 确认 DATA0 ACK1 确认 DATA0 ACK2 确认 DATA1 ACK3 确认 DATA2 ACK2 确认 DATA1 ACK4 确认 DATA3 ACK5 确认 DATA4 ACK6 确认 DATA5 ACK3 确认 DATA2 ACK7 确认 DATA6 ACK8 确认 DATA7 送交主机
3.2.5 停止等待协议的算法
这里不使用否认帧(实用的数据链路层协议大都是这样 的),而且确认帧带有序号 n。 按照习惯的表示法,ACKn 表示“第 n – 1 号帧已经收 到,现在期望接收第 n 号帧”。 ACK1 表示“0 号帧已收到,现在期望接收的下一帧是 1 号帧”; ACK0 表示“1 号帧已收到,现在期望接收的下一帧是 0 号帧”。 东南大学自动化学院
M
东南大学自动化学院
G ( X ) 的选择
性质1:若 G ( X ) 含有(X+1)的因子,则能检测出所有奇 数个错; 性质2:若 G ( X ) 中不含有X的因子,或常数项为1,则能 检测出所有突发长度≤ r 的突发错;
2− (r −1) ; −r 对突发长度大于 r+1 的突发错的漏检率为 2 ;
需要注意:
(3) 结点 A 在每发送完一个数据帧时都要设置该帧的超时计 时器。如果在所设置的超时时间内收到确认帧,就立即 将超时计时器清零。但若在所设置的超时时间到了而未 收到确认帧,就要重传相应的数据帧(仍需重新设置超 时计时器)。 在等不到 2 号帧的确认而重传 2 号数据帧时,虽然 结点 A 已经发完了 5 号帧,但仍必须向回走,将 2号帧 及其以后的各帧全部进行重传。连续 ARQ 又称为Goback-N ARQ,意思是当出现差错必须重传时,要向回走 N 个帧,然后再开始重传。 东南大学自动化学院
停止等待协议的要点(续)
实用的 CRC 检验器都是用硬件完成的。 CRC 检验器能够自动丢弃检测到的出错帧。因 此所谓的“丢弃出错帧”,对上层软件或用户来说 都是感觉不到的。 发送端对出错的数据帧进行重传是自动进行的, 这种差错控制体制常简称为 ARQ (Automatic Repeat reQuest),即自动请求重传。
东南大学自动化学院
…
需要注意:
(1) 接收端只按序接收数据帧。虽然在有差错的 2号帧之后 接着又收到了正确的 3 个数据帧,但接收端都必须将这 些帧丢弃,因为在这些帧前面有一个 2 号帧还没有收 到。虽然丢弃了这些不按序的无差错帧,但应重复发送 已发送过的最后一个确认帧(防止确认帧丢失)。 (2) ACK1 表示确认 0 号帧 DATA0,并期望下次收到 1 号 帧;ACK2 表示确认 1 号帧 DATA1,并期望下次收到 2 号帧。依此类推。 东南大学自动化学院
3.3 连续 ARQ 协议 3.3.1 连续 ARQ 协议的工作原理
在发送完一个数据帧后,不是停下来等待确认 帧,而是可以连续再发送若干个数据帧。 如果这时收到了接收端发来的确认帧,那么还 可以接着发送数据帧。 由于减少了等待时间,整个通信的吞吐量就提 高了。
东南大学自动化学院
连续 ARQ 协议的工作原理
重传时间的作用是:数据帧发送完毕后若经过了这样长 的时间还没有收到确认帧,就重传这个数据帧。 为方便起见,我们设重传时间为 tout = tp + tpr+ ta + tp + tpr (3-2)
设上式右端的处理时间 tpr 和确认帧的发送时间 ta 都远小 于传播时延 tp,因此可将重传时间取为两倍的传播时 延,即 tout = 2tp (3-3) 东南大学自动化学院
= p(1 − p) + 2 p 2 (1 − p) + 3 p 3 (1 − p) +
这里 P[X] 是出现事件 X 的概率。
东南大学自动化学院
简单的数学分析(续)
得出正确传送一个数据帧所需的平均时间:
t av = tT + (1 − p )∑ ip i tT = tT / (1 − p )
i =1
东南大学自动化学院
常用的 G ( X )
CRC _ 12 = X
12
+ X + X + X + X +1
11 3 2
CRC _ 16 = X
16
+ X + X +1
15 2
CRC _ CCITT = X
16
+X
12
+ X +1
5
东南大学自动化学院
帧检验序列 FCS
在数据后面添加上的冗余码称为帧检验序列 FCS (Frame Check Sequence)。 循环冗余检验 CRC 和帧检验序列 FCS并不等同。 CRC 是一种常用的检错方法,而 FCS 是添加在数 据后面的冗余码。 FCS 可以用 CRC 这种方法得出,但 CRC 并非用 来获得 FCS 的惟一方法。
循环冗余检验的原理说明
1101010110 ← Q 商 除数 P → 110101 101000110100000 ← 2rM 被除数 110101 111011 G(X) X r M(X) 110101 111010 110101 111110 110101 101100 110101 110010 110101 R(X) 01110 ← R 余数
东南大学自动化学院
在接收结点
(1) V(R)←0。 (2) 等待。 (3) 收到一个数据帧; 若 N(S) = V(R),则执行(4); 否则丢弃此数据帧,然后转到(6)。 (4) 将收到的数据帧中的数据部分送交上层软件 (也就是数据链路层模型中的主机)。 (5) V(R)←[1 − V(R)]。 (6) n←V(R); 发送确认帧 ACKn,转到(2)。 东南大学自动化学院
在发送结点
(1) (2) (3) (4) (5) (6) (7) 从主机取一个数据帧,送交发送缓存。 V(S)←0。 N(S)←V(S)。 将发送缓存中的数据帧发送出去。 设置超时计时器。 等待。 {等待以下(7)和(8)这两个事件中最先出现的一个} 收到确认帧 ACKn, 若 n = 1 – V(s),则: 从主机取一个新的数据帧,放入发送缓存; V(S)←[1 − V(S)],转到 (3)。 否则,丢弃这个确认帧,转到(6)。 (8) 若超时计时器时间到,则转到(4)。
ACK1 ACK2 ACK2 ACK2 ACK2 ACK3 ACK4
超 时 重 传 时 间
ACK2 确认 DATA1 DATA2 出错,丢弃
送交主机
tout
DATA3 不按序,丢弃,重传 ACK2 DATA4 不按序,丢弃,重传 ACK2 DATA5 不按序,丢弃,重传 ACK2 ACK3 确认 DATA2 ACK4 确认 DATA3 送交主机
3.3.3 滑动窗口的概念
发送端和接收端分别设定发送窗口和接收窗口 。 发送窗口用来对发送端进行流量控制。 发送窗口的大小 WT 代表在还没有收到对方确认信 息的情况下发送端最多可以发送多少个数据帧。
东南大学自动化学院
发送窗口 WT (a) 0 1 2 3 4 5 6 7 0 1 2
允许发送 5 个帧 WT (b) 0 已发送 1 2 3 4 5 6
ACK1 ACK2 ACK3 2 ACK4 ACK5 ACK6 3 ACK7 ACK8
…
LEC.9
东南大学自动化学院
连续 ARQ 协议的工作原理
A
DATA0 DATA1 DATA2?? DATA3 DATA4 DATA5 重传 DATA2 重传 DATA3 重传 DATA4 重传 DATA5
B ACK1 确认 DATA0
停止等待协议中数据帧 和确认帧的发送时间关系
数据帧的 发送时间 A tf DATA B 传播时延 tp
两个成功发送的 数据帧之间的 tT 最小时间间隔 tout 设置的 重传时间 DATA
ACK
处理时间 tpr 确认帧发送时间 ta 传播时延 tp 处理时间 tpr 时间
东南大学自动化学院
重传时间
东南大学自动化学院
应当注意
仅用循环冗余检验 CRC 差错检测技术只能做到无差错 接受(accept)。 “无差错接受”是指:“凡是接受的帧(即不包括丢弃的 帧),我们都能以非常接近于 1 的概率认为这些帧在传 输过程中没有产生差错”。 也就是说:“凡是接受的帧都没有传输差错”(有差错的 帧就丢弃而不接受)。 要做到“可靠传输”(即发送什么就收到什么)就必须再 加上确认和重传机制。 东南大学自动化学院