5

我试图找出如何计算任意 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 多项式是否支持它们?

4

2 回答 2

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

于 2021-01-14T12:10:18.210 回答
3

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

于 2016-08-19T23:27:38.590 回答