检查CRC多项式的错误检测功能

时间:2016-08-19 22:10:52

标签: checksum crc polynomials hamming-distance error-detection

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

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

  1. 检测到单个位错误: 所有CRC都可以这样做,因为这只需要CRC宽度> = 1。

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

  3. 检测奇数位错误: 使用具有偶数项的多项式的CRC(这意味着在完全二进制多项式中偶数个1位)可以做到这一点。

  4. 检测随机位错误(取决于帧大小): 我有一个现成的C算法,可以计算给定HD和poylnomial的最大帧大小。我没有完全理解它,但它确实有效。

  5. 假设16位CRC多项式x 15 + x 12 + x + 1 = 0x11021。那个多项式可以:

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

    以上是否正确?

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

2 个答案:

答案 0 :(得分:3)

g(x) = (x+l)*p(x) 的 n 位 CRC 可以检测:

  1. 长度小于或等于 n 的所有突发错误。

  2. 影响奇数位的所有突发错误。

  3. 长度等于 n + 1 的所有突发错误,概率为 (2^(n-1) − l)/2^n − 1

  4. 所有长度大于 n + 1 的突发错误,概率为 (2^(n-1) − l)/2^n [CRC-32 多项式将检测所有长度大于 33 的突发错误概率 (2^32 − l)/2^32;这相当于99.99999998%的准确率]

答案 1 :(得分:2)

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