计算机通信课设.docx

上传人:b****5 文档编号:30186948 上传时间:2023-08-05 格式:DOCX 页数:29 大小:339.16KB
下载 相关 举报
计算机通信课设.docx_第1页
第1页 / 共29页
计算机通信课设.docx_第2页
第2页 / 共29页
计算机通信课设.docx_第3页
第3页 / 共29页
计算机通信课设.docx_第4页
第4页 / 共29页
计算机通信课设.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

计算机通信课设.docx

《计算机通信课设.docx》由会员分享,可在线阅读,更多相关《计算机通信课设.docx(29页珍藏版)》请在冰豆网上搜索。

计算机通信课设.docx

计算机通信课设

摘要

循环码是线性分组码中一个重要的子类,是实际差错控制系统中常用的编译码方案,具有检错纠错能力强,实现方便等特点。

它具有严密的代数学理论,循环码的“线性”是指任意两个循环码进行模2加后所得的新码仍然是循环码,循环码具有线性码的一般性质——封闭性,此外还具有循环性,(n,k)循环码表示信息位为k位,监督位为n-k位。

本次设计实验首先分析了(7,3)循环码的编码与译码原理,然后,用C语言实现其编码与译码功能。

通过C语言平台运行所编写的程序,观察了在输入信息码情况下输出对应的编码结果以及相反的译码功能。

通过多组的对比验证了该(7,3)循环码的编译码程序的正确性。

最后,在程序运行的过程中进一步分析循环码的编译码原理,并通过比较仿真模型与理论计算的性能,证明了仿真模型的可行性。

关键词:

循环码;编码与译码;C语言;编程及仿真

 

前言

现代通信的发展趋势为数字化,随着现代通信技术的不断开发,差错控制技术已日趋成熟,在各个领域都得到了广泛的应用和认同。

本文就73循环码的编码与译码原理进行C语言的编程及运行仿真。

现代社会发展要求通信系统功能越来越强,可靠性越来越高,构成也越来越复杂;这就要借助于功能强大的计算机辅助分析设计技术和工具才能实现。

现代计算机科学技术快速发展,已经研发出了新一代的可视化的仿真软件。

这些功能强大的仿真软件,使得通信系统仿真的设计和分析过程变得相对直观和便捷,由此也使得通信系统仿真技术得到了更快的发展。

本文使用的是功能强大的C语言软件。

C语言是一种使用简便的、特别适用于科学研究和工程计算的高级语言,与其他计算机语言相比,它的特点是简洁和智能化,具有极高的编程和调试效率。

通过使用C工具箱函数对数字调制进行仿真,更能直观彻底的掌握循环码的编码与译码原理。

有助于我们的学习和研究,加深对知识的理解和运用。

C的便利性还体现在它的仿真结果还可以存放到的工作空间里做事后处理。

方便我们修改参数对不同情况下的输出结果进行对比。

 

目录

第一章计算机通信与纠错码-1-

1.1计算机通信技术的历史和发展-1-

1.1.1通信的概念-1-

1.1.2通信的发展史简介-1-

1.1.3计算机通信介绍-2-

1.2纠错码-2-

1.3纠错原理-3-

第二章循环码原理与介绍-5-

2.1循环码的生成多项式和生成矩阵-5-

2.2循环码的编码与译码-8-

2.2.1循环码的编码-8-

2.2.2循环码的译码-8-

第三章C语言实现循环码编译码程序及仿真-10-

3.1C语言简介-10-

3.1.1C语言概述-10-

3.1.2.C语言特点-10-

3.1.3C语言优点-10-

3.1.4C语言缺点-11-

3.1.5C语言结构特点-11-

3.2C程序编写-12-

3.3C程序运行-17-

3.3.1仿真结果-17-

3.3.2软件的可行性分析-20-

总结-21-

附录-22-

参考文献-24-

第一章计算机通信与纠错码

1.1计算机通信技术的历史和发展

1.1.1通信的概念

通信就是克服距离上的障碍,从一地向另一地传递和交换消息。

消息是信息源所产生的,是信息的物理表现,例如,语音、文字、数据、图形和图像等都是消息(Message)。

消息由模拟消息(如语音、图像等)以及数字消息(如数据、文字等)之分。

所有消息必须在转换成电信号(通常简称为信号)后才能在通信系统中传输。

所以,信号(Signal)是传输消息的手段,信号是消息的物资载体。

相应的信号可以分为模拟信号和数字信号,模拟信号的自变量可以是连续的或离散的,但幅度是连续的,如电话机、电视摄像机输出的信号就是模拟信号。

数字信号的自变量可以是连续的或离散的,但幅度是离散的,如计算机等各种数字终端设备输出的信号就是数字信号。

通信的目的是传递消息,但对受信者有用的是消息中包含的有效内容,即信息(Information)。

消息是具体的、表面的,而信息是抽象的、本质的,且消息中包含的信息的多少可以用信息量来度量。

通信技术,特别是数字通信技术近年来发展非常迅速,它的应用越来越广泛。

数字通信系统较模拟通信系统而言,具有抗干扰能力强、便于加密、易于实现集成化、便于与计算机连接等优点。

因而,数字通信更能适应对通信技术的高要求。

1.1.2通信的发展史简介

远古时代,远距离的传递消息是以书信的形式来完成的,这种通信方式明显具有传递时间长的缺点。

为了在尽量短的时间内传递尽量多的消息,人们不断地尝试所能找到的各种最新技术手段。

1837年发明的莫尔斯电磁式电报标志着电通信的开始。

之后,利用电进行通信的研究取得了长足的进步。

1866年利用海底电缆实现了跨大西洋的越洋电报通信。

1876年贝耳发明了电话,利用电信号实现了语音信号的有线传递,使信息的传递变得既迅速又准确,这标志着模拟通信的开始,由于它比电报更便于交流使用,所以直到20世纪前半叶这种采用模拟技术的电话通信技术比电报得到了更为迅速和广泛的发展。

1937年瑞威斯发明的脉冲编码调制标志数字通信的开始。

20世纪60年代以后集成电路、电子计算机的出现,使得数字通信迅速发展。

在70年代末在全球发展起来的模拟移动电话在90年代中期被数字移动电话所代替,现有的模拟电视也正在被数字电视所代替。

数字通信的高速率和大容量等各方面的优越性也使人们看到了它的发展前途。

1.1.3计算机通信介绍

计算机通信是一种以数据通信形式出现,在计算机与计算机之间或计算机与终端设备之间进行信息传递的方式。

它是现代计算机技术与通信技术相融合的产物,在军队指挥自动化系统、武器控制系统、信息处理系统、决策分析系统、情报检索系统以及办公自动化系统等领域得到了广泛应用。

  计算机通信按照传输连接方式的不同,可分为直接式和间接式两种。

直接式是指将两部计算机直接相联进行通信,可以是点对点,也可以是多点通播。

间接式是指通信双方必须通过交换网络进行传输。

  按照通信覆盖地域的广度,计算机通信通常分为局域式、城域式和广域式三类。

  局域式是指在一局部的地域范围内(例如一个机关、学校、军营等)建立计算机通信。

局域计算机通信覆盖地区的直径在数公里以内。

  城域式是指在一个城市范围内所建立的计算机通信。

城域计算机通信覆盖地区的直径在十公里到数十公里。

  广域式是指在一个广泛的地域范围内所建立的计算机通信。

通信范围可以超越城市和国家,以至于全球。

广域计算机通信覆盖地区的直径一般在数十公里到数干公里乃至上万公里。

  在通常情况下,计算机通信都是由多台计算机通过通信线路连接成计算机通信网进行的,这样可共享网络资源,充分发挥计算机系统的效能。

1.2纠错码

纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。

仅用来发现错误的码一般常称为检错码。

为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。

关系的建立称为编码。

码字到达收端后,可以根据编码规则是否满足以判定有无错误。

当不能满足时,按一定规则确定错误所在位置并予以纠正。

纠错并恢复原码字的过程称为译码。

检错码与其他手段结合使用,可以纠错。

 纠错编码又称信道编码,它与信源编码是信息传输的两个方面。

它们之间存在对偶的关系。

应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。

  为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。

准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。

关系的建立称为编码。

码字到达收端后,用编码时所用的规则去检验。

如果没有错误,则原规则一定满足,否则就不满足。

由此可以根据编码规则是否满足以判定有无错误。

当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。

纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。

检错码与其他手段结合使用,可以纠错。

检错反馈重发系统(ARQ系统)就是一例。

在构造纠错码时,将输入信息分成k位一组以进行编码。

若编出的校验位仅与本组的信息位有关,则称这样的码为分组码。

若不仅与本组的k个信息位有关,而且与前若干组的信息位有关,则称为格码。

这种码之所以称为格码,是因为用图形分析时它象篱笆或格架。

线性格码在运算时为卷积运算,所以叫卷积码。

1.3纠错原理

纠错码能够检错或纠错,主要是靠码字之间有较大的差别。

这可用码字之间的汉明距离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基本无关。

可惜,已经找到的码能满足这样要求的很少。

不过由于大规模集成电路的发展,既使应用比较复杂的但性能良好的码,成本也并不太高。

因此,纠错码的应用越来越广泛。

第二章循环码原理与介绍

循环码是线性分组码的一种,又叫格雷码,所以它具有线性分组码的一般性质,此外它还具有循环性。

循环码的编码和解码设备都不太复杂,且检(纠)错能力较强。

它不但可以纠正独立的随机错误,也可用于检测突发错误并且非常有效。

任何两个相邻的循环码只有一位数字不同,当数据变换时,变换的数字数少,出现竞争冒险,和出错的可能性会大大减小,所以循环码具有可靠性高的优点,在通信、军事等领域中应用非常广泛。

在数字电子技术教学中,常用卡诺图化简多变量逻辑函数,画卡诺图时要用循环码。

由于循环码的各位没有权值,所以书写和编制循环码比普通二进制码困难。

在教学实践中发现,部分学生不会写多位循环码或觉得写循环码很麻烦,也不会用循环码对2N进制数码进行编码,正确地书写和编制循环码是电路设计的关键。

要记住多变量的循环码是比较困难的,下面介绍几种书写和编制循环码的方法。

2.1循环码的生成多项式和生成矩阵

    (全0码字除外)称为生成多项式,用g(x)表示。

可以证明生成多项式g(x)具有以下特性:

    

(1)g(x)是一个常数项为1的r=n-k次多项式;

    

(2)g(x)是

的一个因式;

    (3)该循环码中其它码多项式都是g(x)的倍式。

  为了保证构成的生成矩阵G的各行线性不相关,通常用g(x)来构造生成矩阵,这时,生成矩阵G可以表示为:

                      \           (2.1)

 其中 

,因此,一旦生成多项式g(x)确定以后,该循环码的生成矩阵就可以确定,进而该循环码的所有码字就可以确定。

显然,式1不符合

形式,所以此生成矩阵不是典型形式,不过,可以通过简单的代数变换将它变成典型矩阵。

    设某(7,3)循环码主要参数为,n=7,k=3,r=4。

则其生成多项式可以用第1码字构造:

          

 

(2.2)

      (2.3)

                        

   上面利用给出的(7,3)循环码的所有码字,构造了它的生成多项式和生成矩阵。

但在实际循环码设计过程中,通常只给出码长和信息位数,这就需要,这时可以利用设计生成多项式和生成矩阵g(x)所具有基本特性进行设计。

   首先,生成多项式g(x)是

