2016-08-19 42 views
2

我试图找出如何计算任意CRC多项式的错误检测能力。检查CRC多项式的错误检测能力

我知道有可能(或可能不会)适用于任意多项式各种错误检测功能:

  1. 检测单比特错误的: 所有CRC能做到这一点,因为这不仅需要CRC宽度> = 1.

  2. 突发错误的检测: 所有的CRC都可以检测突发错误,直到大小等于它们的宽度。

  3. 奇数位错误的检测: 具有偶数个项(即完整二进制多项式中的偶数个1位)的CRC可以做到这一点。

  4. 检测随机位错误(取决于帧大小): 我有一个随时可用的C算法,可以计算给定HD和多项式的最大帧大小。我没有完全理解它,但它的工作原理。

假设一个16位的CRC多项式x十八+ x 12 + x 5 + 1 = 0x11021。该多项式可以:

  • 检测所有单位错误(数据大小无关)。
  • 检测所有突发错误高达16位宽度(数据大小无关)。
  • 检测所有奇数位错误(因为它有4个多项式项;数据大小无关)。
  • 检测3位错误(HD4),最大可达32571位数据大小。

以上是否正确?

是否有额外的CRC错误检测功能?如果是,如果任意CRC多项式支持它们,我该如何检查(没有深入的数学知识)?

+0

这个问题很有趣。这可能是更好的cs.stackexchange.com – Nayuki

+0

@Nayuki:你可能是对的。先让我们看看这里发生了什么...... – Silicomancer

回答

2

paper by Koopman and Chakravarty着眼于CRC性能的几种措施,描述了措施和许多多项式的结果。简而言之,“好”多项式的定义取决于它所应用的消息的长度,该消息因应用而异。主要的措施是汉明距离,它是消息中为了返回相同的CRC而必须改变的最小位数,以及在规定的低误码率下的性能。