【发布时间】:2016-10-19 20:55:33
【问题描述】:
我是一名电子工程师,我发现从纯数学角度考虑 CRC 并不重要。但是,我有以下问题:
为什么我们在计算 CRC 时要在消息中添加 n 个零,如果 n 是生成多项式的次数?我在模2长除法以及CRC的硬件实现中看到了这一点
为什么我们希望生成多项式能被 (x+1) 整除?
为什么我们希望生成多项式不能被 x 整除?
【问题讨论】:
标签: checksum modulo crc polynomials
我是一名电子工程师,我发现从纯数学角度考虑 CRC 并不重要。但是,我有以下问题:
为什么我们在计算 CRC 时要在消息中添加 n 个零,如果 n 是生成多项式的次数?我在模2长除法以及CRC的硬件实现中看到了这一点
为什么我们希望生成多项式能被 (x+1) 整除?
为什么我们希望生成多项式不能被 x 整除?
【问题讨论】:
标签: checksum modulo crc polynomials
n 位 CRC 时添加 n 零,因为在将 CRC 附加到消息并发送整体时(电信中的常见做法):
n 位缓冲区,而在发送端,它几乎没有增加复杂性(x(n) 的额外项减少为一个与门,在 CRC 传输期间将消息位强制为零,n在传输 CRC 时执行额外的缩减步骤)。(M(x) * x^n) mod P(x) = R(x)(可能在某个常数范围内,或者/或者在 M(x) 的开头添加了一些规定的位,对应于 CRC 寄存器的初始化),并且在接收端计算 CRC是M(x) 和R(x) 的串联,即(M(x) * x^n + R(x)) mod P(x),它为零(或称常数)。C(x) 计算为M(x) mod P(x),则翻转M(x) 的最后一位和C(x) 的最后一位将不会被检测到,而大多数用于错误检测的多项式确保检测到任何两位错误最大邮件大小。x+1 整除,因为这样可以确保检测到任何影响奇数位的错误。然而,这种做法并不普遍,它有时会阻止为更好的一些有用定义选择更好的多项式,包括最大化消息的长度,以便始终检测到 m 错误(假设没有同步丢失),对于某些组合m 和 n。特别是,如果我们希望能够检测到可能的最长消息的任何 2 位错误(这将是 2n-1 位,包括 n-bit CRC),我们需要多项式是原始的,因此不可约,因此(对于n>1)不能被x+1整除。x 整除,否则生成的最后一位 CRC 将是恒定的,并且无助于检测消息其余部分中的错误+CRC .【讨论】: