循环冗余校验(CRC)算法的实现Word下载.docx

上传人:b****1 文档编号:13180775 上传时间:2022-10-07 格式:DOCX 页数:32 大小:261.38KB
下载 相关 举报
循环冗余校验(CRC)算法的实现Word下载.docx_第1页
第1页 / 共32页
循环冗余校验(CRC)算法的实现Word下载.docx_第2页
第2页 / 共32页
循环冗余校验(CRC)算法的实现Word下载.docx_第3页
第3页 / 共32页
循环冗余校验(CRC)算法的实现Word下载.docx_第4页
第4页 / 共32页
循环冗余校验(CRC)算法的实现Word下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

循环冗余校验(CRC)算法的实现Word下载.docx

《循环冗余校验(CRC)算法的实现Word下载.docx》由会员分享,可在线阅读,更多相关《循环冗余校验(CRC)算法的实现Word下载.docx(32页珍藏版)》请在冰豆网上搜索。

循环冗余校验(CRC)算法的实现Word下载.docx

本科课程论文作者签名:

二○一六年四月十四日

课程论文成绩评定表

质量评价指标(在相应栏目打√)

评价项目

论文与设计评价质量

按对应项目打分

工作量和态度(10分)

分析问题能力(10分)

解决问题能力(10分)

内容完整层次分明(10分)

设计、实验正确性(10分)

书写规范(10分)

流程图或拓扑图(10分)

论证充分(10分)

测试结果情况(10分)

总体评价(10分)

评定成绩(100分制)

指导教师签名

年月日

目录

一、选题背景 1

1.设计要求 1

2.循环冗余CRC简介 1

3.应解决的主要问题 2

二、方案论证 2

1.循环冗余检验的原理 2

2.方案的选择及特点 4

三、过程论述 8

1.第一部分 8

2.第二部分 9

3.第三部分 11

4.第四部分 11

四、结果分析 12

1.CRC算法的实现 12

2.突变的产生和校验结果 13

3.无法检错的实例 14

五、总结 15

心得体会 17

参考文献 17

附件一:

程序源代码 18

一、

VI

一、选题背景

题目17循环冗余校验(CRC)算法的实现

1、设计要求

(1)利用结构体或数组模拟网络数据包结构。

(2)编码实现CRC算法,并将得到的校验位附加到网络数据包相应的位置。

(3)根据数据包的长度,随机生成一个数据包产生突变的位置,并对该位置的bit位模拟突变的产生。

(4)重新利用CRC算法校验该数据包,并指出产生的结果。

(5)CRC能够检出所有的错误吗?

如果不能,你能构造出无法检错的实例吗?

2、循环冗余CRC简介

循环冗余校验码(CRC码,CRC=CyclicRedundancyCheck):

是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。

CRC码是由两部分组成,前部分是信息码,就是需要检验的信息,后部分是检验码,采用的是一种多项式的编码方法。

循环码和码字多项式是CRC中的两个基本概念。

CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(CRC码)n位,并附在信息后边,构成一个新的二进制码序列数共(k+n)位,最后发送出去。

在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。

循环冗余校验码CRC是一种高效率且可靠的方法,由线性分组码分支而来的,是一种通过多项式除法检测错误的很不寻常而又巧妙的方法,一方面它有很强的检测能力,二是它的编码器电路及错误检测器电路都很容易实现,它的优点使它在通信系统中得到了广泛的应用。

现实的通信链路都不会是理想的。

这就是说,比特在传输过程中可能会产生差错:

1可能会变成0,而0也可能变成1。

这就叫做比特差错。

比特差错是传输差错中的一种。

在一段时间内,传输错误的比特占所传输比特总数的比率称为误码率BEG。

误码率与信噪比有很大的关系。

如果设法提高信噪比,就可以使误码率减小。

实际的通信链路并非是理想的,它不可能使误码率下降到零。

因此,为了保证数据传输的可靠性,在计算机网络传输数据时,必须采用各种差错检测措施。

目前在数据链路层广泛使用了循环冗余检验CRC的检错技术。

3、应解决的主要问题

(1)选用哪种软件实现编程:

MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。

MATLAB提供了一个人机交互的数学系统环境,该系统的基本数据结构是矩阵,在生成矩阵对象时,不要求明确的维数说明。

与利用C语言作数值计算的程序设计相比,利用MATLAB可以节省大量的编程时间。

本次大作业采用数组模拟网络数据包结构,采用MATLAB操作简单,结果明了,故用MATLAB程序语言实现CRC校验的程序设计。

(2)理想的循环冗余校验算法应具有以下特征:

CRC相同的数据多次,每次得到的CRC值应该相同。

这也是通信过程中通过CRC校验数据在收发过程中是否出错的基本依据。

CRC不同的数据得到的CRC值应该不等。

(尽管通过估计伪造可能得到相同的CRC值,但要确保这种概率很小)

对于32位的CRC来说,它能区分2^32的数据,即长度为2^32的两个数据,只要有任何两位的值不同,它们分别经过CRC后得到的CRC值就不同。

(3)如何实现CRC算法过程:

本次设计采用模2除法运算求余数,程序中可表示为将待传送数据与生成多项式逐位异或。

因为待传送数据的位数不确定,一一编写容易出错且麻烦,不易于修改数据,因此在程序中采用for循环语句来逐位求解最终得到余数。

