基于MATLAB的CRC编码与译码的设计与仿真.docx
- 文档编号:11706964
- 上传时间:2023-03-30
- 格式:DOCX
- 页数:22
- 大小:65.97KB
基于MATLAB的CRC编码与译码的设计与仿真.docx
《基于MATLAB的CRC编码与译码的设计与仿真.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的CRC编码与译码的设计与仿真.docx(22页珍藏版)》请在冰豆网上搜索。
基于MATLAB的CRC编码与译码的设计与仿真
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2012年春季学期
《计算机通信与网络》课程设计
题目:
差错控制编码的编译码设计与仿真
专业班级:
09级通信工程(4)班
******
学号:
********
******
成绩:
摘要
通信是信息远距离的传送,是人类生产和生活的主要支撑。
通信的目的是要把信息及时可靠地传送给对方,在数据通信过程中,衰损、失真、和噪声会使通信线路上的信号发生错误。
差错控制可以减少错误、提高通信质量,可以改善传输信道的电气特性,使误码率达到要求。
CRC(CyclicalRedundancyChecking)循环冗余校验码是一种重要的线性分组码,通过多项式除法检测错误,是在数据通信和数据检测中广泛应用的检错校验的循环码。
本设计研究了CRC循环冗余校验码的原理,以及利用C语言对其进行了编程和编译仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而确定传输过程是否出错,得到的结论和理论上是一致的。
关键词:
检错码;CRC循环冗余校验码;C语言
前言
随着科学技术的进步,人们对信息传递的要求逐渐提高。
但在通信系统中,可靠性与有效性是对矛盾,要求有效性提高,必然使每个码元所占的时间缩短,从而受干扰和产生错误的可能性增大,可靠性降低了;要提高信息的可靠性,又使信息速率变慢有效性降低。
在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,所收到的数字信号不可避免的会发生错误。
为了加强通信系统的可靠性,除了合理设计基带信号,选择调制、解调方式,采用频域均衡、时域均衡之外,还需要采用信道编码,即差错控制编码,使误码率进一步降低,来满足指标要求。
循环冗余校验码CRC(CyclicalRedundancyChecking)是目前通信系统中最常用的一种差错控制编码。
循环冗余校验码是一种高效率且可靠的方法,由线性分组码分支而来的,是一种通过多项式除法检测错误的很不寻常而又巧妙的方法,一方面它有很强的检测能力,二是它的编码器电路及错误检测器电路都很容易实现,它的优点使它在通信系统中得到了广泛的应用。
利用CRC进行检错的过程可简单描述为:
在发送端根据要传送的二进制码序列,以一定的规则产生一个校验用的监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数,然后发送出去。
在接收端根据信息码和CRC码之间所遵循的规则进行检验,一旦传输过程中发生差错,则信息码元与监督码元之间的关系遭到破坏,从而可以发现错误,乃至纠正错误[1-2]。
CRC校验采用多项式编码方法,被处理的数据块表示为一个二进制多项式。
本次课设使用的是C语言软件进行设计与仿真。
C语言是一种计算机程序设计语言。
它既有高级语言的特点,又具有汇编语言的特点。
它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛,是当前已成为教学和科研中最常用而必不可少的工具。
第1章设计任务及要求
1.1设计目的及意义
在实际的通信系统中,由于信道传输特性不理想以及加性噪声的影响,传输的信息中不可避免地会发生错误,影响通信系统的传输可靠性。
随着数字通信技术的发展,各种业务对系统误码率的要求也逐渐提高,采用差错控制编码技术是提高数字通信可靠性的有效方法之一。
差错控制编码就是在发送端的信息码元序列中,以某种确定的编码规则加入一些监督码元,使信息码元与监督码元之间具有某种相关性。
接收端通过检验这种相关性是否存在来判断在传输过程中是否出现了误码。
线性分组码、巴克码、CRC冗余校验码等都是目前较为流行的差错控制编码技术之一。
1.2设计任务及要求
利用C语言、MATLAB、LabVIEW等软件编程,实现如下的工作:
1掌握差错控制编码的基本原理;
2查找并分析选择一个合理的差错控制编码;
3熟悉C语言、MATLAB、LabVIEW等软件开发工具;
4根据选用的差错控制编码分别推导编码与译码过程;
5用软件编程实现差错控制编码的编码与译码部分;
6假定待传输的数字基带信号,仿真并给出差错控制编码的编码结果;
7分别在无差错和部分差错的情况下仿真给出差错控制编码的译码结果。
第2章基本原理
2.1计算机通信与纠错码
2.1.1通信的概念
通信就是克服距离上的障碍,从一地向另一地传递和交换消息。
消息是信息源所产生的,是信息的物理表现,例如,语音、文字、数据、图形和图像等都是消息(Message)。
消息由模拟消息(如语音、图像等)以及数字消息(如数据、文字等)之分。
所有消息必须在转换成电信号(通常简称为信号)。
所以,信号(Signal)是传输消息的手段,信号是消息的物资载体。
相应的信号可以分为模拟信号和数字信号,模拟信号的自变量可以是连续的或离散的后才能在通信系统中传输,但幅度是连续的,如电话机、电视摄像机输出的信号就是模拟信号。
数字信号的自变量可以是连续的或离散的,但幅度是离散的,如计算机等各种数字终端设备输出的信号就是数字信号。
通信的目的是传递消息,但对受信者有用的是消息中包含的有效内容,即信息(Information)。
消息是具体的、表面的,而信息是抽象的、本质的,且消息中包含的信息的多少可以用信息量来度量。
通信技术,特别是数字通信技术近年来发展非常迅速,它的应用越来越广泛。
数字通信系统较模拟通信系统而言,具有抗干扰能力强、便于加密、易于实现集成化、便于与计算机连接等优点。
因而,数字通信更能适应对通信技术的高要求。
2.1.2计算机通信
计算机通信是一种以数据通信形式出现,在计算机与计算机之间或计算机与终端设备之间进行信息传递的方式。
它是现代计算机技术与通信技术相融合的产物,在军队指挥自动化系统、武器控制系统、信息处理系统、决策分析系统、情报检索系统以及办公自动化系统等领域得到了广泛应用。
计算机通信按照传输连接方式的不同,可分为直接式和间接式两种。
直接式是指将两部计算机直接相联进行通信,可以是点对点,也可以是多点通播。
间接式是指通信双方必须通过交换网络进行传输。
按照通信覆盖地域的广度,计算机通信通常分为局域式、城域式和广域式三类。
局域式是指在一局部的地域范围内(例如一个机关、学校、军营等)建立计算机通信。
局域计算机通信覆盖地区的直径在数公里以内。
城域式是指在一个城市范围内所建立的计算机通信。
城域计算机通信覆盖地区的直径在十公里到数十公里。
广域式是指在一个广泛的地域范围内所建立的计算机通信。
通信范围可以超越城市和国家,以至于全球。
广域计算机通信覆盖地区的直径一般在数十公里到数干公里乃至上万公里。
在通常情况下,计算机通信都是由多台计算机通过通信线路连接成计算机通信网进行的,这样可共享网络资源,充分发挥计算机系统的效能。
2.1.3纠错码
纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。
仅用来发现错误的码一般常称为检错码。
为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。
关系的建立称为编码。
码字到达收端后,可以根据编码规则是否满足以判定有无错误。
当不能满足时,按一定规则确定错误所在位置并予以纠正。
纠错并恢复原码字的过程称为译码。
检错码与其他手段结合使用,可以纠错。
纠错编码又称信道编码,它与信源编码是信息传输的两个方面。
它们之间存在对偶的关系。
应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。
为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。
准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。
关系的建立称为编码。
码字到达收端后,用编码时所用的规则去检验。
如果没有错误,则原规则一定满足,否则就不满足。
由此可以根据编码规则是否满足以判定有无错误。
当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。
纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。
检错码与其他手段结合使用,可以纠错。
检错反馈重发系统(ARQ系统)就是一例。
在构造纠错码时,将输入信息分成k位一组以进行编码。
若编出的校验位仅与本组的信息位有关,则称这样的码为分组码。
若不仅与本组的k个信息位有关,而且与前若干组的信息位有关,则称为格码。
这种码之所以称为格码,是因为用图形分析时它象篱笆或格架。
线性格码在运算时为卷积运算,所以叫卷积码。
2.1.4纠错原理
纠错码能够检错或纠错,主要是靠码字之间有较大的差别。
这可用码字之间的汉明距离d(x,y)来衡量。
它的定义为码字x与y之间的对应位取不同值的码元个数。
一种纠错码的最小距离d定义为该种码中任两个码字之间的距离的最小值。
一种码要能发现e个错误,它的最小距离d应不小于e+1。
若要能纠正t个错误,则d应不小于2t+1。
一个码字中非零码元的个数,称为此码字的汉明重量。
一种码中非零码字的重量的最小值,称为该码的最小重量。
对线性码来说,一种码的最小重量与其最小距离在数值上是相等的。
在构造线性码时,数字上是从n维空间中选一k维子空间,且使此子空间内各非零码字的重量尽可能大。
当构造循环码时,可进一步将每一码字看成一多项式,将整个码看成是多项式环中的理想,这一理想是主理想,故可由生成多项式决定;而多项式完全可由它的根规定。
这样,就容易对码进行构造和分析。
这是BCH码等循环码构造的出发点。
一般地说,构造一种码时,均设法将它与某种代数结构相联系,以便对它进行描述,进而推导它的性质,估计它的性能和给出它的译码方法。
若一种码的码长为n,码字数为M,或信息位为h,以及最小距离为d,则可把此码记作【n,M,d】码。
若此码为线性码,常简记作(n,k)或(n,k,d)码。
人们还常用R=log2M/n表示码的信息率或简称码率,单位为比特/码元。
R越大,则每个码元所携带的信息量越大,编码效率越高。
纠错码实现中最复杂的部分是译码。
它是纠错码能否应用的关键。
根据式
(1),采用的码长n越大,则误码率越小。
但n越大,编译码设备也越复杂,且延迟也越大。
人们希望找到的译码方法是:
误码率随码长n的增加按指数规律下降;译码的复杂程度随码长n的增加接近线性地增加;译码的计算量则与码长n基本无关。
可惜,已经找到的码能满足这样要求的很少。
不过由于大规模集成电路的发展,既使应用比较复杂的但性能良好的码,成本也并不太高。
因此,纠错码的应用越来越广泛。
纠错码传输的都是数字信号。
这既可用硬件实现,也可用软件实现。
前者主要用各种数字电路,主要是采用大规模集成电路。
软件实现特别适合计算机通信网等场合。
因为这时可以直接利用网中的计算机进行编码和译码,不需要另加专用设备。
硬件实现的速度较高,比软件可快几个数量级。
在传信率一定的情况下,如果采用纠错码提高可靠性,要求信道的传输率增加,带宽加大。
因此,纠错码主要用于功率受限制而带宽较大的信道,如卫星、散射等系统中。
纠错码还用在一些可靠性要求较高,但设备或器件的可靠性较差,而余量较大的场合,如磁带、磁盘和半导体存储器等。
在分组码的研究中,谱分析的方法受到人们的重视。
纠同步错误码、算术码、不对称码、不等错误纠正码等,也得到较多的研究。
2.2CRC循环冗余校验码
2.2.1CRC的介绍
在计算机通信中用得最广泛的检错码是一种漏检率低得多也便于实现的循环冗余校验码CRC(CyclicalRedundancyChecking),又称多项式码。
这使因为,任何一个由二进制数位串组成的代码都可以和一个含有0和1两个系数的多项式建立一一对应关系,一个k位帧可以看成是从
到
的k次多项式的系数序列,这个多项式的阶数为k-1,高位(最左边)是
项的系数,下一位是
例如,1011011有7位,表示生成多项式是
;而生成多项式
对应的位串是110110。
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.2.2CRC的基本原理
CRC校验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+r)位,最后发送出去。
在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。
16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(乘以216)后,再除以一个多项式,最后所得到的余数既是CRC码。
求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。
接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误。
在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码又叫(N,K)码。
对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。
根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。
校验码的具体生成过程为:
假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*2R,这样C(x)的右边就会空出R位,这就是校验码的位置。
通过C(x)*2R除以生成多项式G(x)得到的余数就是校验码。
几个基本概念
1、多项式与二进制数码
多项式和二进制数有直接对应关系:
x的最高幂次对应二进制数的最高位,以下各位对应多项式的各幂次,有此幂次项对应1,无此幂次项对应0。
可以看出:
x的最高幂次为R,转换成对应的二进制数有R+1位。
多项式包括生成多项式G(x)和信息多项式C(x)。
如生成多项式为G(x)=
,可转换为二进制数码11011。
而发送信息位1111,可转换为数据多项式为C(x)=
。
2、生成多项式
是接受方和发送方的一个约定,也就是一个二进制数,在整个传输过程中,这个数始终保持不变。
在发送方,利用生成多项式对信息多项式做模2除生成校验码。
在接受方利用生成多项式对收到的编码多项式做模2除检测和确定错误位置。
应满足以下条件:
a、生成多项式的最高位和最低位必须为1。
b、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做模2除后应该使余数不为0。
c、不同位发生错误时,应该使余数不同。
d、对余数继续做模2除,应使余数循环。
将这些要求反映为数学关系是比较复杂的。
但可以从有关资料查到常用的对应于不同码制的生成多项式如下所示:
N K 码距d G(x)多项式 G(x)
7 4 3
1011
7 4 3
1101
7 3 4
11101
7 3 4
10111
15 11 3
10011
15 7 5
111010001
31 26 3
100101
31 21 5
11101101001
63 57 3
1000011
63 51 5
1010000110101
1041 1024
11000000000000101
3、模2除(按位除)
模2除做法与算术除法类似,但每一位除(减)的结果不影响其它位,即不向上一位借位。
所以实际上就是异或。
然后再移位移位做下一位的模2减。
步骤如下:
a、用除数对被除数最高几位做模2减,没有借位。
b、除数右移一位,若余数最高位为1,商为1,并对余数做模2减。
若余数最高位为0,商为0,除数继续右移一位。
c、一直做到余数的位数小于除数时,该余数就是最终余数。
4、CRC码的生成步骤
生成CRC码的基本原理:
任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。
例如:
代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。
(1)、将x的最高幂次为R的生成多项式G(x)转换成对应的R+1位二进制数。
(2)、将信息码左移R位,相当与对应的信息多项式C(x)*2R
(3)、用生成多项式(二进制数)对信息码做模2除,得到R位的余数。
(4)、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
5、CRC的和纠错
在接收端收到了CRC码后用生成多项式为G(x)去做模2除,若得到余数为0,则码字无误。
若如果有一位出错,则余数不为0,而且不同位出错,其余数也不同。
可以证明,余数与出错位的对应关系只与码制及生成多项式有关,而与待测碼字(信息位)无关。
下面给出了G(x)=1011,C(x)=1010的出错模式,改变C(x)(码字),只会改变表中码字内容,不改变余数与出错位的对应关系。
收到的CRC码字 余数 出错位
码位 A7 A6 A5 A4 A3A2 A1
正确 1 0 1 0 0 1 1
错误 1 0 1 0 0 1 0
1 0 1 0 0 0 1
1 0 1 0 1 1 1
1 0 1 1 0 1 1
1 0 0 0 0 1 1
1 1 1 0 0 1 1
0 0 1 0 0 1 1
001010100011110111101 1234567
得出(7,4)CRC码的出错模式(G(x)=1011),如果循环码有一位出错,用G(x)作模2除将得到一个不为0的余数。
如果对余数补0继续除下去,我们将发现一个有趣的结果;各次余数将按图10顺序循环。
例如第一位出错,余数将为001,补0后再除,第二次余数为010,以后依次为100,0ll…,反复循环,这就是“循环码”名称的由来。
这是一个有价值的特点。
如果我们在求出余数不为0后,一边对余数补0继续做模2除,同时让被检测的校验码字循环左移。
图10说明,当出现余数(101)时,出错位也移到A7位置。
可通过异或门将它纠正后在下一次移位时送回A1。
这样我们就不必像海明校验那样用译码电路对每一位提供纠正条件。
当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因。
在串行通信中,生成多项式的选取时提高差错控制能力的关键因素。
在使用中,通常使用下列三种生成多项式
来产生CRC校验码。
CRC-16:
=
+
+
CRC-CCITT:
=
CRC-32:
=
CRC检验是一种较为简单的检验方法,而且纠错能力强,特别适合检测突发性错误,在计算机中得到广泛应用,是目前应用最多的一种校验方法之一。
一般情况下,r位生成多项式产生的CRC码可检测出所有的双错、奇数位错和突发长度小于等于r的突发错以及(1-2-(r-1))的突发长度为r+1的突发错和(1-2-r)的突发长度大于r+1的突发错。
例如,对上述r=16的情况,就能检测出所有突发长度小于等于16的突发错以及99.997%的突发长度为17的突发错和99.998%的突发长度大于17的突发错。
所以CRC码的检错能力还是很强的。
这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。
6、计算余数的二进制除法
第一步,要在数据位(被除数)后边补0,0的个数比除数(生成多项式)少一位。
第二步,做除法,从被除数的头五位减去五位的除数。
除数的每一位都与被除数的对应位在不涉及上一位的情况下独立进行减法(实际进行的是模2加)。
在本例中,除数11001与被除数的前五位10110进行的是模2加,得到1111(余数1前面的0被省略)。
在被除数中下一个没有使用过的比特接着被抄录下来,使得余数的位数和除数的位数相同。
如果位数不够,在商位补0(这与一般除法相同),因此,下一步就是1111011001,结果是111,依次类推。
在二进制除法中,除数总是以1开头的,然后从上一次的被除数/余数中与除数位数相同的部分中减去除数,并且只能从最左位是1的被除数/余数中减去除数。
每当被除数/余数的最左位是0时,就在该步骤中把0丢弃,再把被除数中的下一个未使用比特抄录下来填充余数,同时对应的商数位补一个零,并按上述方法进行二进制除法运算,一直重复这个过程直到被除数中所有比特都被使用过。
余数100只有3位,而余数应为4位(比除数少一位),因此,取校验码时应在前面填一个0,故其CRC校验码应为0100,于是可求出该信息码的循环冗余码为101100110100。
第3章C语言编程与运行
3.1C语言介绍
C语言是一种计算机程序设计语言。
它既有高级语言的特点,又具有汇编语言的特点。
它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
因此,它的应用范围广泛。
C语言是一种结构化语言。
它层次清晰,便于按模块化方式组织程序,易于调试和维护。
C语言的表现能力和处理能力极强。
它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。
它还可以直接访问内存的物理地址,进行位(bit)一级的操作。
3.2C语言的发展过程
C语言的原型ALGOL60语言(也成为A语言)。
1963年,剑桥大学将ALGOL60语言发展成为CPL(CombinedProgrammingLanguage)语言。
1967年,剑桥大学的MatinRichards对CPL语言进行了简化,于是产生了BCPL语言。
1970年,美国贝尔实验室的KenThompson
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 MATLAB CRC 编码 译码 设计 仿真