我试图找出如何计算任意 CRC 多项式的错误检测能力。
我知道有各种错误检测功能可能(或可能不)适用于任意多项式:
检测单个位错误:所有 CRC 都可以做到这一点,因为这只需要 CRC 宽度 >= 1。
突发错误检测:所有 CRC 都可以检测到大小等于其宽度的突发错误。
奇数位错误的检测:具有偶数项的多项式(这意味着完整的二进制多项式中有偶数个 1 位)的 CRC 可以做到这一点。
检测随机位错误(取决于帧大小):我有一个现成的 C 算法,允许计算给定 HD 和多项式的最大帧大小。我没有完全理解它,但它有效。
让我们假设一个 16 位 CRC 多项式 x¹⁶+x¹²+x⁵+1 = 0x11021。该多项式可以:
- 检测所有单位错误(与数据大小无关)。
- 检测所有高达 16 位宽度的突发错误(与数据大小无关)。
- 检测所有奇数位错误(因为它有 4 个多项式项;与数据大小无关)。
- 检测高达 32571 位数据大小的 3 位错误 (HD4)。
以上是正确的吗?
是否有额外的 CRC 错误检测功能?如果是,我如何检查(没有深厚的数学知识)任意 CRC 多项式是否支持它们?