用查表法计算 CRC 码的程序设计,生成多项式为 CRC-CCITT
姓名: 学号:班 指导老师:
一、设计目标
1)掌握 CRC 码的计算方法;
2)掌握用 C 语言计算 CRC 码的算法;
3)熟练并掌握 C 语言在通信网络中的编程实现方式及功能;
二、设计原理和方法
1、 CRC 简介及原理:
CRC 码为循环冗余校验码,基本表示方式为
( , )n k
,其中 n 为数据位数,k 为
校验码位数。CRC 码校验的基本思想是利用线性编码理论,在发送端根据要传送的(n-k)
位二进制码序列,以一定的规则产生一个校验用的监督码(既 CRC 码)r 位,并附在信
息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。在接收端,则根据信息
码和 CRC 码之间所遵循的规则进行检验,以确定传送中是否出错。采用 CRC 校验时,
发送方和接收方用同一个生成多项式 g(x),并且 g(x)的首位和最后一位的系数必
须为 1。CRC 的处理方法是:发送方以 g(x)去除 t(x),得到余数作为 CRC 校验码。
校验时,以计算的校正结果是否为 0 为据,判断数据帧是否出错。CRC 校验可以 100%
地检测出所有奇数个随机错误和长度小于等于 k(k 为 g(x)的阶数)的突发错误。
所以 CRC 的生成多项式的阶数越高,那么误判的概率就越小。CCITT 建议:2048 kbit/s
的 PCM 基群设备采用 CRC-4 方案,使用的 CRC 校验采用 16 位 CRC 校验。在 IBM 的同
步数据链路控制规程 SDLC 的帧校验序列 FCS 中,使用 CRC-16。CRC 的本质是模-2 除
法的余数,采用的除数不同,CRC 的类型也就不一样。通常,CRC 的除数用生成多
项式来表示。最常用的 CRC 码的生成多项式有 CRC16,CRC32.
16 位 CRC 码的产生的规则是先将要发送的二进制序列数左移 16 位(既乘以
16
2
)
后,再除以一个多项式(生成多项式
( )G x
),最后得到的余数既是 CRC 码,如式(2-1)
式所示,其中 C(X)表示(n-k)位的二进制序列数,G(X)为多项式,Q(X)为商(整数),
R(X)是余数(既 CRC 码)。
16
( ) 2 ( )
( )
( ) ( )
C x R x
Q x
G x G x
×
= +
(2-1)
求 CRC 码所采用模 2 加减运算法则,既是不带进位和借位的按位加减,这种加减
运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数
式的乘除法运算是一样,符合同样的规律。
本课程设计中使用的生成多项式是由欧洲 CCITT 推荐 CRC-CCITT,即:
16 12 5
( ) 1G x x x x= + + +
接收方将接收到的二进制序列数(包括信息码和 CRC 码)除以多项式,如果余数
为 0,则说明传输中无错误发生,否则说明传输有误。用软件计算 CRC 码时,接收方可
以根据接收到的信息码求 CRC 码,比较结果和接收到的 CRC 码是否相同。
2、用查表法实现的 C 语言算法原理:
评论0