硕论文。郑州轻工业学院魏艳。一。横向比较8-bits CRC12-bits CRC16-bits CRC二。 纵向比较上面。循环冗余校验我们利用实验者提供的实验数据对限长的CRC国际标准码的性能表现做了横向比较。下面我们进行部分纵向比较。仅考虑数据帧长度。而不限制CRC长度。从实验者提供的数据我们可以发现。对于国际标准CRC-8。CRC-12。CRC-16。CRC-CCITT:1. 当数据帧长度在8bits-128bits范围内时。
CRC-8有更好的表现;2. 当数据帧长度大于128bits时。CRC-12。CRC-16。CRC-CCITT均有较好的表现。且其漏检率基本相近。三。结论基于上述简单的分析。以及更多的实验。实验者给出了选择CRC生成多项式的具体步骤。并提供了一张对应于不同长度数据帧的相对比较好的CRC生成多项式的选择表。注:上表每一个单元格中有两个数字。其中上面的数字表示的是数据帧能达到码重最大值时地最长的长度。
下面的数字就代表在达到这个码重时采用的具体的生成多项式。四。方案从上面的分析我们看到。国际上提供的标准也并不是在任何情况下都能提供很好的差错检测性能。因此。针对不同的情况来选择适当的CRC生成多项式是有必要的。根据以上。我们提供下面的CRC国际标准选择方案:1. 当数据帧长度在8bits-128bits范围内时。推荐CRC-8;2. 当数据帧长度在128bits-2048bits范围内时。推荐CRC-12。
CRC-16。CRC-CCITT;3. 当因数据帧长度更长。信道不稳定等情况而需要更高的性能时。CRC-32。CRC-32C将是更好的选择;4. 选择其他更多国际标准。
差错检测能力。利用多项式。我们定义误码多项式E是接收到的消息码字与正确码字的异或。
即E = Trecv XOR Tcorrect …… 则我们容易知道。当且仅当E能够被CRC多项式P整除的时候CRC算法无法检查到错误。当我们选择一个适当的P时。以下所有差错E都不能被P整除。因此可以检测出:。
应用场合。CRC校验实用程序库 在数据存储和数据通讯领域。
为了保证数据的正确。就不得不采用检错的手段。在诸多检错手段中。CRC是最著名的一种。CRC的全称是循环冗余校验。其特点是:检错能力极强。开销小。易于用编码器及检测电路实现。从其检错能力来看。它所不能发现的错误的几率仅为0.0047%以下。从性能上和开销上考虑。均远远优于奇偶校验及算术和校验等方式。因而。在数据存储和数据通讯领域。CRC无处不在:著名的通讯协议X.25的FCS采用的是CRC-CCITT。
WinRAR。NERO。ARJ。LHA等压缩工具软件采用的是CRC32。磁盘驱动器的读写采用了CRC16。通用的图像存储格式GIF。TIFF等也都用CRC作为检错手段。下面介绍硬件生成与计算CRC的过程。
硬件生成过程。下面以最常用的CRC-16为例来说明其生成过程。
CRC-16码由两个字节构成。在开始时CRC寄存器的每一位都预置为1。然后把CRC寄存器与8-bit的数据进行异或。之后对CRC寄存器从高到低进行移位。在最高位的位置补零。而最低位如果为1。则把寄存器与预定义的多项式码进行异或。否则如果LSB为零。则无需进行异或。重复上述的由高至低的移位8次。第一个8-bit数据处理完毕。用此时CRC寄存器的值与下一个8-bit数据异或并进行如前一个数据似的8次移位。
所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。
硬件计算过程。1.设置CRC寄存器。并给其赋值FFFF。
2.将数据的第一个8-bit字符与16位CRC寄存器的低8位进行异或。并把结果存入CRC寄存器。3.CRC寄存器向右移一位。MSB补零。移出并检查LSB。4.如果LSB为0。重复第三步;若LSB为1。CRC寄存器与多项式码相异或。注意:该步检查LSB应该是右移前的LSB。即第3步前的LSB。5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。
6.重复第2至第5步直到所有数据全部处理完成。7.最终CRC寄存器的内容即为CRC值。
参考资料。1.《数据与计算机通信》。William Stallings著。
电子工业出版社2. Wikipedia - 循环冗余校验3.《CRC性能分析及生成多项式选取的研究》。硕论文。郑州轻工业学院魏艳。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-38616-2.html
加油
还真想下去吗
清者自清