0

在 Forouzan(数据通信和网络 5E)的书中找到了这个。但是,无法理解这些背后的逻辑。

  1. 这是在孤立的双位错误的情况下。

如果 t 小于 32,768,多项式 x^15 + x^14 +1 不能除以 x^t + 1 类型的任何错误。这意味着该生成器可以检测具有两个彼此相邻或最多相隔 32,768 位的孤立错误的代码字。

  1. 同样在单比特错误的情况下,为什么我们需要特别将 x^0 的系数设为 1,据我所知,如果生成多项式 g(x) 中有多个项,我们应该能够检测到任何单个位错误。在生成器中包含任何两个项(x^i + x^j,i 和 j 不等于 0 且 i 不等于 j)来检测任何单个位错误 x^k 是否就足够了?

请告诉我哪里出错了。

4

2 回答 2

0

x^15 + x^14 + 1 保证检测 2 位错误的最大消息长度为 32767 位。在 32768 位消息的情况下,如果 bit[32767] 和 bit[0] 有错误,则 CRC 将与没有错误时相同。

如果 x^i 是最低的非零项并且 i != 0,则它与具有i更少位、左移i位的 CRC 相同。这与能够检测到单个位错误无关。对于非反射 CRC,左移 CRC 可以被用于较大 CRC 多项式的代码使用,然后是右移。例如,将 x^15 + x^14 + 1 “左移” 17 位到 x^32 + x^31 + x^17,并将该移位多项式与现有的 32 位 CRC 码一起使用(初始 CRC 值也将需要左移 17 位),然后计算 CRC 后右移 17 位,得到 15 位 CRC。

于 2020-08-08T07:02:44.780 回答
0

对于您的第二个问题,是的,您只需要多项式中的两个非零项来检测一位错误。然而,正如@rcgldr 所指出的,如果最后一个非零项不是x 0,即1,则生成的 CRC 相当于将多项式向下移动,因此1 最后一个非零项。

例如,“CRC”多项式x 15 +x 9导致 15 位“CRC”,其中低 9 位始终为零,而高 6 位是从多项式x 6 +1中获得的实际 CRC . 我把 CRC 放在引号里,因为这个原因,一个有效的 CRC 多项式必须总是有一个x 0项。x 15 +x 9不是有效的 CRC 多项式。

在极限情况下,CRC 多项式x+1会产生一个单比特 CRC,即对消息中的比特进行奇偶校验。这总是检测到一位错误。如果这就是你想要的,那么奇偶校验就是你所需要的。

于 2020-08-08T17:09:07.827 回答