shv*_*hva 5 crc shift-register
有两种使用线性反馈移位寄存器(LFSR)实现CRC生成的方法,如下图所示
. 此图中生成多项式的系数为100111,红色“+”圆圈为异或运算符。两者的初始化寄存器值都是 00000。
例如,如果输入数据位流是 10010011,A 和 B 都会给出 1010 的 CRC 校验和。不同之处在于 A 完成了 8 次移位,而 B 进行了 8+5=13 次移位,因为输入后附加了 5 个零数据。我可以很容易地理解 B,因为它非常模仿模 2 除法。但是,我无法从数学上理解 A 如何在减少 5 个班次的情况下给出相同的结果。我听说人们在谈论 A 利用了预先附加的零,但我没有明白。谁能给我解释一下?谢谢!
小智 5
这是我的快速理解。
令 M(x) 为 m 阶输入消息(即具有 m+1 位),G(x) 为 n 阶 CRC 多项式。这种消息的 CRC 结果由下式给出
C(x) = (M(x) * x n ) % G(x)
这就是电路 B 正在实现的。额外的 5 个周期是因为 x n操作。
电路 A 没有遵循这种方法,而是尝试做一些更聪明的事情。它试图解决这个问题
如果 C(x) 是 M(x) 的 CRC,那么消息 {M(x), D} 的 CRC 是多少
其中 D 是新位。因此,它试图一次解决一个位,而不是像电路 b 那样解决整个消息。因此,对于 8 位消息,电路 A 将只需要 8 个周期。
现在你已经明白为什么电路 B 看起来像它的样子,让我们看看电路 A。数学,特别是对于你的情况,将位 D 添加到消息 M(x) 上的 CRC 效果如下
设当前 CRC C(x) 为 {c4, c3, c2, c1, c0} 并且移入的新位为 D
NewCRC = {M(x), D}*x 5 ) % G(x) = (( {M(x), 0} * x 5 ) % G(x)) XOR ((D * x 5 ) % G(x))
即 ({c3, c2, c1, c0, 0} XOR {0, 0, c4, c4, c4}) XOR ({0, 0, D, D, D})
即 {c3, c2, c1^c4^D, c0^c4^D, c4^D}
即LFSR电路A。