的一个因式,其次g(x)是一个r次因式。

因此,就可以先对

进行因式分

解,找到它的r次因式。

  第一步:

进行因式分解得:

        (2.4)  

 第二步:

构造生成多项式g(x)

    为了求(7,3)循环码的生成多项式g(x),要从式4中找到r=n-k次的因子。

不难看出,这样的因子有两个,

即:

 

    (2.5)        

  

    (2.6)         

   以上两式都可作为生成多项式用。

不过,选用的生成多项式不同,产生出的循环码码组就不同。

    当然,在利用式3得到生成矩阵G以后,可以通过线性变化,使之成为典型矩阵,这时就可以采用类似监督矩阵H。

    由于(n,k)循环码中g(x)是

的因式,因此可令:

  (2.7)         

                                     

     这里h(x)称为监督多项式。

与式1所表示的G(x)相对应,监督矩阵表

 示为:

 

 

 其中

逆多项式。

      (2.8)    

     对于上述(7,3)循环码,若

,则:

 

      

 

2.2循环码的编码与译码

2.2.1循环码的编码

根据上述原理可以得到一个较简单的系统:

设要产生(n,k)循环码,m(x)表示信息多项式,循环码编码方法则其次数必小于k,而

·m(x)的次数必小于n,用

·m(x)除以g(x),可得余数r(x),r(x)的次数必小于(n-k),将r(x)加到信息位后作监督位,就得到了系统循环码。

下面就将以上各步处理加以解释。

 

(1)用

乘m(x)。

这一运算实际上是把信息码后附加上(n-k)个“0”。

例如,信息码为0110,它相当于m(x)=

+x。

当n-k=7-4=3时,

·m(x)=x^5+x^4它相当于0110000。

而希望的到得系统循环码多项式应当是A(x)=

·m(x)+r(x)。

 

(2)求r(x)。

由于循环码多项式A(x)都可以被g(x)整除,也就是:

 

     (2.9)

因此,用

·m(x)除以g(x),就得到商Q(x)和余式r(x),即

  (2.10)

这样就得到了r(x)。

(3)编码输出系统循环码多项式A(x)为:

       (2.11)

2.2.2循环码的译码

对于接收端译码的要求通常有两个:

检错与纠错。

达到检错目的的译码十分简单,通过判断接收到的码组多项式B(x)是否能被生成多项式g(x)整除作为依据。

当传输中未发生错误时,也就是接收的码组与发送的码组相同,即A(x)=B(x),则接收的码组B(x)必能被g(x)整除;若传输中发生了错误,则A(x)≠B(x),B(x)不能被g(x)整除。

因此,可以根据余项是否为零来判断码组中有无错码。

  需要指出的是,有错码的接收码组也有可能被g(x)整除,这时的错码就不能检出了。

这种错误被称为不可检错误,不可检错误中的错码数必将超过这种编码的检错能力。

在接收端为纠错而采用的译码方法自然比检错要复杂许多,因此,对纠错码的研究大都集中在译码算法上。

我们知道,校正子与错误图样之间存在某种对应关系。

如同其它线性分组码,循环编码和译码可以分三步进行:

    

(1)由接收到的码多项式B(x)计算校正子(伴随式)多项式S(x);

    

(2)由校正子S(x)确定错误图样E(x);

  (3)将错误图样E(x)与B(x)相加,纠正错误。

  上述第

(1)步运算和检错译码类似,也就是求解B(x)整除g(x)的余式,第(3)步也很简单。

因此,纠错码译码器的复杂性主要取决于译码过程的第

(2)步。

设发射的码字为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)得R(x)/g(x)=C(x)+E(x)/g(x)=C(x)/g(x)+E(x)/g(x)。

因为C(x)是由g(x)生成的,故C(x)必能为g(x)除尽,显然,R(x)与E(x)为同余式(R(x)=E(x)modg(x)),以g(x)除E(x)所得余式称之为伴随式S(x)。

