线性分组码63码编译码仿真设计.docx
- 文档编号:6027121
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:18
- 大小:115.73KB
线性分组码63码编译码仿真设计.docx
《线性分组码63码编译码仿真设计.docx》由会员分享,可在线阅读,更多相关《线性分组码63码编译码仿真设计.docx(18页珍藏版)》请在冰豆网上搜索。
线性分组码63码编译码仿真设计
*****************
实践教学
*****************
兰州理工大学
计算机与通信学院
2013年秋季学期
通信系统综合训练
题目:
线性分组码(6,3)码编译码仿真设计
专业班级:
通信工程(3)班
姓名:
学号:
指导教师:
彭铎
成绩:
摘要
线性分组码是差错控制编码的重要一种,在本次课程设计中,我们采用MATLAB对线性分组码(6,3)码进行编码与译码的仿真设计。
当接收到的六位码字中有一位发生错误时,可以纠正这一位错码;当接收到的码字有两位发生错误时,只能纠正一位错误,但同时能检测出另一位错误不能纠正。
只有特定位有两位错误时,才能纠正两位错误。
这样就译出正确的信息码组,整个过程是用MATLAB语言实现的。
关键词:
编码;译码;纠错
前言
为了实现通信,在信号传输过程中,往往由于信道传输特性不理想以及加性噪声的影响,传输的信息中不可避免地会发生错误,影响通信系统的传输可靠性。
随着数字通信技术的发展,各种业务对系统误码率的要求也逐渐提高,采用差错控制编码技术是提高数字通信可靠性的有效方法之一。
差错控制编码就是在发送端的信息码无序列中,以某种确定的编码规则加入一些监督码元,使信息码元与监督码元之间具有某种相关性。
接收端通过检验这种相关性是否存在来判断在传输过程中是否出现了误码。
本次课设通过对线性分组码中的(6,3)码编译过程的编程实现,了解到线性分组码的构成方式是把信息序列分成每k个码元一段,并由这k个码元按一定规则产生r个校验位,组成长度为n=k+r的码字,用(n,k)表示。
信息码元与校验位之间为线性关系。
并且知道了线性分组码中的(6,3)码的编码过程信息码元与校验位之间的线性关系实现起来是时分简单的.分组码是一组固定长度的码组(n,k),通常它用于前向纠错。
在分组码中,监督位被加到信息位之后,形成新的码。
在编码时,k个信息位被编为n位码组长度,而n-k个监督位的作用就是实现检错与纠错。
对于长度为n的二进制线性分组码,它有种可能的码组,从种码组中,可以选择M=个码组(k 这样,一个k比特信息的线性分组码可以映射到一个长度为n码组上,该码组是从M个码组构成的码集中选出来的,这样剩下的码组就可以对这个分组码进行检错或纠错。 本文使用的是功能强大的C语言软件。 1.设计目标 要设计一个(6,3)线性分组码的编译码程序,最基本的是要具备对输入的信息码进行编码,让它具有抗干扰的能力。 同时,还要让它具有对接收到的整个码组中提取信息码组的功能。 但是,在实际的通信系统中,由于信道传输特性不理想以及加性噪声的影响,接收到的信息中不可避免地会发生错误,影响通信系统的传输可靠性,因而,本设计还要让该程序具有纠正错误的能力,当接收到的码组中有一位码,发生错误时可以检测到这一位错码,并且可以纠正这一位错码,并且让系统从纠正后的码组中提取正确的信息码组。 针对给定的矩阵 011 101 110 Q= 完成如下的工作: 1完成对任意信息序列的编码 2根据生成矩阵,形成监督矩阵; 3根据得到的监督矩阵,得到伴随式,并根据它进行译码; 4验证工作的正确性。 2.MATLAB简介 2.1基本功能 MATLAB是很实用的数学软件它在数学类科技应用软件中在数值运算方面首屈一指。 MATLAB可以进行运算、绘制函数和数据、实现算法、创建用户界面、连接接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。 可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。 2.2应用 MATLAB产品族可以用来进行以下各种工作: ●数值分析 ●数值和符号计算 ●工程与科学绘图 ●控制系统的设计与仿真 ●图像处理技术 ●数字信号处理技术 ●通讯系统设计与仿真 2.3特点 ●此高级语言可用于技术计算 ●此开发环境可对代码、文件和数据进行管理 ●交互式工具可以按迭代的方式探查、设计及求解问题 ●二维和三维图形函数可用于可视化数据 ●各种工具可用于构建自定义的图形用户界面 2.4优势 (1)友好的工作平台和编程环境 MATLAB由一系列工具组成。 这些工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。 包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。 随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。 而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。 简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。 (2)简单易用的程序语言 MATLAB一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。 用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。 新版本的MATLAB语言是基于最为流行的C++语言基础上的,因此语法特征与C++语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。 使之更利于非计算机专业的科技人员使用。 而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。 (3)强大的科学计算机数据处理能力 MATLAB是一个包含大量计算算法的集合。 其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种计算功能。 函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。 在通常情况下,可以用它来代替底层编程语言,如C复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。 (4)界面友好、编程效率高 MATLAB程序书写形式自由,被称为“草稿式”语言,这是因为其函数名和表达更接近我们书写计算公式的思维表达方式,编写MATLAB程序犹如在草稿纸上排列公式与求解问题,因此可以快速地验证工程技术人员的算法。 此外MATLAB还是一种解释性语言,不需要专门的编译器。 具体地说,MATLAB运行时,可直接在命令行输入MATLAB语句,系统立即进行处理,完成编译、链接和运行的全过程。 利用丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作 (5)图形功能强大 MATLAB具有非常强大的以图形化显示矩阵和数组的能力,同时它能给这些图形增加注释并且可以对图形进行标注和打印。 MATLAB的图形技术包括二维和三维的可视化、图象处理、动画等高层次的专业图形的高级绘图函数(例如图形的光照处理、色度处理以及四维数据的表现等),又包括一些可以让用户灵活控制图形特点的低级绘图命令,可以利用MATLAB的句柄图形技术创建图形用户界面。 同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。 另外新版本的MATLAB还着重在图形用户界面(GUI)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。 3.基本原理 既是线性码又是分组码的码称线性分组码,监督码元与本组信息码元有关的码称为分组码,监督码元与信息码元的关系可以用线性方程表示的码,因此,一个码字中的监督码元只与本码字的信息码元有关,而且这种关系可以用线性方程来表示的就是线性分组码通常用(n,k)表示。 线性分组码(n,k)中许用码字(组)为2k个。 定义线性分组码的加法为模二加法,乘法为二进制乘法。 即1+1=0、1+0=1、0+1=1、0+0=0;1×1=1、1×0=0、0×0=0、0×1=0。 线性分组码具有如下性质(n,k)的性质: 1、封闭性。 任意两个码组的和还是许用的码组。 2、码的最小距离等于非零码的最小码重。 对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,常记作(n,k)码,如果满足2r-1≥n,则有可能构造出纠正一位或一位以上错误的线性码。 3.1线性分组码编码 下面以(6,3)分组码为例,讨论线性分组码的编码原理。 设分组码(n,k)中,k=3,为能纠正一位误码,要求r≥3。 现取r=3,则n=k+r=6。 该例子中,信息组为 码字为 .当已知信息组时,按以下规则得到三个校验元,即 c2=c5+c4 c1=c3+c4(3-1) c0=c5+c3 这组方程称为校验方程。 (6,3)线性分组码有23(8)个许用码字或合法码字,另有26-23个禁用码字。 发送方发送的是许用码字,若接收方收到的是禁用码字,则说明传输中发生了错误。 为了深化对线性分组码的理论分析,可将其与线性空间联系起来。 由于每个码字都是一个二进制的n重,及二进制n维线性空间 中的一个矢量,因此码字又称为码矢。 线性分组码的一个重要参数是码率r=k/n,它说明在一个码字中信息位所占的比重,r越大,说明信息位所占比重越大,码的传输信息的有效性越高。 由于(n,k)线性分组,线性分组码的2k个码字组成了n维线性空间 的一个K维子空间。 因此这2k个码字完全可由k个线性无关的矢量所组成。 设此k个矢量为 有生成矩阵形式为 G= (3-2) (n,k)码字中的任一码字 均可由这组基底的线性组合生成,即 = ·G= ·G(3-3) 式中, =[mn-1mn-2…mn-k]是k个信息元组成的信息组。 表3.1(6,3)线性分组码 信息组 码字 000 000000 001 001011 010 010110 011 011101 100 100101 101 101110 110 110011 111 111000 对于表1给出的(6,3)线性分组码,可将写成矩阵形式 = . (3-4) 故(6,3)码的生成矩阵为 G= (3-5) 可以看到,从(6,3)码的8个码字中,挑选出k=3个线性无关的码字(100101)(010110),(001011)作为码的一组基底,用c=m·G计算得码字。 一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵 ,因此生成矩阵G表示为 G= (3-6) 式中,Q是一个k×(n-k)阶矩阵。 3.2校验矩阵 在表1所示的(6,3)线性分组码的四个校验元由式(1-1)所示的线性方程组决定的。 把(1-1)移相,有 c5+c4+c2=0 c3+c1+c4=0(3-7) c5+c3+c0=0 上式的矩阵形式为 . = (3-8) 这里的四行七列矩阵称为(6,3)码的一致校验矩阵,用H表示,即 H= (3-9) 由H矩阵得到(n,k)线性分组码的每一码字 (i=1,2,…,2k),都必须满足由H矩阵各行所确定的线性方程组,即 ·HT=0。 (6,3)码的生成矩阵G中每一行及其线性组合都是(n,k)码的码字,所以有G·HT=0。 由G和H构成的行生成的空间互为零空间,即G和H彼此正交。 H=[PTIr]其右边r行r列组成一个单位方阵。 3.3伴随式与译码 3.3.1码的距离及纠检错能力 1.码的距离 两个码字之间,对应位取之不同的个数,称为汉明距离,用d表示。 一个吗的最小距离 定义为 = 两个码字之间的距离表示了它们之间差别的大小。 距离越大,两个码字的差别越大,则传送时从一个码字错成另一码字的可能性越小。 码的最小距离愈大,其抗干扰能力愈强。 2.线性码的纠检错能力 对于任一个(n,k)线性分组码,若要在码字内 (1)检测出e个错误,则要求码的最小距离d≥e+1; (2)纠正t个错误,则要求码的最小距离d≥2t+1; (3)纠正t个错误同时检测e(≥t)个错误,则要求d≥t+e+1; 3.3.2伴随式与译码 假设接收端收到的码字为R,那么它和原来发送端发送的码字A之间就有可能存在着误差。 即在码组A= 中的任意一位就有可能出错。 这样我们在接收端接收到一个码组是就有可能判断错发送端原来应该要表达的意思。 为了描述数据在传输信道中出现错误的情况,引入了错误图样E,在错误图样中,0代表对应位没有传错,1代表传输错误。 实际上错误图样E就是收序列与发送序列的差。 所以在译码中用接收到的码字B模尔加错误图样E就可以得到发送端的正确码字A。 因此译码的过程就是要找到错误图样E。 定义: 伴随式S S=R* =(A+E)* =A* +E* =E* (3-10) 因为A是编得的正确码字。 根据前面所叙述,它和监督矩阵的转置相乘为0。 显然,S仅与错误图样有关,它们之间是一一对应的关系。 找到了伴随式S,也就可以找到E。 而与发送的码字无关。 若E=0,则S=0;因此根据S是否为0可进行码字的检错。 如果接收码字R中只有一位码元发生错误,又设错误在第i位。 即Ei-1=1,其他的Ei均为0。 在后面的译码程序中,建立了一个伴随式S与错误图样E对应的表。 也就是收到一个R序列,就可以通过计算得到一个校正子,而每一个校正子都对应着一个错误图样E,再通过R模尔加上E,就可以得到正确的码字A。 因为在不同的错误序列R中,同一位码元错误时对应的E是一样的,所以可以利用000000这个正确的码字让它每位依次错误,来求得它的八个校正子。 而这时的矩阵R就是错误图样E。 以上面的(6,3)码为例,译码过程中的S与E的计算关系。 对于译码过程来说,同样由上知道监督矩阵: H= (3-11) H矩阵与(n,k)码的任何一个许用码字进行相乘的结果必等于0,即若C=m·G是任一(n,k)码字,则必有C·HT=0。 若不属于许用码字,或有传输差错,且差错位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,可以纠错或检错重发当编码矩阵与生成矩阵的转置矩阵相乘时,若当其中的一位编码或两位出现差错时会有八种情况,则这些情况列出错码矩阵如下: 表3.2(6,3)线性分组码的译码表 校正子S 错误图样E 000 000000 101 000001 110 000010 011 000100 100 001000 010 010000 001 100000 而这些情况正好是和校验子有某种对应关系的,根据这些对应关系可以进行相关编程。 若编程检测到了那一位错误可以根据 A=R+E(3-12) 其中A为纠错输出码序列,E为差错图样,R为接受到的码字。 对接收到的信息进行改正求出正确的编码,从而再提去更正后的接收序列的前三位来提取信息位,以至获得信息矩阵I。 4.仿真结果分析 4.1程序分析 G生成矩阵H监督矩阵C许用码组I输入信息序列R接受码字A纠错输出码序列E错误图样S伴随式 通过生成矩阵G,使用MATLAB语言H=gen2par(G);求出其校验矩阵H,通过C=rem(I*G,2);disp('所得许用码组结果为: C=');计算并显示许用码组C。 根据接受到的码字译码,输入接收到的码字R,通过校验矩阵H,判断码字的正误,若没有错误则输出正确码字,若有一位错误则显示第几位错误并纠正错误码字,输出正确的信息为码字码字。 4.2仿真结果 若输入接受码字为[001011],则显示没有错误,显示纠正后的码字为原码字并显示译出信息序列为001 图4.1输入正确码字 若输入接受到的码字为[110000],则显示第四位出现一个错误并纠正其错误,显示纠正后的正确码字[111000],并译出正确的信息序列111 图4.2输入一个错误码字 参考文献 [1]孙丽华编.信息论与纠错编码.电子工业出版社.2005,3 [2]郭文彬桑林编.通信原理-基于MATLAB的计算机仿真.北京邮电大学出版社.2006.2 [3]苏金明阮沈勇编.MATLAB实用教程(第二版).电子工业出版社.2008.2 [4]徐东艳孟晓刚编.MATLAB函数库查询词典.中国铁道出版社.2006.4 [5]潘新民编.计算机通信技术.电子工业出版社.2003.7 [6]吴玲达李国辉杨冰等编.计算机通信原理与技术.国防科技大学出版社.2003.3 [7]曹志刚钱压生编.现代通信原理.清华大学出版社.1992.2 [8]梅志红杨万铨编.MATLAB程序设计基础及其应用.清华大学出版社.2005 设计总结 课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 本次课设通过对线性分组码中的(6,3)码编译过程的编程实现,了解到线性分组码的构成方式是把信息序列分成每k个码元一段,并由这k个码元按一定规则产生r个校验位,组成长度为n=k+r的码字,用(n,k)表示。 信息码元与校验位之间为线性关系。 并且知道了线性分组码中的(6,3)码的编码过程信息码元与校验位之间的线性关系实现起来是相对简单的。 线性分组码具有编译码简单,封闭性好等特点,采用差错控制编码技术是提高数字通信可靠性的有效方法,是目前较为流行的差错控制编码技术之一。 致谢 历经三周的课程设计快要接近尾声,我的设计任务也较顺利地完成。 回想我刚接到我的设计题目时,脑海里一点概念都没有。 线性分组码在上计算机通信科时老师并未讲到,所以一下子不知道它所谓何物。 在把理论的知识弄懂后,我用MATLAB软件仿真,MATLAB语言简单,使用性好,刚开始对于它并不熟悉,通过这次课设,到处查资料,使我渐渐了解了MATLAB的很多函数用法,提高了我的编程能力。 尤其当我的编程所得到的结果与我理论推导的相一致时,我感到无比的欣慰。 总之,此次课设使我学到很多东西,不仅提高了我的动手能力及自学能力,还知道了我的不足之处,今后应加强。 这次课设能进展如此顺利,多亏了老师们不辞辛苦,不厌其烦的耐心指导,同学们之间互相协作,还有我使用的参考书的编者们的帮助,在此我诚挚地感谢您们! 附录 程序: clearall closeall G=[100101; 010110; 001011];%给出生成矩阵 H=gen2par(G);%求监督矩阵 disp('监督矩阵为: H='); disp(H); I=[000;001;010;011;100;101;110;111]; C=rem(I*G,2);%求出的许用码组为C disp('所得许用码组结果为: C=');%显示输出码字C disp(C); %译码并判别 clearall; closeall; G=[100101; 010110; 001011]; R=input('请输入接收到的码组R: '); [a,b]=size(R);%返回数组R的维数 E=[000000;100000;010000;001000; 000100;000010;000001]; H=gen2par(G); S=rem(R*H',2);%求校验子S disp('所得伴随式为: S=');%显示输出码字的伴随式 disp(S); i=1; fori=1: 1: a M(i,1)=S(i,1).*4+S(i,2).*2+S(i,3);%求校验子所表示的十进制整数 end fori=1: 1: a switch(M(i,1)) case0 A(i,: )=R(i,: )+E(1,: ); case5 A(i,: )=R(i,: )+E(2,: ); case6 A(i,: )=R(i,: )+E(3,: ); case3 A(i,: )=R(i,: )+E(4,: ); case4 A(i,: )=R(i,: )+E(5,: ); case2 A(i,: )=R(i,: )+E(6,: ); case1 A(i,: )=R(i,: )+E(7,: ); end end fori=1: 1: a switch(M(i,1)) case0 disp('没有出现错误! '); case1 disp('注意: 第1位出现一个错误! 请纠正! '); case2 disp('注意: 第2位出现一个错误! 请纠正! '); case4 disp('注意: 第3位出现一个错误! 请纠正! '); case3 disp('注意: 第4位出现一个错误! 请纠正! '); case6 disp('注意: 第5位出现一个错误! 请纠正! '); case5 disp('注意: 第6位出现一个错误! 请纠正! '); end end A=rem(A,2);%求出正确的编码 disp('检纠错后的码组A='); disp(A);%显示正确的编码 j=1; whilej<=3%提取信息位 I(: j)=A(: j); j=j+1; end disp('译出的信息序列I='); disp(I);%显示原信息码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 分组码 63 译码 仿真 设计