计算机通信课程设计说明书_第1页
计算机通信课程设计说明书_第2页
计算机通信课程设计说明书_第3页
计算机通信课程设计说明书_第4页
计算机通信课程设计说明书_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、*实践教学* XXXXX大学计算机与通信学院XXX年春季学期计算机通信课程设计 指导教师: 人数:摘要:循环码是实际差错控制系统中常用的编码方案,具有检错纠错能力强、实现方便等特点。本文在理论分析循环码编码和译码基本原理的基础上,详细介绍了(7,4)循环码实现编码、译码的方法,分析了用(7, 4)循环码的编译码实现系统低差错率传输信息的可行性,并进行了误差分析。最后用C语言编程实现软件的编译码和差错处理,且考虑到了软件的通用性。关键字:循环码 编译 C语言 前言随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化

2、水平的显著提高,人们对生活质量及工作软件的要求也越来越高。计算机通信是一种以数据通信形式出现,在计算机与计算机之间或计算机与终端设备之间进行信息传递的方式。它是现代计算机技术与通信技术相融合的产物,在军队指挥自动化系统、武器控制系统、信息处理系统、决策分析系统、情报检索系统以及办公自动化系统等领域得到了广泛应用。计算机通信系统是经典的数字通信系统,它是计算机技术和通信技术结合的产物,一方面通信网络为计算机之间的数据传递和交换提供必要的设施和手段;另一方面,数字计算机技术的发展渗透到通信技术中,又提高了通信网络的各种性能,二者相互渗透、互相促进、共同发展。在实际的通信系统中,由于信道传输特性不理

3、想以及加性噪声的影响,接收到的信息中不可避免地会发生错误,影响通信系统的传输的可靠性。随着数字通信技术的发展,各种业务对系统误码率的要求也逐渐提高,差错控制编码技术是提高数字通信可靠性的有效方法之一。循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。它有许多特殊的代数性质,这些性质有助于按所要求的纠错能力系统地构造这类码,且易于实现;同时循环码的性能也较好,具有较强的检错和纠错能力。正是由于循环码具有码的代数结构清晰、性能较好、编译码简单和易于实现的特点,因此在目前的计算机纠错系统中所使用的线性分组码几乎都是循环码。目 录第1章 循环码概念及其编译码原理介绍11.1 (n ,k)循

4、环码概念11.2 编码过程及实现21.3译码过程及实现3第2章(7,4)循环码52.1生成多项式52.2生成矩阵和校验矩阵52.3(7,4)循环码的全部码字52.4误差分析和可行性分析6第3章(7,4)循环码编译码的软件实现83.1编译码软件实现思想83.2(7,4)循环码的编码流程框图93.3(7,4)循环码的译码流程框图93.3 C语言平台简介103.4 程序运行结果10总 结14致 谢15附:参考源程序16参考文献20第1章 循环码概念及其编译码原理介绍1.1 (n ,k)循环码概念在实际应用中,数据传输一般采用系统码的编码方式,即在发送的信息序列之后附加上特定位数序列的冗余位,该冗余位

5、称为所发送的信息序列的监督位。监督位一般是由所发送的信息序列经过恰当的变化而产生。若监督位由信息序列经过线性组合得到,则称得到的系统码为线性分组码。循环码是线性分组码的一个重要子类,具有严密的代数学理论。循环码“线性”是指任意两个循环码模2相加所得的新码仍为循环码。循环码具有线性码的一般性质(即封闭性指一种线性分组码的任意两个码组之和仍是该分组码的另一个码组)外,还具有循环性,即循环码中任一码组循环一位(将最右端码元移至左端,或反之)以后,仍为该码组中的一个码组。(n,k)循环码表示其中信息位为k,监督位为n-k位。若一个循环码的所有码字多项式都是一个次数最低的非零首一多项式g(x)的倍式,则

6、g(x)生成该码,并称g(x)为该码的生成元或生成多项式。若在GF(2)上的(n,k)循环码中,存在唯一的n-k次首一多项式使得每一个码多项式c(x)都是g(x)的倍式,且每一低于或等于n-1次的g(x)的倍式,一定是码多项式。(n,k)循环码的生成多项式g(x)一定是的因式:;反之,若g(x)为n-k次,且除尽,则此g(x)一定生成一个(n,k)循环码。对于一般的(n,k)循环码,设其生成多项式为,由于、等k个码多项式必线性无关,故可用它们组成码的一组基底,而与这些码多项式相对应的k个线性无关的码向量就构成除生成矩阵G,即G(x)= 若g(x)是(n,k)循环码的生成多项式,有,h(x)是k

