轻松理解CRC差错检测算法(A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS)四

6 一个完整运算示例(作者版权声明见本系列第一篇)
    已经定义了CRC运算,我们可以通过一个简单的除法来构建CRC运算的框架。因为,这就是CRC运算的全部。这部分会填补上细节,给出一个完整示例。
    要实现一个CRC运算,我们要选出一个除数。在数学王国里,一个除数被叫作“生成多项式”,或者,简单地说“多项式”,它是任何CRC运算中的关键参数。或者叫除数的另外某个名称更易懂一些,但是多项式的说法,已经深深植根于这个领域中,如果不使用它,反而会造成困惑。折衷的结果是,我们以poly(译注:实在找不到合适的词)称呼CRC多项式。就把这样的数学名词想成是一类鹦鹉,“你好,poly”(译注:记得初一英语课本中的那只吗:->)。
    你可以选择任意一个poly来实现你的CRC算法。然而,一些poly就是天生比另外一些好,这样一来,使用那些经过验证和测试的poly是明智选择。下一部分会着重讨论这个问题。
    poly的宽度(最高非0位的位置)是非常重要的,因为它左右了整个计算。一般来说,16位宽或者32位宽被选用,为的是能在现代电脑上轻松实现。poly的宽度是就是最高位的真实位(译注:poly长度-1)。例如,10011的宽度是4,而非5。以示例为例,我们选择一个10011(宽度是4)的poly。
    选取了一个poly之后,我们可以继续我们的运算了。只是简单地用poly去除信息。唯一的机巧点是,W(poly宽度)个0被附加到信息的后面,在CRC计算开始前。这样我们有:
原始的信息:         1101011011
poly:            10011
   附加W位0之后的信息:    11010110110000
   现在,我们简单地把优化后的信息用多项式来CRC除。和前面的除法一样:

                               
    除法得到了一个商,会被舍弃,一个余数,就是计算得到的校验和。计算就此结束。通常,校验和是被附加到发送的信息的尾部。这个例子中发送的信息就是: 11010110111110。另外一边,接收者,可以做以下二个中任一件事:
1.把信息和校验和分开。计算信息的的校验和(附加W个0),比较两个校验和。
2.把整个信息进行校验和运算,看下,这得到的余数是不是0.
    两个操作都是等效的。不过,在下一部分中,我们选第2种方法,因为,它在数学上更整洁。
   总结下,CRC类算法的步骤:
1 选择一个位宽W,一个poly(位宽W)记为G。
2 附加W个0到信息之后,称这个信息为M'。
3.用G去除M',得到的余数就是校验和。这就是全部的内容。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值