我试图找出如何计算任意CRC多项式的错误检测能力。
我知道可能(或可能不)应用于任意多项式的各种错误检测功能:
检测到单个位错误: 所有CRC都可以这样做,因为这只需要CRC宽度> = 1。
检测突发错误: 所有CRC都可以检测到大小等于其宽度的突发错误。
检测奇数位错误: 使用具有偶数项的多项式的CRC(这意味着在完全二进制多项式中偶数个1位)可以做到这一点。
检测随机位错误(取决于帧大小): 我有一个现成的C算法,可以计算给定HD和poylnomial的最大帧大小。我没有完全理解它,但它确实有效。
假设16位CRC多项式x 15 + x 12 + x + 1 = 0x11021。那个多项式可以:
以上是否正确?
是否有其他CRC错误检测功能?如果是,如果任意CRC多项式支持它们,我如何检查(没有深入的数学知识)?
答案 0 :(得分:3)
g(x) = (x+l)*p(x) 的 n 位 CRC 可以检测:
长度小于或等于 n 的所有突发错误。
影响奇数位的所有突发错误。
长度等于 n + 1 的所有突发错误,概率为 (2^(n-1) − l)/2^n − 1
所有长度大于 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而必须改变的最小位数,以及在规定的低误码率下的性能。