在Forouzan(数据通信和网络5E(的书中发现了这一点。但是,无法理解这些背后的逻辑。
- 这是在孤立双位错误的上下文中
如果t小于32768,多项式x^15+x^14+1不能除任何x^t+1类型的误差。这意味着具有两个相邻或高达32768位的孤立错误的码字可以通过该生成器来检测分离。
- 此外,在单比特错误的背景下,为什么我们需要将系数x^0指定为1,正如我所理解的,如果生成器多项式g(x(中有多个项,我们应该能够检测到任何单比特误差。在生成器中有任意两个项(x^i+x^j,i和j不等于零,i不等于j(来检测任何单个比特错误x^k难道不足够吗
请告诉我哪里出了问题。
对于您的第二个问题,是的,您只需要多项式中的两个非零项来检测一个一位错误。然而,正如@rcgldr所指出的,如果最后一个非零项不是x0,即1时,则得到的CRC等价于将多项式下移,使得1是最后一个不零项。
例如;CRC";多项式x15+x9导致15位";CRC";其中低9位总是零,其中高6位是从多项式x6+1中获得的实际CRC。我把CRC放在引号里,因为出于这个原因,一个有效的CRC多项式必须总是有一个x0项x15+x9不是有效的CRC多项式。
在极限情况下,CRC多项式x+1会产生一个单比特CRC,它是消息中比特的奇偶校验。它总是检测一个一位错误。如果这就是你想要的,那么奇偶校验就是你所需要的。
用x^15+x^14+1检测2位错误所保证的最大消息长度为32767位。在32768位消息的情况下,如果位[32767]和位[0]有错误,则CRC将与无错误相同。
如果x^i是最低的非零项,并且i!=0,则它与CRC相同,其中i更少的比特,左移i比特。这与能够检测单个比特错误无关。对于非反射CRC,左移位CRC可以由用于较大CRC多项式的代码使用,然后是右移位。例如;"左移";x^15+x^14+1乘以17位到x^32+x^31+x^17,并将该移位多项式与现有的32位CRC码一起使用(初始CRC值也需要向左移位17位(,然后在计算CRC后,向右移位17位以获得15位CRC。