3

我正在经历一些与基于 CRC 生成器的单位错误检测相关的问题,并试图分析哪个生成器检测到单位错误,哪些没有。

假设,如果我有一个 CRC 生成多项式为 x 4 + x 2。现在我想知道它是否保证检测到单位错误?

根据参考文献12,我总结了几点:-

1) 如果 k=1,2,3 用于误差多项式 x k,则余数将分别为 x,x 2 ,x 3在由生成多项式 x 4 + x 2进行多项式除法的情况下,并且根据参考资料,如果生成有多个项且 x 0的系数为 1,则可以捕获所有单比特错误。但它并没有说如果 x 的系数0的系数不为 1 则不能检测到单位错误。这就是说“在循环代码中,那些可被 g(x) 整除的 e(x) 错误不会被捕获。”

2) 我必须检查 E(x)/g(x) 的余数,其中 E(x)(假设是 x k)其中 k=1,2,3,... 是误差多项式,g( x) 是生成多项式。如果余数为零,则我无法检测到错误,当它为非零时,我可以检测到它。

所以,根据我的说法,生成多项式x 4 +x 2保证了基于以上2点的单比特错误检测。请确认我是否正确。

4

1 回答 1

4

如果 x 0的系数不为 1,那么无法检测到单位错误?

如果 x 0的系数不为 1,则与将 CRC 多项式左移 1(或更多)位(乘以 x 的某个幂)相同。将 CRC 多项式左移 1 位或更多位不会影响其检测错误的能力,它只是将 1 个或更多零位附加到代码字的末尾。

生成多项式 x 4 + x 2保证单位错误的检测

正确的。x 4 + x 2是 x 2 + 1 左移两位, x 4 + x 2 = (x 2 ) (x 2 + 1) = (x 2 ) (x + 1) (x + 1) ,并且由于 x 2 + 1 可以检测任何单个位错误,然后 x 4 + x 2也可以。此外,使用 (x + 1) 项(其中两个),它添加了偶校验,并且可以检测任何奇数位错误。


通常,无论消息长度如何,所有 CRC 多项式都可以检测单个位错误。所有 CRC 多项式都有一个“循环”周期:如果您使用 CRC 多项式作为线性反馈移位寄存器的基础, 初始值为 000...0001,然后经过固定的循环次数,将循环回到 000...0001。CRC 最简单的故障是出现 2 位错误,其中 2 位之间的距离等于循环周期。假设一个 8 位 CRC(9 位多项式)的周期是 255,那么一个 2 位错误,一个在 bit[0] 和一个在 bit[255] 将导致 CRC = 0,并且无法检测到,这单个位错误不会发生,它将继续经历周期,其中不包括值 0。如果周期为 n 个周期,则如果消息中的位数为 2 位错误,则不会发生 2 位错误+ CRC <= n。作为任何多项式时间 (x + 1) 的乘积的所有 CRC 多项式都可以检测任何奇数个比特错误(因为 x + 1 本质上是添加偶校验)。


将 CRC 多项式左移位z意味着每个码字都将具有z尾随零位。在某些情况下会这样做。假设您有一个快速的 32 位 CRC 算法。为了将该算法用于 16 位 CRC,将 17 位 CRC 多项式左移 16 位,以便最低有效非零项为 x 16。使用 32 位 CRC 算法计算后,将 32 位 CRC 右移 16 位,生成 16 位 CRC。

于 2018-12-29T19:47:10.620 回答