您的位置:首页 > 产品设计 > UI/UE

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

2016-12-12 21:35 621 查看
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',得到的余数就是校验和。这就是全部的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CRC 算法
相关文章推荐