文档视界 最新最全的文档下载
当前位置:文档视界 › 循环冗余校验

循环冗余校验

循环冗余校验
循环冗余校验

循环冗余校验( CRC)模块设计

1.实验原理

循环冗余校验[1 ] (cyclic redundancy check , CRC) 是一种检错能力很强,且使用非常广泛的

数据传输差错检测方法. 循环冗余校验采用在要发送的有用码后边添加一个称为循环冗余校

验码(简称CRC 码) 的比特串来实现数据传输差错检测. 这种码的编码和解码设备都不太复杂,且检、纠错的能力较强,目前在理论上和实践上都有了较大的发展. 循环码除了具有线性码的一般性质外,还具有循环性,即循环码中任一码组循环一位(将最右端的码元移至左端,或反之) 以后,仍为该码中的一个码组.

循环冗余校验由分组线性码的分支而来[2 ] ,它建立在严格的代数理论基础上,利用除法和

余数的原理来进行错误侦测(error detecting) . 在除法运算中,如果用被除数除以除数后所得的余数不为零,那么从被除数中减去余数后,所得结果可被除数除尽,循环冗余校验正是基于这一思想. 采用CRC 校验时,发送方和接收方事先约定一个生成多项式G( X) , 该生成多项式作为除数多项式,将要发送的数据比特序列作为一个多项式F( X) 的系数,该多项式为被除多项式,被除多项式F( X) 与除数多项式的余数多项式R ( X) 的系数为循环冗余校验码(CRC 码) , 它添加在要检测的二进制位串后边,形成发送码. 数据链路将发送码发送到接收方后,接收方同样将其看成是一个多项式的系数序列,并用相同的生成多项式来除该多项式. 若余数为零, 则传输无差错;否则,传输有差错.

2 循环冗余校验的实现

2.1 循环冗余校验的内部结构

考虑到循环冗余校验码的功能,本功能模块由3 部分组成:m 序列发生器,它随机产生一数据流供以后的校验码产生和接收检验;数据发送模块,它负责发送数据并加冗余进程;数据接收模块,它负责接收并验证数据是否正确. 如图3 所示

2.2 CRC 功能的实现

用Verilog HDL 语言完成电路描述之后,本文采用MAX + PLUS Ⅱ[3 ]工具对程序进行了功能

和时序仿真. 仿真波形如图4 所示

图4 CRC 的仿真波形

由仿真波形可知,由于发送有效码要经过15 个周期才能形成,因此第15 个周期之前的mxl 寄存器中的数据在每个周期后是变化的. CRC 码为00111. 由图4 的结果表明,基于Verilog的循环冗余校验(CRC) 是完全正确的。

2.3 完整的Verilog HDL 程序

/ / m 序列发生器,11 位信息加5 位校验码发送,接收进程完成译码.

/ / CRC 码生成多项式是X5 + X4 + X2 + 1.

module crc5 (clk ,start ,tail - crc ,seda ,recda ,chaerr) ;

input clk ;

input start ;/ / 起始信号

output [4 :0 ] tail - crc ;/ / 冗余码

output [10 :0 ] seda ,recda ;/ / 显示发送、接收码

output chaerr ;/ / 信道错误指示

reg chaerr ;

reg[4 :0 ] tail - crc ;

reg[10 :0 ]seda ,recda ;

reg[10 :0 ] sedareg ;/ / m序列产生的有用码暂存变量

reg[10 :0 ]buf1 ,buf2 ;/ / 存放发送、接收有用信号的变量

reg[15 :0 ] mxl ;/ / m序列暂存变量

reg[15 :0 ] sema ,rema ;/ / 存放发送、接收码变量

reg fx ,fy ,fa ,fb ;/ / 三进程之间的握手变量

always @(posedge clk[3 ]) / / m 序列发生器模块

begin

if ( ! start) mxl = 16’h0000 ;

else

begin :mxlenge

if ( ! fx)

fy = 0 ;

mxl [15 ] = mxl [14 ]~^mxl [11 ] [4 ] ;

mxl = mxl > > 1 ;

end

if ( ! mxl [15 :11 ])

begin

sedareg = mxl [10 :0 ] ;

fy = 1 ;

end

end

always @(posedge clk) / / crc5 码产生模块

begin :encrc

if (fy) fx = 1 ;

else

begin

fx = 0 ;

fb = 1 ;

seda = sedareg ;

buf1 = sedareg ;

if (buf1[10 ]) buf1[10 :5 ] = buf1[10 :5 ]^6’b110101[5 ] ; if (buf1[9 ]) buf1[9 :4 ] = buf1[9 :4 ]^6’b110101 ;

if (buf1[8 ]) buf1[8 :3 ] = buf1[8 :3 ]^6’b110101 ;

if (buf1[7 ]) buf1[7 :2 ] = buf1[7 :2 ]^6’b110101 ;

if (buf1[6 ]) buf1[6 :1 ] = buf1[6 :1 ]^6’b110101 ;

if (buf1[5 ]) buf1[5 :0 ] = buf1[5 :0 ]^6’b110101 ;