由公式

(1)可知,R(x)*Ht=(C(x)+E(x))*H(x)=E(x)*H(x)。

若E(x)=0,则E(x)*H(x)=0;若E(x)≠0,则H(x)≠0。

这说明,R(x)*Ht仅与错误图样有关,而与发送的码字无关,由此可以确定错误图样表。

由于g(x)的次数为n-k次,g(x)除E(x)后得余式(即伴随式)的最高次数为n-k-1次,故S(x)共有2^n-k个可能的表达式,每一个表达式对应一个错误格式。

可以知道(7,3)循环码的S(x)共有2^3=8个可能的表达式,可根据错误图样表来纠正(7,3)循环码中的意味错误。

 

第三章C语言实现循环码编译码程序及仿真

3.1C语言简介

3.1.1C语言概述

C语言是CombinedLanguage(组合语言)的中英混合简称。

是一种计算机程序设计语言。

它既具有高级语言的特点,又具有汇编语言的特点。

它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。

因此,它的应用范围广泛,不仅仅是在软件开发上,而且各类科研都需要用到C语言,具体应用比如单片机以及嵌入式系统开发。

3.1.2.C语言特点

C是中级语言,它把高级语言的基本结构和语句与低级语言的实用性结合起来。

C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

  C是结构式语言,结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。

这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

C语言功能齐全,具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。

另外C语言也具有强大的图形功能,支持多种显示器和驱动器。

而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。

 C语言适用范围大,适合于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。

  C语言对编写需要硬件进行操作的场合,明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。

C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。

它是数值计算的高级语言。

3.1.3C语言优点

简洁紧凑、灵活方便。

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,主要用小写字母表示。

它把高级语言的基本结构和语句与低级语言的实用性结合起来。

C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

运算符丰富。

C语言的运算符包含的范围很广泛,共有34种运算符。

C语言把括号、赋值、强制类型装换

等都作为运算符处理。

从而使C语言的运算类型极其丰富,表达式类型多样化。

灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

数据结构丰富。

C语言的数据类型有:

整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。

能用来实现各种复杂的数据结构的运算。

并引入了指针概念,使程序效率更高。

另外C语言具有强大的图形功能,支持多种显示器和驱动器。

且计算功能、逻辑判断功能强大。

C是结构式语言。

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。

这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

C语法限制不太严格,程序设计自由度大。

虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。

C语言允许直接访问物理地址,对硬件进行操作。

由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

生成目标代码质量高,程序执行效率高。

一般只比汇编程序生成的目标代码效率低10へ20%。

C语言适用范围大,可移植性好。

C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX;也适用于多种机型。

C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。

3.1.4C语言缺点

1.C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

2.C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。

从应用的角度,C语言比其他高级语言较难掌握。

3.1.5C语言结构特点

1.一个C语言源程序可以由一个或多个源文件组成。

 

 2.每个源文件可由一个或多个函数组成。

  3.一个源程序不论由多少个文件组成,都有一个且只能有一个main函数,即主函数。

  4.源程序中可以有预处理命令(include命令仅为其中的一种),预处理命令通常应放在源文件或源程序的最前面。

  5.每一个说明,每一个语句都必须以分号结尾。

但预处理命令,函数头和花括号“}”之后不能加分号。

6.标识符,关键字之间必须至少加一个空格以示间隔。

若已有明显的间隔符,也可不再加空格来间隔。

3.2C程序编写

就(7,3)循环码的编码与译码程序编写如下:

/*(7,3)循环码的编译及纠检错实现*/

#include

#include

#include

/*函数声明*/

voidBegin();

voidCode();

voidDecoding();

/*主函数*/

main()

{

printf("\nThissoftwaremainfunctioniscarriesont

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

当前位置:首页 > 工程科技 > 信息与通信

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

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