【发布时间】:2016-12-27 03:56:12
【问题描述】:
我试图找出如何计算任意 CRC 多项式的错误检测能力。
我知道有多种错误检测功能可能(或可能不)适用于任意多项式:
检测到单个位错误: 所有 CRC 都可以这样做,因为这只需要 CRC 宽度 >= 1。
检测突发错误: 所有 CRC 都可以检测到大小等于其宽度的突发错误。
检测奇数位错误: 具有偶数项的多项式(这意味着完整的二进制多项式中有偶数个 1 位)的 CRC 可以做到这一点。
检测随机位错误(取决于帧大小): 我有一个现成的 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