一、
CRC
码工作原理
1. CRC
校验原理
CRC
的英文全称为
Cyclic Redundancy Check
(
Code
),中文
名称为循环冗余校验(码)。它是一类重要的线性分组码,编码和解
码方法简单,
检错和纠错能力强,
在通信领域广泛地用于实现差错控
制。
CRC
计算与普通的除法计算有所不同。普通的除法计算是借位
相减的,而
CRC
计算则是异或运算。任何一个除法运算都需要选取
一个除数,在
CRC
运算中我们称之为
poly
,而宽度
W
就是
poly
最
高位的位置。比如
poly 1001
的
W
是
3
,而不是
4
。注意最高位总是
1
,当你选定一个宽度,那么你只需要选择低
W
各位的值。假如我们
想计算一个位串的
CRC
码,并要保证每一位都要被处理,因此我们
需要在目标位串后面加上
W
个
0
。
CRC
校验原理看起来比较复杂,因为大多数书上基本上是以二
进制的多项式形式来说明的。
其实很简单的问题,
其根本思想就是先
在要发送的帧后面附加一个数
(这个就是用来校验的校验码,
但要注
意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收
端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送
端和接收端共同选定的某个特定数整除
(注意,
这里不是直接采用二
进制除法,而是采用一种称之为
“
模
2
除法
”
)。到达接收端后,再把
接收到的新帧除以(同样采用
“
模
2
除法
”
)这个选定的除数。因为在