tail - crc = buf1[4 :0 ] ;

sema = {buf1 ,tail - crc} ;

if ( ! fa)

fb = 0 ;

end

end

always @(negedge clk) / / 接收端CRC5 校验模块begin

if (fb) fa = 1 ;

else

begin

rema = sema ;

recda = rema[15 :5 ] ;

buf2 = rema[15 :5 ] ;

if (buf2[10 ]) buf2[10 :5 ] = buf2[10 :5 ]^6’b110101 ; if (buf2[9 ]) buf2[9 :4 ] = buf2[9 :4 ]^6’b110101 ;

if (buf2[8 ]) buf2[8 :3 ] = buf2[8 :3 ]^6’b110101 ;

if (buf2[7 ]) buf2[7 :2 ] = buf2[7 :2 ]^6’b110101 ;

if (buf2[6 ]) buf2[6 :1 ] = buf2[6 :1 ]^6’b110101 ;

if (buf2[5 ]) buf2[5 :0 ] = buf2[5 :0 ]^6’b110101 ;

if (buf2[4 :0 ]^tail - crc) recda = 0 ;

else

begin

recda = rema[15 :5 ] ; chaerr = 0 ;

end

end

fa = 0 ;

end

endmodule

循环冗余校验原理及程序

在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。循环冗余校验CRC(Cyclic Redundancy Check)是对一个传送数据块进行校验,是一种高效的差错控制方法。 1、循环冗余校验码原理 CRC 校验采用多项式编码方法,如一个8 位二进制数(B7B6B5B4B3B2B1B0)可以用7 阶二进制码多项式B7X7+B6X6+B5X5+B4X4+B3X3+B2X2+B1X1+B0X0表示。 例如11000001 可表示为 1X7+1X6+0X5+0X4+0X3+0X2+0X1+0X0 一般说,n 位二进制数可用(n-1)阶多项式表示。它把要发送的数据位串看成是系数只能为“1”或“0”的多项式。一个n 位的数据块可以看成是从Xn-1到X0的n 项多项式的系数 序列,位于数据块左边的最高位是X n-1项的系数,次高位是X n-2项的系数,依此类推,位 于数据块右边的最低位是X0项的系数,这个多项式的阶数为n-1。 多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2 为模,加减时不进、错位,如同逻辑异或运算。 采用CRC 校验时,发送方和接收方事先约定一个生成多项式G(X),并且G(X)的最高项和最低项的系数必须为1。设m 位数据块的多项式为M(X),生成多项式G(X)的阶数必需 比M(X)的阶数低。CRC 校验码的检错原理是:发送方先为数据块生成CRC 校验码,使这 个CRC 校验码的多项式能被G(X)除尽,实际发送此CRC 校验码;接收方用收到的CRC 校 验码除以G(X),如果能除尽,表明传输正确,否则,表示有传输错误,请求重发。 生成数据块的CRC 校验码的方法是: (1) 设G(X)为r 阶,在数据块末尾添加r 个0,使数据块为m+r 位,则相应的多项式 为XrM(X); (2) 以2 为模,用对应于G(X)的位串去除对应于XrM(X)的位串,求得余数位串; (3) 以2 为模,从对应于XrM(X)的位串中减去余数位串,结果就是为数据块生成的带足够校验信息的CRC 校验码位串。 例如,设要发送的数据为1101011011,G(X)=X4+X+1,则首先在发送数据块的末尾加4 个0,得到11010110110000,然后用G(X)的位串10011 去除,再用11010110110000 减去余 数位串1110,得到的即为CRC 位串11010110111110,将对应多项式称为T(X),显然,T(X) 能被G(X)除尽。这样,一旦接收到的CRC 位串不能被同样的G(X)的位串除尽,那么一定 有传输错误。 当使用CRC校验码进行差错控制时,除了为G(X)的整数倍的差错多项式不能被检测外,其它差错均能被查出。CRC 校验码的差错控制效果取决于G(X)的阶数,阶数越高,效果

CRC校验码原理

CRC校验码 CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。 目录 详细介绍 代数学的一般性运算 详细介绍 循环冗余校验码(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)*2的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式G(x)得到的余数就是校验码。 几个基本概念 1、多项式与二进制数码 多项式和二进制数有直接对应关系:x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。可以看出:x的最高幂次为R,转换成对应的二进制数有R+1位。 多项式包括生成多项式G(x)和信息多项式C(x)。 如生成多项式为G(x)=x4+x3+x+1,可转换为二进制数码11011。 而发送信息位1111,可转换为数据多项式为C(x)=x3+x2+x+1。 2、生成多项式 是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。

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)*2的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*2的R次方除以生成多项式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码)任何一位发生错误时,被生成多项式做除后应该使余数不为0。 c、不同位发生错误时,应该使余数不同。 d、对余数继续做除,应使余数循环。 3 CRC码的生成步骤 1、将x的最高次幂为R的生成多项式G(x)转换成对应的R+1位二进制数。 2、将信息码左移R位,相当与对应的信息多项式C(x)*2的R次方。 3、用生成多项式(二进制数)对信息码做除,得到R位的余数。 4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。 【例】假设使用的生成多项式是G(x)=x^3+x+1。4位的原始报文为1010,求编码后的报文。 解: 1、将生成多项式G(x)=x^3+x+1转换成对应的二进制除数1011。 2、此题生成多项式有4位(R+1),要把原始报文C(x)左移3(R)位变成1010000 3、用生成多项式对应的二进制数对左移3位后的原始报文进行模2除,相当于按位异或: 1010000