二、方案论证

1、循环冗余检验的原理

在发送端,先把数据划分为组,假定每组k个比特。

现假定待传送的数据M=101001(k=6)。

CRC运算就是在数据M的后面添加供差错检测用的n位冗余码,然后构成一个帧发送出去,一共发送(k+n)位。

在所要发送的数据后面增加n位的冗余码,虽然增大了数据传输的开销,但却可以进行差错检测。

当传输可能出现差错时,付出这种代价往往是很值得的。

这n位冗余码可用以下方达得出。

用二进制的模2运算进行2^n乘M的运算,这相当于在M后面添加n个0。

得到的(k+n)位的数除以收发双方事先商定的长度为(n+1)位的除数P,得到商是Q而余数是R(n位,比P少一位)。

关于除数P,在图2-1所示的例子中,M=101001(即k=6)。

假定除数P=1101(即n=3)。

经模2除法运算后的结果是:

商Q=110101(这个商并没有什么用处),而余数R=001。

这个余数R就作为冗余码拼接在数据M的后面发送出去。

这种为了进行检错而添加的冗余码常称为帧检验序列FCS。

因此加上FCS后发送的帧是101001001(即2^n*M+FCS),共有(k+n)位。

110101←Q(商)

P(除数)→1101√101001000←2^n*M(被除数)

1101

1110

1101

0111

0000

1110

1101

0110

0000

1100

1101

001←R(余数),作为FCS

图2-1说明循环冗余检验原理的例子

在接收端把接受到的数据以帧为单位进行CRC检验:

把收到的每一个帧都除以同样的除数P(模2运算),然后检查得到余数R。

如果在传输过程中无差错,那么经过CRC检验后得到的余数R肯定是0。

但如果出现误码,那么余数R仍等于零的概率是非常非常小的。

总之,在接收端对收到的每一帧经过CRC检验后,有以下两种情况:

(1)若得到的余数R等于0,则判定这个帧没有差错,就接受(accept)。

(2)若余数R不等于0,则判定这个帧有差错(但无法确定究竟是哪一位或哪几位出现了差错),就丢弃。

一种较方便的方法是用多项式来表示循环冗余检验过程。

在上面的例子中,用多项式P(X)=X^3+X^2+1表示上面的除数P=1101(最高位对应于X^3,最低位对应于X^0)。

多项式P(X)称为生成多项式。

现在广泛使用的生成多项式P(X)有以下几种:

CRC-16=X^16+X^15+X^2+1

CRC-CCITT=X^16+X^12+X^5+1

CRC-32=X^32+X^26+X^23+X^22+X^16+X^12+X^11+X^10+X^8+X^7+X^5+X^4+X^2+X+1

在数据链路层,发送端帧检验序列FCS的生成和接收端的CRC检验都是用硬件完成的,处理很迅速,因此并不会延误数据的传输。

如果在传送数据时不以帧为单位来传送,那么就无法加入冗余码以进行差错检验。

因此,如果要在数据链路层进行差错检验,就必须把数据划分为帧,每一帧都加上冗余码,一帧接一帧地传送,然后在接收方逐帧进行差错检验。

2、方案的选择及特点

由于本次编程需要达到五点要求,因此进行逐一分析。

在MATLAB中,数组的表现方式很简单,故采用数组模拟网络数据包结构。

要实现题目的五点要求,必须先理清循环冗余检验CRC算法的具体计算过程,以此为基础编写程序,再在初始算法程序上继续修改和添加来实现产生突变等的情况。

关于CRC算法过程,在阐述原理时已有大致讲到,一下是统一细致的分析。

2.1CRC编码规则

CRC码是由两部分组成,前部分是信息码,就是需要校验的信息,后部分是校验码,如果CRC码共长n个bit,信息码长k个bit,就称为(n,k)码。

它的编码规则是:

(1)移位

将原信息码(kbit)左移r位(k+r=n)

(2)相除

运用一个生成多项式g(x)(也可看成二进制数)用模2除上面的式子,得到的余数就是校验码。

非常简单,要说明的:

模2除就是在除的过程中用模2加,模2加实际上就是我们熟悉的异或运算,就是加法不考虑进位,公式是:

0+0=1+1=0,1+0=0+1=1

即‘异’则真,‘非异’则假。

由此得到定理:

a+b+b=a也就是‘模2减’和‘模2加’直值表完全相同。

有了加减法就可以用来定义模2除法,于是就可以用生成多项式g(x)生成CRC校验码。

2.2CRC码的生成步骤

第一步:

在数据单元(k位)的末尾加上n个0。

n是一个比预定除数的比特位数(n+1)少1的数。

第二步:

采用二进制除法将新的加长的数据单元(k+n位)除以除数。

由此除法产生的余数就是循环冗余码校验码。

第三步:

用从第二步得到的n个比特的CRC码替换数据单元末尾附加的n个0。

如果余数位数小于n,最左的缺省位数为0。

如果除法过程根本未产生余数(也就是说,原始的数据单元本身就可以被除数整除)那么以n个0作为CRC码替换余数所在的位置。

产生的比特模式正好能被除数整除。

2.3CRC校验过程展示

假设数据传输过程中需要发送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运算如图2-2:

图2-211001与10101做xor运算所

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1