【问题标题】:Checking the error detection capabilities of CRC polynomials检查 CRC 多项式的错误检测能力
【发布时间】:2016-12-27 03:56:12
【问题描述】:

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

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

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

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

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

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

让我们假设一个 16 位 CRC 多项式 x¹⁶+x¹²+x⁵+1 = 0x11021。该多项式可以:

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

上面说的对吗?

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

【问题讨论】:

  • 这个问题很有趣。对 cs.stackexchange.com 来说可能会更好
  • @Nayuki:你可能是对的。首先让我们看看这里发生了什么......

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    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%的准确率]

    【讨论】:

    • lg(x) 和概率公式中使用的是什么?它是最大或实际消息长度还是其他?
    猜你喜欢
    • 2020-10-25
    • 2013-12-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2019-03-27
    • 1970-01-01
    • 2019-02-20
    • 2023-01-13
    相关资源
    最近更新 更多