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

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

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

CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。

在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是https://www.360docs.net/doc/9c5618327.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

循环冗余校验原理及程序

在远距离数据通信中,为确保高效而无差错地传送数据,必须对数据进行校验即差错控制。循环冗余校验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)的阶数,阶数越高,效果

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

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

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

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

循环冗余校验码原理

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

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除

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

“数据错误,循环冗余检查”解决方法 从光盘、硬盘或其他介质复制文件时有时会出现“无法复制:数据错误(循环冗余检查)”的错误,导致某些文件不能复制。这时因为: 循环冗余检查(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 (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 )

循环冗余校验检错方案

循环冗余校验检错方案 《深入理解计算机网络》第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)的基本原理

循环冗余校验码(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

循环冗余校验码

一、奇偶校验码 奇偶校验可描述为:给每一个码字加一个校验位,用它来构成奇性或偶性校验。因此,若有一个码元是错的,就可以分辨得出,因为奇偶校验将成为奇性。奇偶校验编码通过增加一位校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。因为其利用的是编码中1的个数的奇偶性作为依据,所以不能发现偶数位错误。 一个二进制码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“”有五个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。 再以数字0的七位ASCII码(0110000)为例,如果传送后右边第一位出错,0变成1。接收端还认为是一个合法的代码0110001(数字1的ASCII码)。若在最左边加一位奇校验位,编码变为,如果传送后右边第一位出错,则变成,1的个数变成偶数,就不是合法的奇校验码了。但若有两位(假设是第1、2位)出错就变成,1的个数为5,还是奇数。接收端还认为是一个合法的代码(数字3的ASCII码)。所以奇偶校验不能发现。 奇偶校验位可由硬件电路(异或门)或软件产生: 偶校验位 a n=a0⊕a1⊕a2⊕…⊕a n-1,奇校验位 a n=NOT(a0⊕a1⊕a2⊕…⊕a n-1)。 在一个典型系统里,在传输以前,由奇偶发生器把奇偶校验位加到每个字中。原有信息中的数字在接收机中被检测,如果没有出现正确的奇、偶性,这个信息标定为错误的,这个系统将把错误的字抛掉或者请求重发。 在实际工作中还经常采用纵横都加校验奇偶校验位的编码系统--分组奇偶校验码。 现在考虑一个系统,它传输若干个长度为m位的信息。如果把这些信息都编成每组n个信息的分组,则在这些不同的信息间,也如对单个信息一样,能够作奇偶校验。图4中n个信息的一个分组排列成矩形式样,并以横向奇偶(HP)及纵向奇偶(VP)的形式编出奇偶校验位。 m位数字横向奇偶位 n 个 码 字 纵向奇偶 位

循环冗余校验

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 阶的二进制多项式,由 1 0 2 2 1 1 a x a x x a x a n n n + ? + ??? + + ? ? ?。如一个8 位二进制数10110101 可以表示为: 1x7 + 0x6 +1x5 +1x4 + 0x3 +1x2 + 0x +1。多项式乘除法运算过程与普通代数多项式的乘除法相 同。多项式的加减法运算以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)= x4 + x +1。采用16 位CRC 校验,可以保证在1014 bit 码元中只含有一位未被检测出的错误[2]。在IBM 的同步数据链

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

