- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CRC校验算法的分析及C语言实现
信息学院
现代通信网概论
期末论文
课 题: CRC校验算法的分析及C语言实现
姓 名: 文斌
指导老师: 周翔
院 系: 信息学院 通信工程专业
班 级: 通信一班
学 号: xx
摘要:在通信网络系统中,为了保证在数据链路层建立可靠、清晰的链接,可以加入一些冗余数据以便于检测错误,从而重传数据帧. 循环冗余校验(CRC) 就是一种被广泛采用的错误检验编码,本文详细分析了CRC 校验算法及用C语言实现.
关键词: 循环冗余校验(CRC) ; 生成多项式; CRC算法的C语言代码
CRC 校验原理
在代数编码理论中,为了便于计算, 把码组中各码元当作一个多项式的系数, 即长为n 的码组( an - 1an - 2 ?a1 a0) 可表示成T ( x ) = an - 1 x n - 1 + an - 2 x n - 2 + ?+ a1 x + a0 . CRC 校验正是利用码多项式的模2运算,让被校验数据能为某一提前选定的生成多项式所除,如果能除尽,表明代码正确,如果除不尽,表明代码错误,余数则指明出错位所在位置. 因为任意一组仅由信息位组成的码,很可能除不尽,所以在信息位后附加若干称为校验位的冗余位,可以保证由信息位和冗余位组成的码组能被生成多项式整除,CRC 校验中,生成多项式的选取决定了校验位的宽度以及编码的检纠错能力,通信系统中常用的生成多项式为:
CRC - 16/ ARC G(X) - 1 ,8005H
CRC - 16/ CITT G(X) - 1 ,1021H
CRC - 32/ ADCCP G(X) - 1 ,04C11DB7H
《二》CRC校验算法公式
三 编码方法
设生成多项式g ( x) 为r 次,信息码多项式为m ( x) ,编码步骤如下:
(1) 用x r 乘m ( x) ,即在信息位后附加r 个“0”.
(2) g ( x ) 除以x rm ( x ) ,得到商式Q ( x) 和余式r ( x) ,即
x rm ( x )/g ( x ) = Q ( x) + r ( x)/g ( x)
.(3) 输出码多项式为T ( x ) = x rm ( x) + r ( x) .
四 解码方法
将收到的编码用生成多项式去除,若码字无误则余数为0. 否则,余数不为0 ,通过查表可以确定出错位.CRC 校验可用于检错、纠错或检纠错,但不论用途如何,如果校验和(余数) 求出,只需简单的判断便可
进行检错或纠错. 因此,本文重点讨论对于任意码多项式的余数的算方法及实现.
五 用C 语言程序实现方法
下面以最常用的CRC-16 为例来说明其生成过程。假设发送信息用信息多项式K(X)表示,将K(x)左移R 位,则可表示成k(x)*2R,这样K(x)的右边就会空出R 位,这就是校验码的位置。通过k(x)*2R 除以生成多项式G(x)得到的余数就是校验码。实现方法:
1) 最高幂次为R 的生成多项式G(x)转换成对应的R+1 位二进制数。
2) 码左移R 位,相当与对应的信息多项式k(x)*2R。
3) 多项式(二进制数)对信息码做模2 除,得到R 位的余数。
4) 拼到信息码左移后空出的位置,得到完整的CRC 码。
C 语语言程序源代码:
#includestdio.h
void main()
{unsigned int g,k,r,l,n,b,c,d,e,p,i,s,j,cont;
register s1;
printf(以下数据一十六进制计数方式输入\n);
printf(请输入生成码的值:\n);
scanf(%d,g);
printf(请输入信息码的值:\n);
scanf(%d,k);
{unsigned int m,w=0; /* 测量生成码的长度r*/
m=g;
do {m=1;w++;}
while (m!=0);
r=w;}
{unsigned int m,w=0; /* 测量信息码的长度n*/
m=k;
do {m=1;w++;}
while (m!=0);
n=w;}
k=r-1; /* 信息码左移r-1 位,相当于
文档评论(0)