




免费预览已结束,剩余20页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
*实践教学* 兰州理工大学计算机与通信学院2012年春季学期 计算机通信与网络 课程设计 题 目: 差错控制编码的编译码设计与仿真 专业班级: 09级通信工程(4)班 姓 名: 杜春娟 学 号: 09250436 指导教师: 彭 铎 成 绩: 摘 要通信是信息远距离的传送,是人类生产和生活的主要支撑。通信的目的是要把信息及时可靠地传送给对方,在数据通信过程中,衰损、失真、和噪声会使通信线路上的信号发生错误。差错控制可以减少错误、提高通信质量,可以改善传输信道的电气特性,使误码率达到要求。CRC(Cyclical Redundancy Checking)循环冗余校验码是一种重要的线性分组码,通过多项式除法检测错误,是在数据通信和数据检测中广泛应用的检错校验的循环码。本设计研究了CRC循环冗余校验码的原理,以及利用C语言对其进行了编程和编译仿真,实现了CRC循环冗余校验码的编码及校验,在接收端收到通过校验的码,从而确定传输过程是否出错,得到的结论和理论上是一致的。关键词:检错码;CRC循环冗余校验码;C语言前 言随着科学技术的进步, 人们对信息传递的要求逐渐提高。但在通信系统中, 可靠性与有效性是对矛盾, 要求有效性提高, 必然使每个码元所占的时间缩短, 从而受干扰和产生错误的可能性增大, 可靠性降低了; 要提高信息的可靠性,又使信息速率变慢有效性降低。在实际信道上传输数字信号时,由于信道传输特性不理想及加性噪声的影响,所收到的数字信号不可避免的会发生错误。为了加强通信系统的可靠性,除了合理设计基带信号,选择调制、解调方式,采用频域均衡、时域均衡之外,还需要采用信道编码,即差错控制编码,使误码率进一步降低,来满足指标要求。 循环冗余校验码CRC(Cyclical Redundancy Checking)是目前通信系统中最常用的一种差错控制编码。循环冗余校验码是一种高效率且可靠的方法, 由线性分组码分支而来的, 是一种通过多项式除法检测错误的很不寻常而又巧妙的方法, 一方面它有很强的检测能力, 二是它的编码器电路及错误检测器电路都很容易实现, 它的优点使它在通信系统中得到了广泛的应用。利用CRC进行检错的过程可简单描述为:在发送端根据要传送的二进制码序列,以一定的规则产生一个校验用的监督码(CRC码),附在原始信息后边,构成一个新的二进制码序列数,然后发送出去。在接收端根据信息码和CRC码之间所遵循的规则进行检验,一旦传输过程中发生差错,则信息码元与监督码元之间的关系遭到破坏,从而可以发现错误,乃至纠正错误1-2。CRC校验采用多项式编码方法,被处理的数据块表示为一个二进制多项式。本次课设使用的是C语言软件进行设计与仿真。C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛,是当前已成为教学和科研中最常用而必不可少的工具。目 录第1章 设计任务及要求11.1 设计目的及意义11.2 设计任务及要求1第2章 基本原理22.1计算机通信与纠错码22.1.1 通信的概念22.1.2 计算机通信22.1.3 纠错码32.1.4 纠错原理32.2 CRC循环冗余校验码42.2.1 CRC的介绍42.2.2 CRC的基本原理5第3章 C语言编程与运行103.1 C语言介绍103.2 C语言的发展过程103.3 C语言的主要特点113.4 C语言的优缺点113.4.1 C语言的优点113.4.2 C语言的缺点12第4章 仿真过程及结果分析134.1 CRC循环冗余校验码的编译码程序134.2 运行结果174.3 结果分析18设计总结19致谢20参考文献2121第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 纠错码纠错码(error correcting code),在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别 ,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。 纠错编码又称信道编码,它与信源编码是信息传输的两个方面。它们之间存在对偶的关系。应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。 为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。关系的建立称为编码。码字到达收端后,用编码时所用的规则去检验。如果没有错误,则原规则一定满足,否则就不满足。由此可以根据编码规则是否满足以判定有无错误。当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。检错码与其他手段结合使用,可以纠错。检错反馈重发系统(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.2 CRC循环冗余校验码 2.2.1 CRC的介绍在计算机通信中用得最广泛的检错码是一种漏检率低得多也便于实现的循环冗余校验码CRC(Cyclical Redundancy Checking),又称多项式码。这使因为,任何一个由二进制数位串组成的代码都可以和一个含有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.2 CRC的基本原理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除,应使余数循环。 将这些要求反映为数学关系是比较复杂的。但可以从有关资料查到常用的对应于不同码制的生成多项式如下所示: NK 码距dG(x)多项式 G(x)7 43 10117 43 11017 34 111017 34 101111511 3 100111575 1110100013126 3 1001013121 5111011010016357 3 10000116351 5101000011010110411024 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 A3 A2 A1正确 1010011错误 1 01 0 01 0 1 01 0001 1 010111 1 0 1 101 1 1000011 1 11 00 1 1 0 01 0 011 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的突发错以及99997%的突发长度为17的突发错和99998%的突发长度大于17的突发错。所以CRC码的检错能力还是很强的。这里,突发错误是指几乎是连续发生的一串错,突发长度就是指从出错的第一位到出错的最后一位的长度(但是,中间并不一定每一位都错)。 6、计算余数的二进制除法 第一步,要在数据位(被除数)后边补 0 , 0 的个数比除数(生成多项式)少一位。 第二步,做除法,从被除数的头五位减去五位的除数。除数的每一位都与被除数的对应位在不涉及上一位的情况下独立进行减法(实际进行的是模 2 加)。在本例中,除数 11001 与被除数的前五位 10110 进行的是模 2 加,得到 1111 (余数 1 前面的 0 被省略)。 在被除数中下一个没有使用过的比特接着被抄录下来,使得余数的位数和除数的位数相同。如果位数不够,在商位补0(这与一般除法相同),因此,下一步就是 11110 11001 ,结果是 111 ,依次类推。 在二进制除法中,除数总是以 1 开头的,然后从上一次的被除数 / 余数中与除数位数相同的部分中减去除数,并且只能从最左位是 1 的被除数 / 余数中减去除数。每当被除数 / 余数的最左位是 0 时,就在该步骤中把 0 丢弃,再把被除数中的下一个未使用比特抄录下来填充余数,同时对应的商数位补一个零,并按上述方法进行二进制除法运算,一直重复这个过程直到被除数中所有比特都被使用过。 余数 100 只有 3 位,而余数应为 4 位(比除数少一位),因此,取校验码时应在前面填一个 0 ,故其CRC校验码应为0100,于是可求出该信息码的循环冗余码为 101100110100 。 第3章 C语言编程与运行3.1 C语言介绍C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。因此,它的应用范围广泛。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位(bit)一级的操作。3.2 C语言的发展过程C语言的原型ALGOL 60语言(也成为A语言) 。 1963年,剑桥大学将ALGOL 60语言发展成为CPL(Combined Programming Language)语言。 1967年,剑桥大学的Matin Richards 对CPL语言进行了简化,于是产生了BCPL语言。 1970年,美国贝尔实验室的Ken Thompson将BCPL进行了修改,并为它起了一个有趣的名字“B语言”。意思是将CPL语言煮干,提炼出它的精华。并且他用B语言写了第一个UNIX操作系统。 而在1973年,B语言也给人“煮”了一下,美国贝尔实验室的D.M.RITCHIE在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。 为了使UNIX操作系统推广,1977年Dennis M.Ritchie 发表了不依赖于具体机器系统的C语言编译文本可移植的C语言编译程序。 1978年Brian W.Kernighian和Dennis M.Ritchie出版了名著The C Programming Language,从而使C语言成为目前世界上流行最广泛的高级程序设计语言。 1987年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准, 成为现行的C语言标准 3.C语言的主要特点 ,即经典的87 ANSI C。C语言发展迅速, 而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名的系统软件, 如DBASE PLUS、DBASE 都是由C语言编写的。用C语言加上一些汇编语言子程序, 就更能显示C语言的优势了,象PC- DOS 、WORDSTAR等就是用这种方法编写的。 1990年,国际化标准组织ISO(Intrernational StandardOrganization)接受了87 ANSI C为ISO C的标准(ISO9899-1990)。1994年,ISO修订了C语言的标准。目前流行的C语言编译系统大多是以ANSI C为基础进行开发的,但不同版本的C编译系统所实现的语言功能和语法规则略有差别。 3.3 C语言的主要特点1、C是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2、C是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 3、C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大,可以实现决策目的的游戏。 4、C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX、LINUX等等;也适用于多种机型。 C语言对编写需要硬件进行操作的场合,优于其它高级语言,有一些大型应用软件也是用C语言编写的。3.4 C语言的优缺点3.4.1 C语言的优点1、简洁紧凑、灵活方便 C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。 2、运算符丰富 C语言的运算符包含的范围很广泛,共有34种运算符。C语言把括号、赋值、强制类型转换等都作为运算符处理。从而使C语言的运算类型极其丰富,表达式类型多样化。灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。 3、数据类型丰富 C语言的数据类型有:整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。能用来实现各种复杂的数据结构的运算。并引入了指针概念,使程序效率更高。另外C语言具有强大的图形功能,支持多种显示器和驱动器。且计算功能、逻辑判断功能强大。 同时对于不同的编译器也有各种 4、C是结构式语言 结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。 5、语法限制不太严格,程序设计自由度大 虽然C语言也是强类型语言,但它的语法比较灵活,允许程序编写者有较大的自由度。 6、允许直接访问物理地址,对硬件进行操作 由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。 7、生成目标代码质量高,程序执行效率高 一般只比汇编程序生成的目标代码效率低1020%。 8、适用范围大,可移植性好 C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX、windows 98windows NT;也适用于多种机型。C语言具有强大的绘图能力,可移植性好,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它也是数值计算的高级语言。 3.4.2 C语言的缺点1、C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C+的一大区别。 2、C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。第4章 仿真过程及结果分析4.1 CRC循环冗余校验码的编译码程序在本次课设中,我是针对于CRC循环冗余码的编译码做了程序设计与仿真,我选择了一个(8,5)循环码进行了设计与仿真。在编译码程序中,主要包括三大模块,一是循环冗余校验码的编码,在此过程中,先是输入了信息码,再给出了生成多项式,然后求出余数即CRC校验码,最后得出了循环冗余码。二是循环冗余校验码的译码,即将编码还原为所输入的信息码,在此过程中,是用生成的循环冗余码求得余数,这一步也是对编码过程的验证,。三是在译码出现错误是进行检错的,此过程中,如果求得余数为0,则说明编译码过程是正确的,若不为0,则说明程序中还存在着问题需要解决。程序如下:/*(8,5)循环码的编译及纠检错实现*/#include#include#include/*函数声明*/void Begin();void Code();void Decoding();/*主函数*/main() printf(nThis software main function is carries on the code and the decoding to (8,5) cyclic code.n ); Begin(); /*进行编码*/void Code() int Input5; int Output8; int reg5=0,0,0,0,0; int temp,i,j,t; printf(Please input the information code :); for(i=0;i5;i+) scanf( %d,&Inputi); /*输入5位信息码*/ for(i=0;i5;i+) /*进行除法操作*/ temp=reg2+Inputi; /*生成多项式为g(x)=x3+x2+1*/ if(temp=2) temp=0; reg2=reg1+temp; if(reg2=2)reg2=0; reg1=reg0; reg0=temp; for(i=0;i5;i+) Outputi=Inputi; /*进行编码操作*/ for(i=5;i0;j-) regj=regj-1; reg0=0; Outputi=temp; printf(_); printf(n); printf( The information code output is: n); for(i=0;i8;i+) printf( %d ,Outputi); /*输出编码结果*/ printf(n); printf(_); printf(n); Begin(); /*译码并进行纠检错*/void Decoding() int Input8,Output8; int reg5=0,0,0,0,0; int temp,i,d,x,p; printf(ninput the information code of bit8:); for(i=0;i8;i+) scanf( %d,&Inputi); /*输入接受码组*/ for(i=0;i=2 n); getchar(); exit(0); printf(_n); printf(s(x)=); for(i=2;i=0;i-) printf( %d,regi); printf(n); for(i=0;i8;i+) /*纠正一位错误*/ d=reg2*reg1*(!reg0); Outputi=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; /*输出5位信息源*/ printf(The decoding bit5 is:); for(i=0;i5;i+) printf( %d ,Outputi); printf(n); printf(The Decoding bit8 is:); /*输出8位译码结果*/ for(i=0;i8;i+) printf( %d ,Outputi); printf(n); printf(_n); Begin(); /*选择操作*/ void Begin() fflush(stdin); char ch; printf( -); printf(n); printf( - input c to carry on the code -); printf(n); printf( - input d to carry on the decoding code -); printf(n); printf( - input e to exit please to -); printf(n); printf( -); printf(n); ch=getchar(); if(ch=c) Code(); else if(ch=d) Decoding(); else if(ch=n) Begin(); else if(ch=e) exit(0); else printf(input errorn);fflush(stdin);Begin();4.2 运行结果 1、在编码过程中,信息码是5位,输入为11101,生成多项式为,其换成二进制数位1101,用信息码补3个0除以生成多项式得到的余数为01,因为01只有两位,比1101少一位,所以取校验码时应在前面填一个0,故其CRC校验码应为001,于是可求出该信息码的循环冗余码为11101001。通过程序运行可以得出仿真过程得到的结论是否与理论一致。编码运行结果,如图4.1所示图4.1 CRC编码仿真结果 2、在译码过程中,是将编好的码还原为原来的信息码,输入的是编码过程中生成的循环冗余码11101001,用循环冗余码除以生成多项式得到余数000,此结果说明编码过程是正确的,最后得到译码结果11101,还原出了原来的信息码。按“e”退出仿真运行界面。通过译码程序运行可以得出编码过程是否正确,若不正确可以继续调制程序以得到预期的结果。译码运行结果,如图4.2图4.2 CRC译码仿真结果4.3 结果分析CRC校验的基本思想是利用线性编码理论,在发送端根据要传送一个n比特的帧或报文,发送器生成一个r比特的序列,称为帧检验序列(FCS)。这样形成的帧将由(n+r)比特组成。这个帧刚好能被某个预先规定的数整除。接收器用相同的数去除外来的帧,结果无余数,则认为无差错。 循环冗余校验与奇偶校验不同,或者是一个字符校验一次,而前者是一个数据块校验一次。在同步通信中,几乎都使用这种校验方法。 二进制多项式的加减运算为模2加减运算,即两个码多项式相加时,对应系数进行模2加减。所谓模2加减就是各位做不带进位、借位的按位加减。这种加减运算实际上是逻辑上的异或运算,即加法和减法等价。信息多项式和余数多项式可以合并成一个新的多项式(称为循环码的码多项式),则该多项式是生成多项式的整数倍,即能被声称多项式整除。根据这一原理,在发送端用信息码多项式除以生成多项式所得的余数多项式就是所要加的监督位。将循环码的码多项式除以生成多项式,若能除尽,说明传输正确,否则说明出错。CRC校验的关键是如何求出余数,此余数即为校验码(CRC校验码)。以前用数字电路来实现,而现在可以用计算机来完成。为了传输的正确性,在接收端要有一个CRC检验器。它的功能和发生器一样,当收
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 双碳目标下通风机全生命周期碳足迹追踪技术路径
- 医药合成路线成本控制与专利壁垒间的博弈关系研究
- 医疗级胶带微生物阻隔性能与生物相容性协同优化研究
- 2025年广东省绿化植物采购合同范本
- 临床本科招聘考试题目及答案2025年版
- 2025年文化创意产业园区改造项目技术创新与社区融合可行性报告
- 2025年度工程维护合同范本
- 2025年文化创意产业博览会数字版权保护项目可行性分析
- 2025年特色农产品冷链仓储行业技术创新与投资可行性分析
- 2025年数字营销跨境服务平台技术创新与市场前景展望
- 高三数学模拟试题分类汇编:概率统计(学生版)
- 第七章-大学生爱情心理
- GB/T 990-1991带式输送机托辊基本参数与尺寸
- 石油化工工艺装置蒸汽管道配管的设计
- 肝癌的中西医治疗
- 四川省高中信息技术会考试题
- 猪动物福利及其我国对策课件
- 沟槽坍塌应急演练方案
- DBJ50∕T-352-2020 工程建设工法编制标准
- 行政审批中介服务规范治理自查自纠表
- 金融风险管理完整ppt课件(PPT 188页)
评论
0/150
提交评论