CRC校验原理及推导过程.docx
- 文档编号:27082899
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:15
- 大小:118.11KB
CRC校验原理及推导过程.docx
《CRC校验原理及推导过程.docx》由会员分享,可在线阅读,更多相关《CRC校验原理及推导过程.docx(15页珍藏版)》请在冰豆网上搜索。
CRC校验原理及推导过程
1.1 伽罗华域𝐺𝐹(2 )
在伽罗华域𝐺𝐹(2 )中的元素由𝐺𝐹
(2)上的本原多项式构造,域中的元素两两运算之后
例如当𝑚 = 4,本原多项式为:
𝐺(𝑥) = 𝑥 + 𝑥 + 1,𝐺𝐹(2 )中的元素集合
CRC 校验原理及推导过程
1 代数引论
参考文献[1]对伽罗华域、线性码、循环码、缩短循环码进行了很好的论述。
𝑚
𝑚
的结果依然是该域中的元素,域中运算是基于模 2 的。
44
{0,1,𝛼,𝛼2,𝛼3,⋯,𝛼14},转换为十六进制数依次对应为{0,1,2,4,8,3,6,𝐶,𝐵,5,𝐴,7,𝐸,𝐹,𝐷,9},转换为
多项式依次对应为
{0,1,𝛼,𝛼2,𝛼3,𝛼 + 1,𝛼2 + 𝛼,𝛼3 + 𝛼2,𝛼3 + 𝛼 + 1,𝛼2 + 1,𝛼3 + 𝛼,𝛼2 + 𝛼 + 1,𝛼3 + 𝛼2 + 𝛼,𝛼3 +
。
于是:
𝛼
15
= 𝛼 ∙ 𝛼14 = 𝛼 ∙ (1 + 𝛼3) = 𝛼 + 𝛼4 = 𝛼 + 1 + 𝛼 = 1
𝛼7 + 𝛼5 = (𝛼2 + 𝛼) + (𝛼3 + 𝛼 + 1) = 𝛼3 + 𝛼2 + 1 = 𝛼13
1.2 模运算法则
模运算与基本四则运算有些相似,但是除法例外。
其规则如下
(a+b) % p = (a % p + b % p) % p(1-1)
(a-b) % p = (a % p - b % p) % p(1-2)
(a × b) % p = ((a % p) × (b % p))% p(1-3)
ab % p = ((a % p)b) %p(1-4)
结合率:
((a+b) % p+c) % p = (a+(b+c) % p) % p(1-5)
((a × b) % p × c)% p = (a × (b × c) % p) % p(1-6)
交换率:
(a+b) % p = (b+a) % p(1-7)
(a × b) % p = (b × a) % p(1-8)
分配率:
((a +b)% p × c) % p = ((a × c) % p + (b × c) % p) % p (1-9)
一个长度为𝑛,有2 个码字的分组码,当且仅当其2 个码字构成𝐺𝐹
(2)域上
1.3 线性分组码和循环码
𝑘𝑘
所有𝑛维向量组成的向量空间的一个𝑘维子空间是被称为(𝑛,𝑘)线性码。
线性码的码字由𝑘位消息部分和(𝑛 ‒ 𝑘)位冗余校验部分组成。
循环码事线性分组码的一个重要的子类,其有两个引入注目的原因:
一是
通过带反馈连接的移位寄存器(一般称为线性时序电路),其编码和校正计算
能够很容易的实现;二是由于其具有固有的代数机构,都能找到很多种实用的
方法进行译码。
一个(𝑛,𝑘) 线性码 C,如果每个码字的循环移位后的数仍是 C 的码字,则成
为其为循环码。
给定一个(𝑛,𝑘)循环码的生成多项式
g(x) = 𝑔𝑛 ‒ 𝑘𝑥
𝑛 ‒ 𝑘
+ 𝑔𝑛 ‒ 𝑘 ‒ 1𝑥𝑛 ‒ 𝑘 ‒ 1 + ⋯𝑔1𝑥 + 1,假设待编码的消息为
u = (𝑢𝑘 ‒ 1,𝑢𝑘 ‒ 2,⋯𝑢1,u0),则相应的消息多项式为:
u(𝑥) = 𝑢𝑘 ‒ 1𝑥
𝑘 ‒ 1
+ 𝑢𝑘 ‒ 2𝑥𝑘 ‒ 2 + ⋯ + 𝑢1𝑥 + u0
(1-10)
用𝑥 𝑛 ‒ 𝑘
乘以u(𝑥),得到次数不大于(𝑛 ‒ 1)的多项式为:
𝑥𝑛 ‒ 𝑘u(𝑥) = 𝑢𝑘 ‒ 1𝑥𝑛 ‒ 1 + 𝑢𝑘 ‒ 2𝑥𝑛 ‒ 2 + ⋯ + 𝑢1𝑥𝑛 ‒ 𝑘 ‒ 1 + u0𝑥𝑛 ‒ 𝑘
11)
用生成多项式g(x)除𝑥 𝑛 ‒ 𝑘 u(𝑥)得到:
(1-
𝑥𝑛 ‒ 𝑘u(𝑥) = 𝑚(𝑥)𝑔(𝑥) + v(𝑥)
(1-12)
其中,𝑚(𝑥)和v(𝑥)分别为商式和余式。
由于g(x)的最高次数为(𝑛 ‒ 𝑘),则
𝑣(𝑥)的次数必不大于(𝑛 ‒ 𝑘 - 1)。
从而有
𝑣(𝑥) = 𝑣𝑛 ‒ 𝑘 ‒ 1𝑥𝑛 ‒ 𝑘 ‒ 1 + ⋯ + 𝑣1𝑥 + 𝑣0
整理得到次数不大于(𝑛 ‒ 1)的多项式:
𝑥𝑛 ‒ 𝑘u(𝑥) + 𝑣(𝑥)
(1-13)
= 𝑚(𝑥)𝑔(𝑥) = 𝑢𝑘 ‒ 1𝑥
𝑛 ‒ 1
+ 𝑢𝑘 ‒ 2𝑥𝑛 ‒ 2 + ⋯ + 𝑢1𝑥𝑛 ‒ 𝑘 ‒ 1 + u0𝑥𝑛 ‒ 𝑘
+ 𝑣𝑛 ‒ 𝑘 ‒ 1𝑥
𝑛 ‒ 𝑘 ‒ 1
+ ⋯ + 𝑣1𝑥 + 𝑣0
(1-14)
该多项式能被多项式g(x)整除。
相应的完整码字为:
(𝑢𝑘 ‒ 1,𝑢𝑘 ‒ 2,⋯𝑢1,u0, 𝑣𝑛 ‒ 𝑘 ‒ 1,⋯𝑣1,𝑣)
(1-
15)
1.4 缩短的循环码
在系统设计中,如不能找到一个具有合适的自然长度的或者信息位数目的
码字,缩短码是一种有效的解决方案。
对一个(𝑛,𝑘) 循环码𝐶,其中信息位的高𝑙位均为零的码字共有2𝑘 ‒ 𝑙个,构成
了𝐶的线性子码。
若从这些码字中删除这𝑙个零信息位,将得到2𝑘 ‒ 𝑙个长度为
n ‒ 𝑙的向量,这些向量组成了 (𝑛 ‒ 𝑙,𝑘 ‒ 𝑙) 线性码。
这种码被称为缩短循环码,
但不是循环码。
缩短循环码的纠错能力与差错检测能力至少与原码相同。
1.5 冗余码
所用符号数或信号码元数比表示信息所必需的数目多的代码叫冗余码。
1.6 循环冗余检验
循环冗余检验英文名称为 Cyclical Redundancy Check,简称 CRC。
它是利
用多项式除法及余数的原理来做错误检测的。
它将要发送的数据比特序列当作
一个信息多项式u(𝑥)的系数,发送时去除以约定的生成多项式g(x),得到一个
余数多项式v(𝑥),将余数多项式加到信息多项式之后发送到接收端,接收端同
样用g(x)去除接收到的接收多项式r(𝑥),进行计算,然后把计算结果与由生成
多项式g(x)决定的固定序列比较,来检测传输错误。
由此可以看出其同时具有
循环码和冗余码的特征,所以这种错误检测方法叫循环冗余校验,编码叫循环
冗余校验码,即如式 1-15 所示。
理论上可以证明循环冗余校验码的检错能力有以下特点:
(1)可检测出所有奇数位错。
(2)可检测出所有双比特的错。
(3)可检测出所有小于、等于校验位长度的突发错。
2 CRC 码编码
在 1.3 节《线性分组码和循环码》中得到算式 1-15 的计算过程就是循环冗
余校验码的编码步骤,归纳起来有以下三步骤:
第 1 步预先用𝑥 𝑛 ‒ 𝑘乘以信息多项式u(𝑥),得到𝑥 𝑛 ‒ 𝑘 u(𝑥);
第 2 步用生成多项式g(x)去除𝑥 𝑛 ‒ 𝑘 u(𝑥),获得余式v(𝑥);
第 3 步整合余式v(𝑥)和𝑥 𝑛 ‒ 𝑘 u(𝑥),获得码多项式𝑥𝑛 ‒ 𝑘 u(𝑥) + 𝑣(𝑥)。
对于一个(𝑛,𝑘)循环码,生成多项式
g(x) = 𝑥 𝑛 ‒ 𝑘 + 𝑔𝑛 ‒ 𝑘 ‒ 1𝑥𝑛 ‒ 𝑘 ‒ 1 + ⋯ + 𝑔1𝑥1 + 1,编码电路有两种方式:
一,信息位由高位到低位的顺序从循环移位寄存器体左侧依次输入,信息
位完全进入循环体后继续输入n ‒ 𝑘 ‒ 1个 0,最后循环体中寄存器的值就是余式
码字;
g0
g1
gn-k-1
Din
+
D
+
D1
+ +
Dn-k-1
图 1 左侧串行输入循环移位寄存器体
二,信息位由高位到低位的顺序从循环移位寄存器体右侧依次输入,信息
位完全进入循环体后寄存器的值就是余式码字。
g0
g1
gn-k-1
D
+
D1
+ +
Dn-k-1
+
以 CRC4 为例,其生成多项式为:
g(x) = 𝑥 + 𝑥 + 1,当信息多项式
Din
图 2 右侧串行输入循环移位寄存器体
注:
1,移位寄存器循环体中余式码字低位在左侧,高位在右侧。
4
u = (101011)时用两种方法计算得到得余式码字是一样的:
𝑣 = (0100),编码
后完整地码字为:
(1010110100)。
图三所示的两种计算余式码字的方法对应于
数字电路中 D 触发器、加法器、乘法器的组成的循环体结构分别为图 1、图 2
所示。
方法一方法二
0
10
1
101
0
1010
1
10101
10011
0110
1
01101
0
11010
10011
01001
0
10010
10011
0001
0
10011
10000
10011
0011
00000
00110
10000
11100
10011
01111
00000
11110
10011
01101
10000
01010
10000
0100
1
0
1
0
1
1
00010
0
0100
图 3 信息位为单比特两种方法比较
3 CRC 码校验
3.1 CRC 码校验的基本原理
所有的 CRC 校验都是基于以下这个等式:
(𝑀𝑥𝑟 + 𝑅) 𝑚𝑜𝑑 𝐺 = 0
(3-1)
其中𝑀 = 𝑥 u(𝑥),
𝑟
u(𝑥) = 𝑢𝑛 ‒ 𝑙 ‒ 1𝑥
𝑛 ‒ 𝑙 ‒ 1
+ ⋯ + 𝑢1𝑥 + u0,
𝑟 = 𝑛 ‒ 𝑘,
𝑅 = 𝑣𝑟 ‒ 1𝑥𝑟 ‒ 1 + ⋯ + 𝑣1𝑥 + 𝑣0,
g(x) = 𝑔𝑛 ‒ 𝑘𝑥
𝑛 ‒ 𝑘
+ 𝑔𝑛 ‒ 𝑘 ‒ 1𝑥𝑛 ‒ 𝑘 ‒ 1 + ⋯𝑔1𝑥 + 1。
息字段多项式的最高次幂,𝑛取决于k的值即𝑛 = 2 ,𝑙是信息字段长度,G 是生
M 是信息字段(Message)多项式,R 是校验字段(Remainder)多项式,r
是校验字段多项式的最高次幂(也就是校验字段的长度,CRC-32 对应的𝑛 ‒ k,
依次类推),𝑛 ‒ 𝑙是信息字段加上冗余校验码后多项式的最高次幂,k ‒ 𝑙是信
k
成(Generator)多项式。
由此可见 CRC32 信息字段最大比特数为232 - 32,除此之
外的信息字段编码就是缩短的 CRC32 编码。
发送端 M 和 G(对某一种确定的 CRC 校验,其 G 是固定的)是已知的,CRC
计算就是 为了求出校验字段 R;接收端 M,R,G 都是已知的,主要的操作都是
为了验证等式是否成立,方法有很多种。
下表展示了用于被用于一些常用的 CRC 标准的生成多项式,Hex 列表示
生成多项式对应的十六进制,MSB(most significant bit,可以理解为最左边
的一位)省略,因为该位总是为 1:
表一 几种典型 CRC 生成多项式
3.2 发送端和接收端的具体处理方法
参考文献[2]对 CRC 校验码的接收端有具体处理的描述,缺少中间推导过程。
CRC 校验码在工程应用过程中相比数学计算稍微有些变化:
1, 在发送端对全 0 数据包的编码处理。
数学计算中,当信息字段全部为 0 时的得到的余式码字也是全零的,但是
在工程应用中,当非 0 信息字段在编码后发送给接收端,在线路传输中出现干
扰或者是其他情况的错误,导致接收端收到的全零数据,即信息字段和余式字
段都为 0。
如果在发送端不做特殊处理,在接收端就检验不出来这样的错误数
据包。
于是,在通信传输时,很多协议规定在发送端对 CRC 编码时定义一个
Key 寄存器,对 CRC 编码进行初始化,定义一个不为 0 的初值,Key 寄存器通常
被设置为全 1。
结合图 1、图 2 来说,就是在信息输入给循环体之前,其 D 触发
器的值为 1。
2, 对接收端收到的数据包中拖尾 0 数据的处理。
接收端接收到信息字段和余式字段,计算出数据包的余式码字,并与余式
字段做比较,就能检测出错误。
更简单的做法是,接收端对接收 到的所有数据
求余式(包括信息字段和余式字段),如果没有传输错误所得的余式一定为
0。
但是,余式为 0 并不一定能够说明数据包没有改变,如果数据包在余式字段
后有 0 增加或者删除的情况出现,就无法被检测出来。
为了更好的理解公式的推导过程,需要用到 1.2 节中的几个关于取模运算
法则。
接收端如何才能识别无差错的传输呢?
我们知道在发送侧满足:
(𝑀𝑥𝑟 + 𝑅) 𝑚𝑜𝑑 𝐺 = 0
(3-1)
如果用R表示 R 对 1 取反,我们得到:
(Mx𝑟 + 𝑅) mod G = (Mx𝑟 + (x𝑟 ‒ 1 + x𝑟 ‒ 2 + ⋯ + 1 ‒ 𝑅)) 𝑚𝑜𝑑 𝐺
= ((𝑀𝑥𝑟 ‒ 𝑅) + x𝑟 ‒ 1 + x𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺
= ((𝑀𝑥𝑟 + 𝑅) + x𝑟 ‒ 1 + x𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺
= (((M𝑥𝑟 + 𝑅) mod G) + ((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺)) 𝑚𝑜𝑑 𝐺
= (0 + ((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺)) 𝑚𝑜𝑑 𝐺
= ((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺) 𝑚𝑜𝑑 𝐺
= (𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺
因此,在发送端发出来的无差错的传输的校验序列应该是:
在接收侧收到的完整码字多项式:
𝑀 = 𝑀𝑥 + 𝑅
用多项式G对𝑀 𝑥 取模为:
(𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺
'𝑟
' 𝑟
(3-2)
(3-3)
(𝑀'𝑥𝑟) 𝑚𝑜𝑑 𝐺 = (( 𝑀𝑥𝑟 + 𝑅)𝑥𝑟) 𝑚𝑜𝑑 𝐺
= ((𝑀𝑥𝑟 + (𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1 ‒ 𝑅))𝑥𝑟) 𝑚𝑜𝑑 𝐺
= ((𝑀𝑥𝑟 + (𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1 + 𝑅))𝑥𝑟) 𝑚𝑜𝑑 𝐺
= ((𝑀𝑥𝑟 + 𝑅 + (𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1))𝑥𝑟) 𝑚𝑜𝑑 𝐺
= (((𝑀𝑥𝑟 + 𝑅 + (𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1)) 𝑚𝑜𝑑 𝐺 )𝑥𝑟)𝑚𝑜𝑑 𝐺
= (((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1) 𝑚𝑜𝑑 𝐺 )𝑥𝑟)𝑚𝑜𝑑 𝐺
= ((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1)𝑥𝑟)𝑚𝑜𝑑 𝐺
因此,在接收端计算出的无差错的传输的校验和应该是:
((𝑥𝑟 ‒ 1 + 𝑥𝑟 ‒ 2 + ⋯ + 1)𝑥𝑟) 𝑚𝑜𝑑 𝐺
(3-4)
对于给定的生成多项式 G,上式是一个常数,对 CRC-32 而言,该值成为余式多
项式为:
𝑥31 + 𝑥30 + 𝑥26 + 𝑥25 + 𝑥24 + 𝑥18 + 𝑥15 + 𝑥14 + 𝑥12 + 𝑥11 + 𝑥10 + 𝑥8 + 𝑥6 + 𝑥5
+ 𝑥4 + 𝑥3 + 𝑥 + 1
(3-5)
余式值用十六进制表示:
C704DD7B。
到此,关于通信用的 CRC 校验实现原理除了通信过程中比特流顺序之外,
基本上是理顺,使得知其然也知其所以然。
参考文献[1]《纠错码原理》
参考文献[2]《CYCLIC REDUNDANCY CHECK》
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CRC 校验 原理 推导 过程
![提示](https://static.bdocx.com/images/bang_tan.gif)