通过CRC进行单比特错误检测(循环冗余校验)

问题描述 投票:1回答:1

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

假设,如果我有一个CRC生成多项式为x4 + x2。现在我想知道它是否能保证检测到单比特错误?

根据12的参考资料,我总结了一些观点: -

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

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

所以,根据我的说法,生成多项式x4 + x2可以保证在上述2点的基础上检测出单比特错误。请确认我是否正确。

networking crc data-link-layer
1个回答
2
投票

如果x0的系数不是1,则无法检测到单比特错误?

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

生成多项式x4 + x2保证检测单比特错误

正确。 x4 + x2是x2 + 1左移两位,x4 + x2 =(x2)(x2 + 1)=(x2)(x + 1)(x + 1),并且因为x2 + 1可以检测到任何单个位错误,那么x4 + x2也可以。同样使用(x + 1)项(其中两个),它会添加偶数奇偶校验,并可以检测任何奇数位错误。


通常,无论消息长度如何,所有CRC多项式都可以检测单个位错误。所有CRC多项式都有一个“cylic”周期:如果你使用CRC多项式作为Linear Feedback Shift Register的基础,并且初始值是000 ... 0001,那么在经过一定数量的周期后,它将循环回到000 .. 0.0001。 CRC的最简单的失败是具有2比特的错误,其中2比特被分开等于循环周期的距离。假设8位CRC(9位多项式)的周期为255,那么2位错误,一位[0]位和一位[255]将导致CRC = 0,并且无法检测到,单个位错误不会发生,它只会继续经历周期,其中没有一个包含值0.如果周期是n个周期,那么如果消息中的位数没有2位错误可能会失败+ CRC <= n。作为任何多项式时间(x + 1)的乘积的所有CRC多项式可以检测任何奇数个比特错误(因为x + 1实质上是添加偶校验检查)。


通过z位移位CRC多项式意味着每个码字将具有尾随零位的z。有些情况下这样做。假设你有一个快速的32位CRC算法。为了将该算法用于16位CRC,将17位CRC多项式向左移位16位,使得最低有效非零项为x16。在使用32位CRC算法进行计算之后,32位CRC右移16位以产生16位CRC。

© www.soinside.com 2019 - 2024. All rights reserved.