循环冗余校验码原理

1、循环冗余校验码原理 CRC 校验采用多项式编码方法,如一个8 位二进制数(B7B6B5B4B3B2B1B0)可以用7 阶二进制码多项式B7X7+B6X6+B5X5+B4X4+B3X3+B2X2+B1X1+B0X0表示。 例如11000001 可表示为 1X7+1X6+0X5+0X4+0X3+0X2+0X1+0X0 一般说,n 位二进制数可用(n-1)阶多项式表示。它把要发送的数据位串看成是系数只能为“1”或“0”的多项式。一个n 位的数据块可以看成是从Xn-1到X0的n 项多项式的系数 序列,位于数据块左边的最高位是X n-1项的系数,次高位是X n-2项的系数,依此类推,位 于数据块右边的最低位是X0项的系数,这个多项式的阶数为n-1。 多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2 为模,加减时不进、错位,如同逻辑异或运算。 采用CRC 校验时,发送方和接收方事先约定一个生成多项式G(X),并且G(X)的最高项和最低项的系数必须为1。设m 位数据块的多项式为M(X),生成多项式G(X)的阶数必需 比M(X)的阶数低。CRC 校验码的检错原理是:发送方先为数据块生成CRC 校验码,使这 个CRC 校验码的多项式能被G(X)除尽,实际发送此CRC 校验码;接收方用收到的CRC 校 验码除以G(X),如果能除尽,表明传输正确,否则,表示有传输错误,请求重发。 生成数据块的CRC 校验码的方法是: (1) 设G(X)为r 阶,在数据块末尾添加r 个0,使数据块为m+r 位,则相应的多项式 为XrM(X); (2) 以2 为模,用对应于G(X)的位串去除对应于XrM(X)的位串,求得余数位串; (3) 以2 为模,从对应于XrM(X)的位串中减去余数位串,结果就是为数据块生成的带足够校验信息的CRC 校验码位串。 例如,设要发送的数据为1101011011,G(X)=X4+X+1,则首先在发送数据块的末尾加4 个0,得到11010110110000,然后用G(X)的位串10011 去除,再用11010110110000 减去余 数位串1110,得到的即为CRC 位串11010110111110,将对应多项式称为T(X),显然,T(X) 能被G(X)除尽。这样,一旦接收到的CRC 位串不能被同样的G(X)的位串除尽,那么一定 有传输错误。 当使用CRC校验码进行差错控制时,除了为G(X)的整数倍的差错多项式不能被检测外,其它差错均能被查出。CRC 校验码的差错控制效果取决于G(X)的阶数,阶数越高,效果越 好。目前,常用的有两种生成多项式G(X)的方法,分别是: CRC-16 X16+X15+X2+1 CCITT X16+X12+X5+1

拷贝数据时出现“数据错误_循环冗余检查”的解决方法

拷贝数据时出现“数据错误循环冗余检查”的解决方法 问题描述:将硬盘中的文件数据复制到可移动磁盘,如U盘等设备中时,系统提示“无法复制:数据错误循环冗余检查”,导致无法复制文件,如下图所示; 数据错误循环冗余检查的解决办法: 第一步:如果是从硬盘的某一个盘符复制到另一个盘符时出错;打开“我的电脑”——>在复制文件出错的盘符上(如C盘)点击鼠标右键——>选择“属性”——>弹出“本地磁盘(X:)属性”窗口,切换到“工具”选项卡中——>点击第一个项目中的“开始检查(C)”——>弹出窗口中,勾选中“自动修复文件系统错误(A)”——>点击“开始”——>此时如果系统提示“磁盘检查不能执行,因为磁盘检查实用程序需要独占访问磁盘上的一些Windows文件...”,直接点击“是”——>然后重新启动计算机后,将自动进行磁盘错误检查并且修复出错的文件;

第二步:对出错的磁盘盘符进行“磁盘碎片整理”;点击“开始”菜单——>选择“所有程序”——>鼠标指向“附件”——>再指向“系统工具”——>单击“磁盘碎片整理程序”——>在“卷”下方选中出错的盘符,点击“碎片整理”——>耐心等待磁盘碎片整理结束,重新启动计算机即可; 第三步:检查磁盘格式是否不统一,如源文件所在盘符为NTFS,但需要保存复制的磁盘格式为FAT32,这种情况下也可能导致“数据错误循环冗余检查”无法复制的情况;打开“我的电脑”——>鼠标右键点击磁盘——>选择“属性”——>在“属性”窗口中部就能查看到该磁盘是哪种格式的——>如果两个磁盘不统一,将FAT32格式的磁盘格式转换为NTFS即可;