实验十三循环冗余校验(CRC)模块设计 一、实验目的 1、学习使用FPGA器件完成数据传输中的差错控制; 2、了解循环冗余校验CRC模块的工作原理 3、应用VHDL语言设计循环冗余校验CRC模块,实现在数字传输中的校验和纠错功能。 3、学习实验环节的设计与实现。 二、实验仪器 计算机、Max+plusII或QuartusII软件、EDA试验箱、示波器。 三、实验内容 原理:CRC即Cyclic Redundancy Check 循环冗余校验,是一种数字通信中的信道编码技术。经过CRC方式编码的串行发送序列码,可称为CRC码,共由两部分构成:k位有效信息数据和r位CRC校验码。其中r位CRC校验码是通过k 位有效信息序列被一个事先选择的r+1位“生成多项式”相“除”后得到的(r位余数即是CRC校验码),这里的除法是“模2运算”。CRC校验码一般在有效信息发送时产生,拼接在有效信息后被发送;在接收端,CRC码用同样的生成多项式相除,除尽表示无误,弃掉r位CRC校验码,接收有效信息;反之,则表示传输出错,纠错或请求重发。本设计完成12位信息加5位CRC校验码发送、接收,由两个模块构成,CRC校验生成模块(发送)和CRC校验检错模块(接收),采用输入、输出都为并行的CRC校验生成方式。图12.1的CRC模块端口数据说明如下: sdata:12位的待发送信息;datald:sdata的装载信号; error:误码警告信号;datafini:数据接收校验完成; rdata:接收模块(检错模块)接收的12位有效信息数据;clk:时钟信号;datacrc:附加上5位CRC校验码的17位CRC码,在生成模块被发送,在接收模块被接收; hsend、hrecv:生成、检错模块的握手信号,协调相互之间关系; 实验要求: 1、设计CRC校验生成模块,采用的CRC生成多项式为X5+X4+X2+1,校验码为5位,有效信息数据为12位。 2、设计CRC校验查错模块,并将CRC校验生成模块和CRC校验查错模块连接在一起,协调工作。 3、估计实验使用的硬件资源,自行设定测试方法和测试内容。 4、自行设定测试方案和测试步骤。 5、自行设定实验步骤和设计纪录方式,完成实验报告。

循环冗余校验

循环冗余校验码 在串行传送(磁盘、通讯)中,广泛采用循环冗余校验码(CRC)。CRC也是给信息码加上几位校验码,以增加整个编码系统的码距和查错纠错能力。 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)=x4+x3+x+1,可转换为二进制数码11011。 而发送信息位1111,可转换为数据多项式为C(x)=x3+x2+x+1。 2、生成多项式 是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。 在发送方,利用生成多项式对信息多项式做模2除生成校验码。在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。 应满足以下条件: a、生成多项式的最高位和最低位必须为1。 b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。

循环冗余校验(CRC)算法的实现

武汉理工大学 计算机网络课程论文 题目循环冗余校验(CRC)算法的实现作者 学院信息工程学院 专业电子信息工程 学号 指导 教师 二〇一六年四月十四日

武汉理工大学信息工程学院课程论文诚信声明 本人声明:所呈交的课程论文,是本人在指导老师的指导下,独立开展工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本课程论文不含任何其他个人或集体已经发表或创作过的作品成果。对本文工作做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 本科课程论文作者签名: 二○一六年四月十四日

课程论文成绩评定表 质量评价指标(在相应栏目打√) 论文与设计评价质量评价项目 按对应项目打分 工作量和态度(10分) 分析问题能力(10分) 解决问题能力(10分) 内容完整层次分明(10分) 设计、实验正确性(10分) 书写规范(10分) 流程图或拓扑图(10分) 论证充分(10分) 测试结果情况(10分) 总体评价(10分) 评定成绩(100分制) 指导教师签名 年月日

目录 一、选题背景 (1) 1.设计要求 (1) 2.循环冗余CRC简介 (1) 3.应解决的主要问题 (2) 二、方案论证 (2) 1.循环冗余检验的原理 (2) 2.方案的选择及特点 (4) 三、过程论述 (8) 1.第一部分 (8) 2.第二部分 (9) 3.第三部分 (11) 4.第四部分 (11) 四、结果分析 (12) 1.CRC算法的实现 (12) 2.突变的产生和校验结果 (13) 3.无法检错的实例 (14) 五、总结 (15) 心得体会 (17) 参考文献 (17) 附件一:程序源代码 (18) 一、

相关主题
相关文档
最新文档