7、次多项式,称为校验多项式。令,则 H = 为(n-k)x n阶矩阵,称为码的校验矩阵。可以证明,。1.2 编码过程及实现在编码时,首先需要根据给定循环码的参数确定生成多项式g(x),也就是从的因子中选一个(n-k)次多项式作为g(x);然后,利用循环码的编码特点,即所有循环码多项式A(x)都可以被g(x)整除,来定义生成多项式g(x)。 根据上述原理可以得到一个较简单的系统:设要产生(n,k)循环码,m(x)表示信息多项式,循环码编码方法则其次数必小于k,而·m(x)的次数必小于n,用·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信

8、息位后作监督位,就得到了系统循环码。下面就将以上各步处理加以解释:(1)用乘m(x)。这一运算实际上是把信息码后附加上(n-k)个“0”。例如,信息码为110,它相当于m(x)+x。当n-k7-34时,·m(x)+,它相当于1100000。而希望的到得系统循环码多项式应当是A(x) = ·m(x) + r(x)。(2)求r(x)。由于循环码多项式A(x)都可以被g(x)整除,也就是:    (1) 因此,用·m(x)除以g(x),就得到商Q(x)和余式r(x),即       

9、;            (2)这样就得到了r(x)。(3)编码输出系统循环码多项式A(x)为: (3) 1.3译码过程及实现对于接收端译码的要求通常有两个:检错与纠错。达到检错目的的译码十分简单,可以由式(1-1),通过判断接收到的码组多项式B(x)是否能被生成多项式g(x)整除作为依据。当传输中未发生错误时,也就是接收的码组与发送的码组相同,即A(x)=B(x),则接收的码组B(x)必能被g(x)整除;若传输中发生了错误,则A(x)B(x),B(x)不能被g(x)整除。因此,可以根据余项是否