第四步:如果是复制文件到U盘或其他可移动磁盘时出错,采用上述步骤无效时,建议优先使用杀毒软件对U盘进行杀毒,如果杀毒也无法解决“数据错误循环冗余检查”的问题,就需要对U盘等可移动磁盘进行格式化了;先将U盘中的所有数据备份出来,然后鼠标右键点击U盘的盘符,选择“格式化”——>勾选中“快速格式化”——>点击“开始”——>直至格式化完毕后,在进行复制操作; 总结:U盘等可移动磁盘导致“数据错误循环冗余检查”的错误提示时,优先使用杀毒软件进行杀毒,很有可能是病毒木马感染导致的。

CAN总线中循环冗余校验码的原理及其电路实现

摘要:在can网络中传输摄文时,噪声干扰或传输中断等因素往往使接收端收到的报文出现错码。为了及时可靠地把报文传输给对方并有效地检测错误,需要采用差错控制。详细介绍了can总线中循环冗余校验码的差错控制原理及其实现方法。关键词:循环冗余校验差错控制报文在can系统中为保证报文传输的正确性,需要对通信过程进行差错控制。目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。常用的检错码两类:奇偶校验码和循环冗余校验码。奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。下面介绍can网络中循环冗余校验码(即crc码)的原理和实现方法。 1 crc码检错的工作原理crc码检错是将被处理报文的比特序列当作一个二进制多项式a(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为crc校验码附加到原始的报文上,并一起发给接收方。接收方用同样的g(x)去除收到的报文b(x),如果余数等于p(x),则传输无误(此时a(x)和b(x)相同);否则传输过程中出错,由发送端重发,重新开始crc校验,直到无误为止。上述校验过程中有几点需注意:①在进行crc计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行crc计算前先将发送报文所表示的多项式a(x)乘以xn,其中n为生成多项式g(x)的最高幂值。对二进制乘法来讲,a(x)·xn就是将a(x)左移n 位,用来存放余数p(x),所以实际发送的报文就变为a(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。图1为crc校验的工作过程。目前已经有多种生成多项式被列入国际标准中,如:crc-4、crc-12、crc-16、ccitt-16、crc-32等。can总线中采用的生成多项式为g(x)=x15+x14+x10+x8+x7+x4+x3+1。可以看出,canu叫线中的crc校验采用的多项式能够校验七级,比一般crc校验(crc-4、crc-12、crc-16等)的级数(二~五级)要高许多,因而它的检错能力很强,误判率极低,成为提高数据传输质量的有效检错手段。图 2 产生crc校验码的硬件电路 2 crc码的电路实现2.1 硬件电路的特点在can总线中为了产生crc码,硬件电路除了具有复位和时钟信号以外,还需要以下两个控制信号的参与:①填充位解除信号destuff,它的有效逻辑值是1;②crc检验的使能信号enable,有效逻辑也为1。该硬件电路的特点是采用选择器和反相器代替传统设计中用的异或门,既实现了比较功能,又降低了生产成本,同时也为工程师们提供了一种新的设计思路。2.2 硬件电路图图2即为实现crc码的硬件电路图。图中需要说明的几点如下:①使能信号和填充位解除信号省略;②crcnxt代表的逻辑值为输入报文序列和crc寄存器的最高位异或的结果;③标号0~14所指示的为15位crc寄存器,上升沿触发;④标号1~6所指示的为选择器和反相器的组合逻辑,实现异或功能,该选择器的逻辑功能为y=ab+ac,具体结构如图3所示。2. 3 电路工作过程从以上分析可知:①当enable=0时,crc清0;②当enable=1、destuff=1时,进行正常crc计算;③当enable=1而destuff=0时,正在解除填充时,数据暂停传送。在各个控制信号均有效时,输入报文的每一位都是和crc寄存器的最高位相异和后移入最低位,同时寄存器的第13、9、7、6、3、2位均和其最高位异或,结果分别左移一位;其它未进行异或操作的寄存器位值也分别左移一位,直到报文的每一位都移入crc寄存器为止,此时寄存器中的值取为计算得到的crc码。如果报文的比特序列长度为16,则需要左移16次才能对报文的每一位均进行处理。如果以ck表示crc寄存器的第k位位值、ck'表示移位后的第k位位值(k=0,1,2,3……15),则移位规律见表1。 表 1 移位规律表c14'=c13^crcnxtc13'=12c12'=c11c11'=c10c10'=c9^crcnxtc9'=c8c8'=c7^crcnxtc7'=c6^cr cnxtc6'=c5c5'=c4c4'=c3^crcnxtc3'=c2^crcnxtc2'=c1c1'=c0c0'=crcnxt^datain 3 crc校

循环冗余校验码(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码)1010011 1、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。 2、将信息码左移R位,相当与对应的信息多项式C(x)*2R 3、用生成多项式(二进制数)对信息码做模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)位变成1010000 3、用生成多项式对应的二进制数对左移4位后的原始报文进行模2除

循环冗余码的生成和验证

一、题目 编写一个循环冗余码的生成和验证程序,并实现停等式ARQ,编程实现如何生成CRC码,传输,加入噪声,检错反馈,检测验证,信息重发的过程 二、概要设计 CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g (x),将最后的余数作为CRC校验码。其实现步骤如下: 设待发送的数据块是m位的二进制多项式t(x),生成多项式为r阶的g(x)。在数据块的末尾添加r个0,数据块的长度增加到m+r位,对应的二进制多项式为。用生成多项式g(x)去除,求得余数为阶数为r-1的二进制多项式y(x)。此二进制多项式y(x)就是t(x)经过生成多项式g(x)编码的CRC校验码。用以模2的方式减去y(x),得到二进制多项式。就是包含了CRC校验码的待发送字符串。 CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g (x)除尽的m+r位二进制多项式,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。CRC码可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。 三、详细设计 如果生成码是10011 编码: //reg 是一个5 bits 的寄存器 把reg 中的值置0. 把原始的数据后添加r 个0. While (数据未处理完) Begin If (reg 首位是1) reg = reg XOR 0011. 把reg 中的值左移一位,读入一个新的数据并置于register 的0 bit 的位置。 End reg 的后四位就是我们所要求的余数。 解码验错: //reg 是一个5 bits 的寄存器 把reg 中的值置0. 把循环冗余码作为原始的数据 While (数据未处理完)

循环冗余检验CRC 算法原理

CRC的校验原理 随着数据采集系统的功能日益强大,以及微型计算机的普及,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。特别是在大规模高精度数据采集系统中,对数据进行分析和计算将占用很大一部分单片机的资源,可以将采集到的数据通过串行通讯方式传送给PC机,由PC机来完成数据的处理工作。但是由于传输距离、现场状况等诸多可能出现的因素的影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,在数据的接收端必须进行差错校验。虽然差错校验也可以完全由硬件来承担,但由于单片机和PC都具有很强的软件编程能力,这就为实施软件的差错校验提供了前提条件,而软件的差错校验有经济实用并且不增加硬件开销的优点。 1 、CRC法的原理 传统的差错检验法有:奇偶校验法,校验和法,行列冗余校验法等。这些方法都是在数据后面加一定数量的冗余位同时发送出去,例如在单片机的通讯方式2和3中,TB8就可以作为奇偶校验位同数据一起发送出去,在数据的接收端通过对数据信息进行比较、判别或简单的求和运算,然后将所得和接收到的冗余位进行比较,若相等就认为数据接收正确,否则就认为数据传送过程中出现错误。但是冗余位只能反映数据行或列的奇偶情况,这类检验方法对数据行或列的偶数个错误不敏感,漏判的概率很高。因此,此种方法的可靠性就差。 循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CR C值不同,则说明数据通讯出现错误。由于这种方法取得校验码的方式具有很强的信息覆盖能力,所以它是一种效率极高的错误校验法。错误的概率几乎为零。在很多的仪器设备中都采用这种冗余校验的通讯规约。 根据应用环境与习惯的不同,CRC又可分为以下几种标准: ①CRC-12码; ②CRC-16码; ③CRC-CCITT码; ④CRC-32码。 CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则是用来传送8-b it字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。 CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。

CAN总线中循环冗余校验码的原理

CAN总线中循环冗余校验码的原理 在CAN系统中为保证报文传输的正确性,需要对通信过程进行差错控制。目前常用的方法是反馈重发,即一旦收到接收端发出的出错信息,发送端便自动重发,此时的差错控制只需要检错功能。常用的检错码有两类:奇偶校验码和循环冗余校验码。奇偶校验码是一种最常见的检错码,其实现方法简单,但检错能力较差;循环冗余校验码的编码也很简单且误判率低,所以在通信系统中获得了广泛的应用。下面介绍CAN网络中循环冗余校验码(即CRC码)的原理和实现方法。 1CRC码检错的工作原理 CRC码检错是将被处理报文的比特序列当作一个二进制多项式A(x)的系数,该系数除以发送方和接收方预先约定好的生成多项式g(x)后,将求得的余数p(x)作为CRC校验码附加到原始的报文上,并一起发给接收方。接收方用同样的g(x)去除收到的报文B(x),如果余数等于p(x),则传输无误(此时A(x)和B(x)相同);否则传输过程中出错,由发送端重发,重新开始CRC校验,直到无误为止。 上述校验过程中有几点需注意:①在进行CRC计算时,采用二进制(模2)运算法,即加法不进位,减法不借位,其本质就是两个操作数进行逻辑异或运算;②在进行CRC计算前先将发送报文所表示的多项式A(x)乘以xn,其中n为生成多项式g(x)的最高幂值。对二进制乘法来讲,A(x)·xn 就是将A(x)左移n位,用来存放余数(x),所以实际发送的报文就变为A(x)·xn+p(x);③生成多项式g(x)的首位和最后一位的系数必须为1。 图1为CRC校验的工作过程。 目前已经有多种生成多项式被列入国际标准中,如:CRC-4、CRC-12、CRC-16、CCITT-16、CRC-32等。CAN总线中采

“数据错误,循环冗余检查”解决方法

“数据错误,循环冗余检查”解决方法 从光盘、硬盘或其他介质复制文件时有时会出现“无法复制:数据错误(循环冗余检查)”的错误,导致某些文件不能复制。这时因为: 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。若CRC校验不通过,系统重复向硬盘复制数据,陷入死循环,导致复制过程无法完成。 注意到在上述过程中实际已有一部分数据复制到硬盘,只是碰到某些数据CRC校验不通过时,Windows的复制命令无法跳过这些数据继续执行。而当操作无法完成后,系统会把已经复制到硬盘上的数据删除,这样导致复制完全失败。如果在复制时能跳过错误数据,这个问题就能得到解决。 解决方案一:重启电脑,不要运行任何软件,重试复制1-3次,若无法解决请看方案二。 解决方案二:尝试使用复制工具,例如FastCopy等。若问题依旧,请看第三条。解决方案三:(95%解决问题!) 思路:利用下载工具(迅雷,FlashGet等)的“断点续传”和“多进程多文件下载”特性。 操作步骤:假设无法复制的文件位于X:\光盘\123.RM ,需要复制到D:\资料 1.用操作系统安装光盘或通过网络下载安装IIS(Internet信息服务),版本随意,XP下光盘安装为IIS5.1. 2.建立自己的站点,虚拟目录名称假设为"my" ,路径设置为X:\光盘\ 3.将“http://localhost/my/123.rm” 作为URL复制进迅雷(FlashGet)的“新建”下载任务的URL文本框。 选择要下载到的目录,这里假设为D:\资料,点击“确定”开始下载。 这样除了错误数据,其余均被下载到硬盘。影音文件可以正常使用。

CRC循环冗余校验原理

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)=x R m(x)+r(x); 其中: m(x)为K次信息多项式, r(x)为R-1次校验多项式, g(x)称为生成多项式: g(x)=g 0+g 1 x+ g 2 x2+...+g (R-1) x(R-1)+g R x R 发送方通过指定的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)的基本原理 循环冗余校验码(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 1011 7 4 3 x3+x2+1 1101 7 3 4 x4+x3+x2+1 11101 7 3 4 x4+x2+x+1 10111

循环冗余校验 CRC的算法分析和程序实现

循环冗余校验 CRC 的算法分析和程序实现 西南交通大学计算机与通信工程学院 刘东 摘要 通信的目的是要把信息及时可靠地传送给对方,因此要求一个通信系统传输消息必须可靠与快速,在数字通信系统中可靠与快速往往是一对矛盾。为了解决可靠性,通信系统都采用了差错控制。本文详细介绍了循环冗余校验CRC (Cyclic Redundancy Check )的差错控制原理及其算法实现。 关键字 通信 循环冗余校验 CRC-32 CRC-16 CRC-4 概述 在数字通信系统中可靠与快速往往是一对矛盾。若要求快速,则必然使得每个数据码元所占地时间缩短、波形变窄、能量减少,从而在受到干扰后产生错误地可能性增加,传送信息地可靠性下降。若是要求可靠,则使得传送消息地速率变慢。因此,如何合理地解决可靠性也速度这一对矛盾,是正确设计一个通信系统地关键问题之一。为保证传输过程的正确性,需要对通信过程进行差错控制。差错控制最常用的方法是自动请求重发方式(ARQ )、向前纠错方式(FEC )和混合纠错(HEC )。在传输过程误码率比较低时,用FEC 方式比较理想。在传输过程误码率较高时,采用FEC 容易出现“乱纠”现象。HEC 方式则式ARQ 和FEC 的结合。在许多数字通信中,广泛采用ARQ 方式,此时的差错控制只需要检错功能。实现检错功能的差错控制方法很多,传统的有:奇偶校验、校验和检测、重复码校验、恒比码校验、行列冗余码校验等,这些方法都是增加数据的冗余量,将校验码和数据一起发送到接受端。接受端对接受到的数据进行相同校验,再将得到的校验码和接受到的校验码比较,如果二者一致则认为传输正确。但这些方法都有各自的缺点,误判的概率比较高。 循环冗余校验CRC (Cyclic Redundancy Check )是由分组线性码的分支而来,其主要应用是二元码组。编码简单且误判概率很低,在通信系统中得到了广泛的应用。下面重点介绍了CRC 校验的原理及其 算法实现。 一、循环冗余校验码(CRC ) CRC 校验采用多项式编码方法。被处理的数据块可以看作是一个n 阶的二进制多项式,由012211a x a x a x a x n n n ++???++----。如一个8位二进制数10110101可以表示为:10101101234567+++++++x x x x x x x 。多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,和逻辑异或运算一致。 采用CRC 校验时,发送方和接收方用同一个生成多项式g (x ),并且g (x )的首位和最后一位的系数必须为1。CRC 的处理方法是:发送方以g (x )去除t (x ),得到余数作为CRC 校验码。校验时,以计算的校正结果是否为0为据,判断数据帧是否出错。 CRC 校验可以100%地检测出所有奇数个随机错误和长度小于等于k (k 为g (x )的阶数)的突发错误。所以CRC 的生成多项式的阶数越高,那么误判的概率就越小。CCITT 建议:2048 kbit/s 的PCM 基群设备采用CRC-4方案,使用的CRC 校验码生成多项式g (x )=14++x x 。采用16位CRC 校验,可以保证在1410 bit 码元中只含有一位未被检测出的错误]2[。在IBM 的同步数据链 路控制规程SDLC 的帧校验序列FCS 中,使用CRC-16,其生成多项式g (x )=1 21516+++x x x ; 而在CCITT 推荐的高级数据链路控制规程HDLC 的帧校验序列FCS 中,使用CCITT-16,其生成多项式g (x )=1 51516+++x x x 。CRC-32的生成多项式g (x )

《计算机组成与工作原理》数据校验码—循环冗余校验码(教学设计)

《计算机组成与工作原理》教学设计 第2章计算机的信息表示 2.3 循环冗余校验码 一、学情分析 就当代中职学生的现状来看,普遍存在文化基础知识比较薄弱,对于枯燥无味的理论教学缺乏兴趣和耐心,而如同《计算机组成与工作原理》这样的抽象的理论课程又是计算机专业的必修课程,作为教学要求,学生必须掌握。所以,只是通过普通的教学方式已经无法达到预期效果,需要结合多媒体等信息技术,以及生活案例或既定的任务环节来引导学生学习相关知识。 二、教材分析 1.内容及地位 本教材由刘晓川老师主编,电子工业出版社出版,是专门针对于中等职业学校计算机类专业编写的一本书。同时,《计算机组成与工作原理》也是计算机专业学生必修的课程之一。在近几年的对口招生考试中,《计算机组成与工作原理》也同样是必考内容。而其中的计算机信息表示的章节占有一定的比重。 2.重、难点分析 (1)重点: ①了解循环冗余校验码的定义和特点。 ②掌握循环冗余校验码的编码方式。 ③掌握模2运算的运算方法及特点。 ④掌握对循环冗余校验码的校验。 (2)难点: ①掌握循环冗余校验码的编码方式。 ②掌握模2运算的运算方法及特点。

3.课时安排: 1个课时(45分钟) 三、教学目标 1、知识目标 (1)知道循环冗余校验码的简称。 (2)知道循环冗余校验码的编码过程。 (3)知道模2运算的运算过程及特点。 (4)知道循环冗余校验码的校验方法。 2、能力目标 (1)能够正确掌握模2运算方法。 (2)能够正确掌握循环冗余校验码的运算过程。 (3)能够对于循环冗余校验码进行校验。 3、情感目标 (1)通过相关知识的学习提高自己的知识面。 (2)通过相关的学习提高学习兴趣和耐心,以及钻研知识的毅力。 四、教学策略 1.任务驱动法: 围绕任务展开学习,以任务的完成结果检验和总结学习过程等,改变学生的学习状态,使学生主动建构探究、实践、思考、运用、解决、高智慧的学习。 2.演示法: 通过教师演示、视频演示以及学生演示来帮助同学了解任务流程,从而更好的开展活动。 3.内容引导方法: 在教学及活动的过程中,不是直接指出学生的缺点或错误,而是通过引导的方法,让学生自己意思到问题所在并引导学生去解决问题,从而提高学生发现问题及解决问题

循环冗余校验检错方案

循环冗余校验检错方案 《深入理解计算机网络》第5章数据链路层,本章主要针对广域网中的数据链路层和局域网体系结构中的逻辑链路控制(LLC)子层的功能及相关技术进行全面、深入的介绍。本节为大家介绍循环冗余校验检错方案。 5.3.2 循环冗余校验检错方案 上节介绍的奇偶校验码(PCC)只能校验一位错误,本节要介绍的循环冗余校验码(CRC)的检错能力更强,可以检出多位错误。 1. CRC 校验原理 CRC 校验原理看起来比较复杂、难懂,因为大多数书上基本上都是以二进制的多项式形式来说明的。其实其原理很简单,根本思想就是先在要发送的帧后面附加一个数(这个数就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称为模2 除法的方法)。到达接收端后,再把接收到的新帧除以(同样采用模2 除法)这个选定的除数。因为在发送端发送数据帧之前就已附加了一个数,做了去余处理(也就已经能整除了),所以结果应该没有余数。如果有余数,则表明该帧在传输过程中出现了差错。 说明模2 除法与算术除法类似,但它既不向上位借位,也不比较除数和被除数的相同位数值的大小,只以相同位数进行相除。模2 加法运算为:1+1=0,0+1=1,0+0=0,无进位,也无借位。模2 减法运算为:1-1=0,0-1=1,1-0=1,0-0=0,也无进位,无借位,相当于二进制中的逻辑异或运算。也就是比较后,两者对应位相同则结果为“0”,不同则结果为“1”。如100101 除以1110,结果得到商为11,余数为1,如图5-9a 图所示。再如11×11=101,如图5-9b 图所示。

CRC循环冗余校验码课设

******************* 实践教学 ******************* 兰州理工大学 计算机与通信学院 2014年秋季学期 《计算机通信》课程设计 题目:循环冗余校验码(CRC)的编译码仿真实现专业班级:通信工程(1)班 姓名: 学号: 指导教师: 成绩:

摘要 CRC即循环冗余校验码(Cyclic Redundancy Check)是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 本次课程设计研究了纠错码及循环冗余校验码的原理,以及利用MATLAB对其进行了编码和译码仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而确定传输过程是否出错,得到的结论和理论上是一致的。 关键词:循环冗余校验码;检错码;matlab软件

前言 (1) 第1章循环冗余校验码(CRC)的基本原理 (2) 1.1 循环冗余校验码的基本介绍 (2) 1.2 循环冗余校验码的几个基本概念 (2) 1.3 循环冗余校验码的基本原理 (3) 第2章 MATLAB软件基本介绍 (5) 2.1 MATLAB的介绍 (5) 2.2 MATLAB的组成部分 (5) 2.3 MATLAB的语言特点 (5) 2.4 MATLAB的优势 (6) 第3章循环冗余校验码(CRC)的详细设计 (7) 3.1 CRC循环冗余校验码的编码模块 (7) 3.2 CRC循环冗余校验码的译码模块 (7) 3.3 CRC循环冗余校验码的性能分析 (8) 3.4 CRC循环冗余校验码的生成器和校验器 (8) 3.5 CRC循环冗余校验码的程序流程图 (8) 3.6 运行结果及其分析 (10) 总结 (12) 参考文献 (13) 附录 (13) 致谢 (16)

差错控制方法(奇偶校验码、循环冗余码、海明码)

差错控制方法 差错控制在数据通信过程中能发现或纠正差错,把差错限制在尽可能小的允许范围内的技术和方法。 1.差错的控制方法 最常用的差错控制方法是差错控制编码。数据信息位在向信道发送之前,先按照某种关系附加上一定的冗余位,构成一个码字后再发送,这个过程称为差错控制编码过程。接收端收到该码字后,检查信息位和附加的冗余位之间的关系,以检查传输过程中是否有差错发生,这个过程称为检验过程。 差错控制编码可分为检错码和纠错码。 ①检错码--能自动发现差错的编码; ②纠错码--不仅能发现差错而且能自动纠正差错的编码。 差错控制方法分两类,一类是自动请求重发ARQ,另一类是前向纠错FEC。 在ARQ方式中,当接收端发现差错时,就设法通知发送端重发,直到收到正确的码字为止。ARQ方式只使用检错码。 在FEC方式中,接收端不但能发现差错,而且能确定二进制码元发生错误的位置,从而加以纠正。FEC 方式必须使用纠错码。 2.编码效率 衡量编码性能好坏的一个重要参数是编码效率R,它是码字中信息位所占的比例。编码效率越高,即R 越大,信道中用来传送信息码元的有效利用率就越高。编码效率计算公式为: R=k/n=k/(k+r) 式中k为码字中的信息位位数 r为编码时外加冗余位位数 n为编码后的码字长度 2.5.2 奇偶校验码 奇偶校验码是一种通过增加冗余位使得码字中“1”的个数为奇数或偶数的编码方法,它是一种检错码。 1.垂直奇偶校验的特点及编码规则 发送顺序↑ │ │ │ │ I11 I12 ... I1q┐ │ │ │ ┘ 信 息 位I21 I22 (2) ...... I p1 I p2 ... I pq r1 r2 ... r q冗余位 1)编码规则: 偶校验:r i=I1i+I2i+...+I pi(i=1,2,...,q) 奇校验:r i=I1i+I2i+...+I pi+1(i=1,2,...,q) 式中 p为码字的定长位数 q为码字的个数 垂直奇偶校验的编码效率为R=p/(p+1)。 2)特点:垂直奇偶校验又称纵向奇偶校验,它能检测出每列中所有奇数个错,但检测不出偶数个的错。因而对差错的漏检率接近1/2。

循环冗余校验码CRC算法实现

循环冗余校验码CRC算法实现 CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。 在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是https://www.docsj.com/doc/bb10469650.html,ITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF 等也都用CRC作为检错手段。 CRC的本质是模-2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式来 表示。最常用的CRC码的生成多项式有CRC16,CRC32. 以CRC16为例,16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(既乘以2^16)后,再除以一个多项式,最后所得到的余数既是CRC码,如下式所示,其中K(X)表示n位的二进制序列数,G(X)为多项式, Q(X)为整数,R(X)是余数(既CRC码)。 K(X)>>16=G(x)Q(x)+R(x) 求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,其中CRC-16和CRC-CCITT产生16位的CRC码,而CRC-32则产生的是32位的CRC码接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误,关于其原理这里不再多述。用软件计算CRC码时,接收方可以将接收到的信息码求CRC 码,比较结果和接收到的CRC码是否相同。 CCITT推荐的高级数据链路控制规程HDLC的帧校验序列FCS中,使用CCITT-16即CRC16,其生成多项式为G(x)=x16+x12+x5+1,CRC-32的生成多项式为G(x)=x32+x26+x23+x22+x16+x11+x10+x16+x8+x7+x5+x4+x2+x+1

相关文档
相关文档 最新文档