- 再也不做站长了
-
1:循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。若CRC校验不通过,系统重复向硬盘复制数据,陷入死循环,导致复制过程无法完成。
目录 [隐藏]
1 拷贝时出现循环冗余的解决方法
2 循环冗余检查的工作方法
3 循环冗余码的工作原理
4 循环冗余校验码的特点
5 循环冗余码算法分析
6 CRC码的生成步骤
6.1 循环冗余码(CRC)校验的原理
7 相关知识
7.1 相关条目
7.2 相关链接
[编辑]拷贝时出现循环冗余的解决方法
因为已经知道是CRC的问题,严格的不能放过半个坏块,那我们可以略过这个坏块,但此种方法只是合于丢包仍然可以继续是用的文件,例如影音文件等,不适用于应用程序文件。
一些下载软件将一个完整的文件分为几块然后多线程下载,就可以完整的解决这个问题。
具体解决方法参见:拷贝时出现循环冗余的解决方法
[编辑]循环冗余检查的工作方法
在发送端产生一个循环冗余码,附加在信息位后面一起发送到接收端,接收端收到的信息按发送端形成循环冗余码同样的算法进行校验,若有错,需重发。
[编辑]循环冗余码的工作原理
循环冗余码CRC在发送端编码和接收端校验时,都可以利用事先约定的生成多项式G(X)来得到,K位要发送的信息位可对应于一个(k-1) 次多项式K(X),r位冗余位则对应于一个(r-1)次多项式R(X),由r位冗余位组成的n=k+r位码字则对应于一个(n-1)次多项式T(X)=Xr*K(X)+R(X)。
[编辑]循环冗余校验码的特点
可检测出所有奇数位错;
可检测出所有双比特的错; 可检测出所有小于、等于校验位长度的突发错。
[编辑]循环冗余码算法分析
详细参见:循环冗余码算法分析
[编辑]CRC码的生成步骤
将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。
将信息码左移R位,相当与对应的信息多项式C(x)*2R 用生成多项式(二进制数)对信息码做模2除,得到R位的余数。 将余数拼到信息码左移后空出的位置,得到完整的CRC码。
[编辑]循环冗余码(CRC)校验的原理
物理过程所引起的差错,在某些介质中通常是突发的而不是单个的。网络设计者已经研究出两种基本的策略来处理差错。一种方法是在每一个要发送的数据块上附加足够的冗余信息,使接收方能够推导出已发出的字符应该是什么。另一种方法是只加足够的冗余位,使接收方知道差错发生,但不知道是什么样的差错,然后要求接收方重新进行传输。前者的策略是使用纠错码(error-correcting code),而后者则使用检错码(error-detecting code)
参见:循环冗余码校验的原理
2:物理过程所引起的差错,在某些介质中通常是突发的而不是单个的。网络设计者已经研究出两种基本的策略来处理差错。一种方法是在每一个要发送的数据块上附加足够的冗余信息,使接收方能够推导出已发出的字符应该是什么。另一种方法是只加足够的冗余位,使接收方知道差错发生,但不知道是什么样的差错,然后要求接收方重新进行传输。前者的策略是使用纠错码(error-correcting code),而后者则使用检错码(error-detecting code)。
目录 [隐藏]
1 纠错码
2 检错码
3 相关知识
3.1 相关条目
3.2 相关链接
[编辑]纠错码
在了解纠错码之前,先了解一个基本概念:海明距离。通常一帧包括m个数据(报文)位和r个冗余位或者校验位。设整个长度为n(即n=m+r),则此长度为n的单元通常被称作n位码字(codeword)。
给出任意两个码字,如10001001和10110001,可以确定它们有多少个对应位不同。在此例中有3位不同。为了确定有多少位不同,只须对两个码字做异或运算,然后计算结果中1的个数。两个码字中不同位的个数,称为海明距离(Hamming Distance)。其重要性在于,假如两个码字具有海明距离d,则需要d个位差错才能将其中一个码字转换成另一个。
一种编码的校验和纠错能力取决于它的海明距离。为检测出d比特错,需要使用d+1的编码;因为d个单比特错决不可能将一个有效的码字转变成另一个有效的码字。当接收方看到无效的码字,它纠能明白发生传输错误。同样,为了纠正d比特错,必须使用距离为2d+1的编码,这是因为有效码字的距离远到即使发生d个变化,这个发生了变化的码字仍然比其它码字都接近原始码字。作为纠错码的一个简单例子,考虑如下只有4个有效码字的代码:0000000000、0000011111、1111100000和1111111111这种代码的距离为5,也就是说,它能纠正双比特错。假如码字0000000111到达后,接收方知道原始码字应该为0000011111。但是,如果出现了三位错,而将0000000000变成了0000000111,则差错将不能正确地纠正。
[编辑]检错码
检错码有时也用于数据传输。例如,当信道为单工方式,无法要求重传的情况下,大多数采用检错码加重传的方式。
假设信道的出错是孤立的,信道的误码率为每位10-6。数据块的大小为100位。为1000位的数据块纠错,需要10个校验位;1兆的数据位将需要10000个校验位。若只需要检测一个数据块的一位错误,每块一个奇偶位就够了。每传送1000个数据块就需要额外传送一个数据块。错误检错+重传方式的整个开销,仅仅是每兆数据只有2001位,而海明码为10000位。
假若在一个块上只加一个奇偶位,那么块的长的突发错误的检测率就会很糟糕,能够检测到差错的概率只有0.5,这是难以接受的。改进的措施可以采取将每个数据块组成n位宽k行高的长方形矩阵进行发送。对每一列的奇偶位分别进行计算,附加在矩阵上,作为矩阵的最后一行,然后按行进行发送。当块到达后,接收方检测所有的奇偶位。如果其中任何一个出错了,就需要重新传送整个块。
这种方法能够检测到单个程度为n的突发错误,因为每一列只有一位改变了。然而如果第一位变反,最后一位变反,且所有其它位都正确,则长度为n+1的突发差错将不会被检测到。假如一个块被一个长的突发差错或者短的突发差错所破坏,n列中的每一列的奇偶值碰巧正确的概率为0.5,那么这个出错块被接受的概率不应该是2-n。
虽然上述方法有时已经足够了,但是在实践中,另一种方法正在被广泛使用,即多项式编码(也叫循环冗余码,或CRC码)。多项式编码是基于将位串看成是系数为0或1的多项式,一个k位帧可以看成是从Xk-1到X0的k-1次多项式的系数序列。如果采用多项式编码的方式,发送方和接收方必须事先商定一个生成多项式G(x),生成多项式的高位和低位必须是1。要计算m位的帧M(x)的校验和,生成多项式必须比该多项式短。基本思想是:将校验和加在帧的末尾,使这个带校验和的帧的多项式能被G(x)除尽。当接收方收到带校验和的帧时,用G(x)去除它,如果有余数,则传输出错。
计算校验和的算法如下:
设G(x)为r阶,在帧的末尾附加r个零,使帧为m+r位,则相应的多项式是XrM(x)。
按模2除法用对应于G(x)的位串去除对应于XrM(x)的位串。
按模2减法从对应于XrM(x)的位串中减去余数。结果就是要传送带校验和的帧,叫多项式T(x)。
以下三个多项式已经成为国际标准:
三个多项式:
crc -12= x^12+x^11+x^3+x^2+x+1
crc -16= x^16+x^15+x^2+1
crc -ccitt = x^16+x^12+x^5+1
这三个多项式都包含了x+1作为基本因子。当字符串长度为6位时,使用CRC-12;其余两个多项式用在字符串长度为8位的情况下。一个16位的校验和,如CRC-16或CRC-CCITT,可以捕捉到所有的单位差错和双位差错,所有奇数位数的差错,所有长度小于或等于16位的突发差错,99.997%的长度为17位的突发差错,以及99.998%的长度为18位或多于18位的突发差错.
3:循环冗余码算法分析
Currently 0.00/512345 页面分类: 循环冗余
天下维客,你可以修改的网络知识库
跳转到: 导航, 搜索
循环冗余 拷贝时出现循环冗余的解决方法 循环冗余码算法分析 循环冗余码校验的原理 数据恢复的所有文章
CRC校验码的编码方法是用待发送的二进制数据t(x)除以生成多项式g(x),将最后的余数作为CRC校验码。
目录 [隐藏]
1 其实现步骤如下
2 相关知识
2.1 相关条目
2.2 相关链接
[编辑]其实现步骤如下
设待发送的数据块是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的编码规则可以看出,CRC编码实际上是将代发送的m位二进制多项式t(x)转换成了可以被g(x)除尽的m+r位二进制多项式 ,所以解码时可以用接受到的数据去除g(x),如果余数位零,则表示传输过程没有错误;如果余数不为零,则在传输过程中肯定存在错误。许多CRC的硬件解码电路就是按这种方式进行检错的。同时可以看做是由t(x)和CRC校验码的组合,所以解码时将接收到的二进制数据去掉尾部的r位数据,得到的就是原始数据。
为了更清楚的了解CRC校验码的编码过程,下面用一个简单的例子来说明CRC校验码的编码过程。由于CRC-32、CRC-16、CCITT和CRC-4的编码过程基本一致,只有位数和生成多项式不一样。
例1.已知:信息码:110011 信息多项式:K(X)=X5+X4+X+1
生成码:11001 生成多项式:G(X)=X4+X3+1(r=4)
求:循环冗余码和码字。
解:1)(X5+X4+X+1)*X4的积是 X9+X8+X5+X4 对应的码是1100110000。
2)积/G(X)(按模二算法)。
由计算结果知冗余码是1001,码字就是1100111001。
1 0 0 0 0 1←Q(X)
G(x)→1 1 0 0 1 )1 1 0 0 1 1 0 0 0 0←F(X)*Xr
1 1 0 0 1 ,
1 0 0 0 0
1 1 0 0 1
1 0 0 1←R(X)(冗余码)
例2.已知:接收码字:1100111001 多项式:T(X)=X9+X8+X5+X4+X3+1
生成码: 11001 生成多项式:G(X)=X4+X3+1(r=4)
求:码字的正确性。若正确,则指出冗余码和信息码。
解:1)用字码除以生成码,余数为0,所以码字正确。
1 0 0 0 0 1←Q(X)
G(x)→1 1 0 0 1 )1 1 0 0 1 1 1 0 0 1←F(X)*Xr+R(x)
1 1 0 0 1 ,
1 1 0 0 1
1 1 0 0 1
0←S(X)(余数)
2)因r=4,所以冗余码是:11001,信息码是:110011
帮你找了这么多.
- ardim
-
打印机芯片可能有问题了。如果有能正常打印的时候,可能是负责通讯的芯片有问题,至少是工作不稳定。
1.重新连接数据线。重新开机,
2.重装打印机驱动程序
一般可以解决问题。
- 阿啵呲嘚
-
数据有问题呗~循环冗余检查一般用于网络传输的数据校验,可能是你的连线或别的原因导致了数据的传输错误或是别的数据上的问题。可以到其他机器上试试,如果还不行,建议把机器送去检查一下。
- 瑞瑞爱吃桃
-
循环冗余检查(CRC)是一种数据传输检
错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。若CRC校验不通过,系统重复向硬盘复制数据,陷入死循环,导致复制过程无法完成。
循环冗余检查一般用于网络传输的数据校验,可能是你的连线或别的原因导致了数据的传输错误或是别的数据上的问题。可以到其他机器上试试,如果还不行,建议把机器送去检查一下
- 阳光下的日耳曼尼亚
-
建议把打印机卸载了重装驱动程序。