10、为零来判断码组中有无错码。设发射的码字为C(x),而收到的码字为R(x),如果C(x) = R(x),则说明收到码字正确。如果C(x) R(x),则说明收到的码字出现错误,即为:R(x) = C(x) + E(x)。(1)公式(1)中E(x) 称为错误图样。当E(x) = 0 时,则无错误。用g(x)去除R(x),得因为C(x)是由g(x)生成的,故C(x)必能为g(x)除尽,显然,R(x)与E(x)为同余式(R(x) E(x)mod g(x)),以g(x)除E(x)所得余式称之为伴随式S(x)。由公式(1)可知, R(x) = (C(x) + E(x)H(x) = E(x)H(x) 。若E(

11、x) = 0,则E(x)H(x) = 0;若E(x) 0,则H(x) 0。这说明,R(x) 仅与错误图样有关,而与发送的码字无关,由此可以确定错误图样表。由于g(x)的次数为n k 次,g(x)除E(x)后得余式(即伴随式)的最高次数为nk1次,故S(x)共有个可能的表达式,每一个表达式对应一个错误格式。可以知道(7,4)循环码的S(x)共有= 8个可能的表达式,可根据错误图样表来纠正(7,4)循环码中的一位错误,其伴随式如表1所示。表 1 BCH(7,4)循环码错误图样表错误图样错误图样码字伴随式S(x)伴随式10000001000100000110001000011100010000110

12、00010010100000100100000001100100000000000上式指出了系统循环码的译码方法:将收到的码字R(x)用g(x)去除,如果除尽则无错;否则有错。如果有错,可由余式S(x)一一找出对应图样,然后将错误图样E(x)与R(x)模2和,即为所求码字C(x),从而实现纠错目的。需要指出的是,有错码的接收码组也有可能被g(x)整除,这时的错码就不能检出了。这种错误被称为不可检错误,不可检错误中的错码数必将超过这种编码的检错能力。在接收端为纠错而采用的译码方法自然比检错要复杂许多,因此,对纠错码的研究大都集中在译码算法上。我们知道,校正子与错误图样之间存在某种对应关系。如同其

13、它线性分组码,循环编码和译码可以分三步进行:(1)由接收到的码多项式B(x)计算校正子(伴随式)多项式S(x);(2)由校正子S(x)确定错误图样E(x);(3)将错误图样E(x)与B(x)相加,纠正错误。上述第(1)步运算和检错译码类似,也就是求解B(x)整除g(x)的余式,第(3)步也很简单。因此,纠错码译码器的复杂性主要取决于译码过程的第(2)步。 第2章(7,4)循环码2.1生成多项式根据上面介绍的生成多项式的求法,可得:于是可得到(7, 4)循环码的生成多项式可为()或()。下面选()作为其生成多项式。2.2生成矩阵和校验矩阵(7, 4)循环码的生成多项式为g(x)=,由可得其校验多

14、项式。所以可得(7, 4)循环码的生成矩阵和校验矩阵分别为G =H =2.3(7,4)循环码的全部码字根据前面介绍的求循环码的监督码字的方法,四位信息位共有16种组合,依次可算出这些组合的信息位的监督码字,进而得到(7,4)循环码的所有编码后的码字。如下表所示:表2 (7,4)循环码的所有码字序号码字序号码字信息位监督位信息位监督位10 0 0 00 0 091 0 0 01 1 020 0 0 11 0 1101 0 0 10 1 130 0 1 01 1 1111 0 100 0 140 0 1 10 1 0121 0 1 11 0 050 1 0 00 1 1131 1 0 01 0 1

15、60 1 0 11 1 0141 1 0 10 0 070 1 1 01 0 0151 1 1 00 1 080 1 1 10 1 1161 1 1 11 1 12.4误差分析和可行性分析由循环码性质我们可以知道,对于(7,4)循环码来说,最小码距,可以检测出3位错误,纠正1 位错误,编码效率为4/7×100% = 57.1%。设传输信道的误码率为p,据此设定信道模型存在如下关系:传输正确概率为,信息帧传输错误概率为,每帧仅发生1位错误的概率为,则1位错误帧在总的错误帧中的概率为。表2为其,,R的模拟结果。表 3 Pe, Pe1, R 的模拟结果(n=7)PR/%0.5217030.

16、37200971.300.06793470.065903697.010.006979030.006958199.700.000699790.0006995899.970.0000699790.0006995899.97综合表2 的模拟结果和理论分析可知,通信系统的帧传输具有下列性质:(1) 在n 一定的条件下,信息帧错误概率随着比特误码率p 的增加而增加,最坏条件下帧错误概率几乎为100%,此时系统失去通信能力。(2) 在典型的通信环境下( p为,帧长n =128 1024,np <1 ) , 当p 0时,R 1,表明当比特误码率p足够小的情况下,绝大多数信息帧错误是每帧1位错误,因此纠

17、正每帧1 位错误有实际应用价值。第3章(7,4)循环码编译码的软件实现3.1编译码软件实现思想CRC 算法的核心是如何实现除法运算. 由于任何硬件系统的寄存器资源都是有限的,所以选取一个数十位、甚至数百位宽度的寄存器实现除法运算是不可行的. 因此,可以选一个宽度为r 位(生成多项式的次数) 的寄存器,采用反馈的方法实现N 位(信息位宽度与校验位宽度之和) 除法运算. 因为模2 运算恰好等于异或运算,所以可用如下步骤求CRC 校验和:(1) 置寄存器初值为0.(2) 寄存器进行左移运算,下一个信息位移入,最高位移出.(3) 判断第(2) 步中移出的最高位,如果为1 ,则用寄存器与生成多项式的低r

18、 位异或的结果对寄存器重新赋值. 否则,执行(4) .(4) 如果还有信息位(包括附加的r 个0) ,返回(2) ,否则结束.运算完毕后,寄存器中存放的就是余数. 例如,生成多项式POLY=10011 ,信息位是1100. 由于采用宽度为5的POLY作为除数进行除法运算,得到的余数不超过4 位,所以选取一个4位宽的寄存器即可. 图1 给出了上述算法以及模2 除法的运算过程,不难看出,二者在过程和结果上均是相符的. 图1 直接实现算法与模2除法的比较3.2(7,4)循环码的编码流程框图确定余式r(x): 初始化储存c(x)确定c(x): 图2 编码程序框图3.3(7,4)循环码的译码流程框图纠错

19、C(x)=E(x)+R(x)由S(x)确定错误图样E(x)S(x)=0,无误码误码由R(x)确定S(x):初始化 是 否存储C(x)图 3 译码程序框图3.3 C语言平台简介C语言是Combined Language(组合语言)的中英混合简称。是一种计算机程序设计语言。它既具有高级语言的特点,又具有汇编语言的特点。它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。其语言特点如下:1、C是中级语言。它把高级语言的基本结构和语句与

20、低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作, 而这三者是计算机最基本的工作单元。 2、C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3、C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 4

21、、 C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。 5、C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 6、C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。3.4 程序运行结果1初始化界面:2正确编码界面:3正确译码界面:4信息位有一位错误时的译码界面:5信息位有二位错误时的译码界面:6信息位有三位错误时的译码界面:总 结 这次课程设计历时二个星期多左右,通过这两个星期的学习,发现了自己的很多不足,自己知识的很多

22、漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还急需提高。课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。此次课程设计主要针对循环码编码译码提出自己的设计方案,并利用C语言来实现自己的软件设计。设计中用到了很多计算机通信课程中学到的知识,例如:差错控制技术、循环冗余校验码(CRC)等。由于对所学概念不熟悉,原理不清楚,虽然条条框框的理论知识一大推,但由于没有经过实践的检验,当正式用时却不知道怎么用,更不知道该往哪用,从而导致在设计的过程中不能抓住重点,不清楚到底该怎么做,使得在设计过程中绕了许多弯

23、路,做了许多的无用功。设计过程中查阅了大量的有关循环码编码与译码的书籍,巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合的必要性,只有理论知识是远远不够的,它更多的只是用来应付考试,而当正真实际操作时却是困难重重,所以只有把所学的理论知识与实践相结合起来,并从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计过程中遇到的问题,可以说得是很多,例如刚开始时,对循环码不是很理解,更不知道其编码与译码的方法;后来刚熟悉了原理,却因为对C语言知识掌握不扎实,编写不出来正确的程序,以致又花费了好多时间继续学习

24、C语言 编程和上网查找相关资料,导致恶性循环,待编好程序时已费了很多功夫,这毕竟跟平时的理论知识有着很大的关联,故在以后的学习中一定要稳扎稳打,深刻理解理论知识,为今后的实践性活动打下坚实的基础,以免到时又像这次一样再费周折;同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。总之,通过这次课程设计之后,我发现自己的不足之处还很多,我下去以后一定把以前所学过的知识重新温故。对我而言,知识上的收获重要,精神上的丰收更加可喜。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经

25、历是一份拥有。这次课程设计必将成为我人生旅途上一个非常美好的回忆!衷心的向各位老师致以崇高的敬意,谢谢老师!致 谢 附:参考源程序/*(7,4)循环码的编译及纠检错实现*/#include<stdio.h>#include<math.h>#include<stdlib.h>/*函数声明*/void Begin();void Code();void Decoding();/*主函数*/main() printf("nThis software main function is carries on the code and the decoding

26、to (7,3) cyclic code.n "); Begin(); /*进行编码*/void Code() int Input4; int Output7; int reg3=0,0,0; int temp,i,j,t; printf("Please input the information code :"); for(i=0;i<4;i+) scanf(" %d",&Inputi); /*输入4位信息码*/ for(i=0;i<4;i+) /*进行除法操作*/ temp=reg2+Inputi; /*生成多项式为g(

27、x)=x3+x+1*/ if(temp=2) temp=0; reg2=reg1+temp; if(reg3=3)reg3=0; reg1=reg0; reg0=temp; for(i=0;i<4;i+) Outputi=Inputi; /*进行编码操作*/ for(i=4;i<7;i+) temp=reg2; for(j=2;j>0;j-) regj=regj-1; reg0=0; Outputi=temp; printf("_"); printf("n"); printf(" The information code ou

28、tput is: n"); for(i=0;i<7;i+) printf( " %d ",Outputi); /*输出编码结果*/ printf("n"); printf("_"); printf("n"); Begin(); /*译码并进行纠检错*/void Decoding() int Input7,Output7; int reg3=0,0,0; int temp,i,d,x,p; printf("ninput the information code of bit7:")

29、; for(i=0;i<7;i+) scanf(" %d",&Inputi); /*输入接受码组*/ for(i=0;i<7;i+) /*进入除法电路*/ temp=reg2; /*计算伴随式S(x)*/ reg2=reg1+temp; if(reg2=2)reg2=0; reg1=reg0; reg0=temp+Inputi; if(reg0=2)reg0=0; p=reg2+2*reg1+4*reg0; if(p!=1&&p!=2&&p!=3&&p!=7&&p!=8&&p

30、!=13&&p!=14&&p!=0) /*输入错误位数大于2位*/ printf(" "The error >=2" n"); getchar(); exit(0); printf("_n"); printf("s(x)="); for(i=2;i>=0;i-) printf(" %d",regi); printf("n"); for(i=0;i<7;i+) /*纠正一位错误*/ d=reg2*reg1*(!reg0); Ou

31、tputi=d+Inputi; if(Outputi=2) Outputi=0; temp=reg2; x=0; /*S(x)进行自发运算以求得错误位数*/ reg2=temp+reg1; if(reg2=2)reg2=0; reg1=reg0; reg0=temp+x; /*输出4位信息源*/ printf("The decoding bit4 is:"); for(i=0;i<4;i+) printf(" %d ",Outputi); printf("n"); printf("The Decoding bit7 is:"); /*输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论