循环冗余校验:单位和双位错误

Cyclic Redundancy check : Single and double bit error

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

这是主题两个孤立的单位错误

的上下文

In other words, g(x) must not divide x^t + 1, where t is between 0 and n − 1. However, t = 0 is meaningless and t = 1 is needed as we will see later. This means t should be between 2 and n – 1

为什么这里排除了t=1? (x^1 + 1) 是两个连续的错误,也必须使用我们的 g(x).

正确检测到

第三张图说(x+1)应该是g(x)的一个因数,但是这样就把CRC保证检测2位错误的最大长度从n-1减少到(n/2)-1,但它提供了能够检测任何奇数位错误的优势,例如 (x^k + x^j + x^i) 其中 k+j+i <= (n/2)-1.

书中没有提到,有些生成器可以检测到 3 个以上的错误,但为了做到这一点,却牺牲了消息的最大长度。

如果 CRC 可以检测到 e 错误,那么它也可以纠正 floor(e/2) 错误,但是我不知道执行此操作的有效算法,除了巨大的 table 查找(如果有足够的 space)。例如,有一个 32 位 CRC(十六进制:1f1922815 = 787·557·465·3·3)可以检测 7 位错误或纠正 3 位错误,最大为 1024 位的消息,但快速纠正需要 1.4千兆字节查找 table.

至于“t = 1 is needed”,该书后来通过指出 g(x) = (x+1) 无法检测相邻位错误来澄清这一点。在另一个陈述中,这本书没有特殊情况 t = 0 或 t = 1,它指出,“如果生成器不能将 (x^t + 1)、t 在 0 和 n-1 之间划分,那么所有孤立的双位错误可以检测到”,除了如果 t = 0,(x^0 + 1) = (1 + 1) = 0,这将是零位错误情况。