我正在经历一些与基于 CRC 生成器的单比特错误检测相关的问题,并试图分析哪个生成器检测到单比特错误,哪些没有。
假设,如果我有一个 CRC 生成多项式为 x4 + x2。现在我想知道 是否保证 检测到单个位错误?
根据引用文献 1 和 2 ,我总结了一些观点:-
1) 如果k=1,2,3 误差多项式xk,那么余数将分别为x,x2,x3 在多项式除以生成多项式x4 + x2 的情况下,根据引用文献,如果生成器有多个项并且 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 点的单个比特错误的检测。请确认我是否正确。
最佳答案
如果 x0 的系数不为 1,则与将 CRC 多项式左移 1(或更多)位(乘以 x 的某个幂)相同。将 CRC 多项式左移 1 位或更多位不会影响它检测错误的能力,它只是在代码字的末尾附加 1 位或更多零位。
正确的。 x4 + x2 是 x2 + 1 左移两位,x4 + x2 = (x2) (x2 + 1) = (x2) (x + 1) (x + 1) ,因为 x2 + 1 可以检测任何单个位错误,那么 x4 + x2 也可以。同样使用 (x + 1) 项(其中两个),它增加了偶数奇偶校验并且可以检测任何奇数个误码。
通常,无论消息长度如何,所有 CRC 多项式都可以检测到单个位错误。所有 CRC 多项式都有一个“循环”周期:如果您使用 CRC 多项式作为 Linear Feedback Shift Register 的基础,并且初始值是 000...0001,那么经过某个固定数量的循环后,它将循环回到 000.. .0001。 CRC 最简单的故障是有 2 位错误,其中 2 位之间的距离等于循环周期。假设 8 位 CRC(9 位多项式)的周期为 255,那么 2 位错误,一个在 bit[0] 和一个在 bit[255] 将导致 CRC = 0,并且无法检测到,这单个位错误不会发生,它只会继续经历循环,其中没有一个包含值 0。如果周期是 n 个循环,那么如果消息中的位数是多少,那么任何 2 位错误都不会失败+ CRC 是
将 CRC 多项式左移 z
位意味着每个码字都有 z
尾随零位。有这样做的情况。假设您有一个快速的 32 位 CRC 算法。要将该算法用于 16 位 CRC,请将 17 位 CRC 多项式左移 16 位,以便最低有效非零项为 x16。在使用 32 位 CRC 算法计算后,将 32 位 CRC 右移 16 位以产生 16 位 CRC。
关于networking - 通过 CRC(循环冗余校验)进行单比特错误检测,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53969585/