关于 CRC 编码的一道题解

在这里插入图片描述
2018年01月07日,星期日,

我先大概说一下CRC相关概念,然后咱们开始解题,

1、多项式形式与二进制形式是有关联的,因子是对应的,

比如,题中,发送多项式为:X11+X8+X7+X6+X4+X3+X^2+1,

就是:211+28+27+26+24+23+2^2+1,

所以,对应的二进制形式为:100111011101,

这里的发送多项式说的就是,未经CRC校验运算的原始数据,

2、同理,CRC生成多项式也与一组二进制数相对应,

例如,题中,CRC生成多项式为:x4+x2+x^1+1,

就是:24+22+2^1+1,

对应的二进制是:10111,

生成多项式是人为指定的,没有固定值,指定成x4+x3+x2+x1+1即11111也行,

3、发送多项式的二进制形式是:100111011101,这是我们的原始数据,

CRC生成多项式的二进制形式是:10111,我们要使用它来按照CRC规则与原始数据进行运算后,得出我们要在线路上传输的,经过CRC校验的,原始数据的CRC编码,

这里比较绕,简单点理解就是,我们要通过给出的CRC生成多项式,用它与原始数据进行计算后,得到的带有CRC校验的一串二进制数,我们把这串带有CRC校验的二进制就称为原始数据的CRC编码,就是题目中的“该发送多项式的CRC编码”,

4、接下来就是CRC计算规则了,

发送多项式的二进制形式,向左移动(CRC生成多项式最高次幂的指数)这么些位,本题CRC生成多项式最高次幂是X^4,因此,发送多项式要左移4位,

计算如下:

100111011101 * 2^4

=100111011101 0000,

这样经过计算后,原始数据的右侧多出了4个0,也就是多出了4个空位,在将来通过计算得出的CRC校验码就要放到这4个空位中,4位的CRC校验码就要填充到这挪出的4个车位,

按CRC规则,使用变形后的发送多项式的二进制形式:1001110111010000去除以CRC生成多项式的二进制形式:10111,

请注意,这里使用的除法,不是数学领域的除法,而是指计算机中的模二除的计算方式,实际上就是异或运算,实际的操作方法是,将两个数高位对齐也就是左对齐,然后按位异或,若相同则结果为0,若不同则结果为1,然后将得到的数再与除数(就是生成多项式)相除,直到最后得到最终的余数,一般来说,我们按照CRC校验规则经过运算,一般是除不尽的,这个余数就是我们需要的CRC校验码,将这个CRC校验码按照CRC规则与变形后(也就是右边加了4个零的原始数据)的原始数据组合到一起就是最终的答案,

计算步骤如下:

1001110111010000/10111

…………………………………………

1001110111010000 被除数 ,变形后的原始数据,

10111 除数 ,CRC生成多项式

—————————

0010010111010000 商,下一步继续除以CRC生成多项式:10111

…………………………………………

10010111010000 被除数,就是上一步运算得到的,商,

10111 除数

————————

00101111010000 商,下一步继续除以CRC生成多项式:10111

……………………………………………

101111010000 被除数,即上一步得到的商

10111 除数

———————

000001010000 商

………………………………………………

1010000 被除数

10111 除数

———

0001100 余数(也是最后一步运算得到的商,因为位数不足5位不能再继续除了,4位 的1100不能再与5位的CRC生成多项式 10111,进行模二除的运算了,所以就把这个商称为余数了,)

按照CRC校验运算规则,将经过上一步运算后得到的CRC校验码:1100,与变形后的原始数据:1001110111010000,组合到一起,就是我们最终需要的,在线路上传送的,带有CRC校验码的,CRC编码,也就是题目中说的,该发送多项式的CRC编码,

计算过程如下:

1001110111010000+1100

………………………………………………

100111011101 0000

  •                 1100
    

——————————

100111011101 1100

这里需要说明的是,只有理解了CRC编码的规则,才能在将来遇到此类问题时从容应对,我给你的建议是,多做题,最好是有正确答案的题目,这样在做题的过程中,会加深你对CRC编码的理解,

最后,我们再来复习一下,CRC编码的规则,

1、原始数据多项式,我们一般称为:C(X),也有称为m(x)的,

2、生成多项式 generator polynomial,我们一般称为:G(x)。

3、CRC校验码,我们一般称为: r(x),

4、我们,先用变形后的C(X),去除以G(x),得到r(x),然后,再将变形后的C(X),与r(x)组合,就得到了最终我们需要的带CRC校验的CRC编码。

这里想再说一下,为什么生成多项式的最高次幂是几,最后的余数就是几位的,

比如本例中,生成多项式为:x4+x2+x^1+1,最后的余数就是4位的1100,

这个规则是可以推导出来的,

首先,将生成多项式中的 1 改写成 x^0,则有 x4+x2+x1+x0,

这就很明显可以看出来,指数是从0开始的,虽然中间有一个指数3因为该权位上的值为0而没有写在这个生成多项式中,但是在该生成多项式的二进制形式中该权位上是数字0,这不是重点,

重点是,我们可以一目了然的看出来,指数是从0开始的,而不是从1开始的,所以,以本题为例,当生成多项式的最高次幂为x^4即指数为4时,该幂所在的权位的右侧一定有4位二进制数,因为该幂的权位决定了这个生成多项式一定是一个5位的二进制数,而最高幂所在的权位是右数第五个位置,所以它的右边一定还有4个二进制位,

结合开头描述的,要让原始值去乘,2的,生成多项式的最高次幂这么多次方,也就是让原始值向左移动多少位,好腾出地方放置余数,

还有一个很巧妙的地方是,因为生成多项式的二进制形式中,最高位一定是1,所以,和加了0的原始值进行异或运算,到最后得到的余数的位数一定比生成多项式的二进制形式的位数小,拿本例来说,生成多项式是:

x4+x2+x^1+1

对应的二进制形式是:

10111

所以,不管原值最后剩下什么组合,只要和 10111左对齐后,因为要进行异或的操作,最高位一定变0,所以,最后的余数的二进制位数一定小于生成多项式的二进制位数,

再结合,指数从0开始,

所以,生成多项式的最高次幂,可以决定余数的位数,

August2024the31thSaturday

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值