繁体   English   中英

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

[英]Single-bit Error Detection through CRC(Cyclic Redundancy Check)

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

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

根据参考文献12 ,我总结了一些观点: -

1)如果对于误差多项式x k ,k = 1,2,3,则在通过生成多项式x 4 + x 2进行多项式除法的情况下,余数将分别为x,x 2 ,x 3 ,并且根据参考,如果是生成器如果有一个以上的项,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保证了基于上述两点的单比特错误的检测。请确认我是否正确。

如果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位错误,一位[0]位和一位[255]将导致CRC = 0,并且无法检测到,单个位错误不会发生,它只会继续经历周期,其中没有一个包含值0.如果周期是n个周期,那么如果消息中的位数没有2位错误可能会失败+ CRC <= n。 作为任何多项式时间(x + 1)的乘积的所有CRC多项式可以检测任何奇数个比特错误(因为x + 1实质上是添加偶校验检查)。


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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM