1 / 7
文档名称:

CRC原理.doc

格式:doc   大小:2,325KB   页数:7页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

CRC原理.doc

上传人:自在飞花轻梦 2022/1/31 文件大小:2.27 MB

下载得到文件列表

CRC原理.doc

相关文档

文档介绍

文档介绍:循环冗余检验 (CRC) 算法原理 .
org/docs/doxygen/
Cyclic Redundancy Check 循环冗余检验, 是基于数据计算一组效验码, 用于循环冗余检验 (CRC) 算法原理 .
org/docs/doxygen/
Cyclic Redundancy Check 循环冗余检验, 是基于数据计算一组效验码, 用于核对数据
传输过程中是否被更改或传输错误。
算法原理
假设数据传输过程中需要发送 15 位的二进制信息 g=101001110100001,这串二进制
码可表示为代数多项式 g(x) = x^14 + x^12 + x^9 + x^8 + x^7 + x^5 + 1 ,其中
g 中第 k 位的值,对应 g(x) 中 x^k 的系数。将 g(x) 乘以 x^m,既将 g 后加 m个0,
然后除以 m阶多项式 h(x) ,得到的 (m-1) 阶余项 r(x) 对应的二进制码 r 就是 CRC编
码。
h(x) 可以自由选择或者使用国际通行标准,一般按照 h(x) 的阶数 m,将 CRC算法称
为 CRC-m,比如 CRC-32、CRC-64等。g(x) 和 h(x) 的除运算,可以通过 g 和h 做 xor
(异或)运算。比如将 11001 与10101 做 xor 运算:
明白了 xor 运算法则后, 举一个例子使用 CRC-8算法求 101001110100001的效验码。
CRC-8标准的 h(x) = x^8 + x^7 + x^6 + x^4 + x^2 + 1 ,既 h 是 9 位的二进制串
111010101。
经过迭代运算后,最终得到的 r 是 10001100,这就是 CRC效验码。
通过示例,可以发现一些规律,依据这些规律调整算法:
1. 每次迭代, 根据 gk 的首位决定 b,b 是与 gk 进行运算的二进制码。 若gk 的首位
是 1,则b=h;若 gk 的首位是 0,则 b=0,或者跳过此次迭代,上面的例子中就是碰
到 0 后直接跳到后面的非零位。
2. 每次迭代, gk 的首位将会被移出,所以只需考虑第 2 位后计算即可。这样就可
以舍弃 h 的首位,将 b 取 h 的后 m位。比如 CRC-8的h 是 111010101,b 只需是 110
10101。
3. 每次迭代,受到影响的是 gk 的前 m位,所以构建一个 m位的寄存器 S,此寄存
器储存 gk 的前 m位。每次迭代计算前先将 S的首位抛弃, 将寄存器左移一位, 同时
将 g 的后一位加入寄存器。若使用此种方法,计算步骤如下:
※蓝色表示寄存器 S 的首位, 是需要移出的, b 根据 S 的首位选择 0 或者 h。黄色是
需要移入寄存器的位。 S' 是经过位移后的 S。
查表法
同样是上面的那个例子,将数据按每 4 位组成 1 个block ,这样 g 就被分成 6 个bl
ock。
下面的表展示了 4 次迭代计算步骤,灰色背景的位是保存在寄存器中的。
经 4 次迭代, B1被移出寄存器。被移出的部分,不我们关心的,我们关心的是这 4