*****************
实践教学
*****************
兰州理工大学
计算机与通信学院
2013年秋季学期
通信系统综合训练
题 目: 线性分组码(6,3)码编译码仿真设计 专业班级: 通信工程(3)班 姓 名: 学 号:
指导教师: 彭铎 成 绩:
摘 要
线性分组码是差错控制编码的重要一种,在本次课程设计中,我们采用MATLAB对线性分组码(6,3)码进行编码与译码的仿真设计。
当接收到的六位码字中有一位发生错误时,可以纠正这一位错码;当接收到的码字有两位发生错误时,只能纠正一位错误,但同时能检测出另一位错误不能纠正。只有特定位有两位错误时,才能纠正两位错误。这样就译出正确的信息码组,整个过程是用MATLAB语言实现的。
关键词:编码; 译码; 纠错
录
目
前言 ........................................................................ 3 1.设计目标 .................................................................. 4 2.MATLAB简介 ............................................................... 5
2.1 基本功能 ........................................................... 5 2.2 应用 ................................................................ 6 2.3 特点 ................................................................ 6 2.4 优势 ................................................................ 6 3.基本原理 .................................................................. 8
3.1 线性分组码编码 ...................................................... 9 3.2 校验矩阵 ........................................................... 10 3.3 伴随式与译码 ....................................................... 11 4.仿真结果分析 ............................................................. 14
4.1程序分析 ............................................................ 14 4.2仿真结果 ............................................................ 14 参考文献 ................................................................... 16 设计总结 ................................................................... 17 致谢 ....................................................................... 18 附录 ....................................................................... 19
前言
为了实现通信,在信号传输过程中,往往由于信道传输特性不理想以及加性噪声的影
响,传输的信息中不可避免地会发生错误,影响通信系统的传输可靠性。随着数字通信技术的发展,各种业务对系统误码率的要求也逐渐提高,采用差错控制编码技术是提高数字通信可靠性的有效方法之一。差错控制编码就是在发送端的信息码无序列中,以某种确定的编码规则加入一些监督码元,使信息码元与监督码元之间具有某种相关性。接收端通过检验这种相关性是否存在来判断在传输过程中是否出现了误码。
本次课设通过对线性分组码中的(6,3)码编译过程的编程实现,了解到线性分组码的构成方式是把信息序列分成每k个码元一段,并由这k个码元按一定规则产生r 个校验位,组成长度为n=k+r的码字,用(n,k)表示。信息码元与校验位之间为线性关系。并且知道了线性分组码中的(6,3)码的编码过程信息码元与校验位之间的线性关系实现起来是时分简单的.分组码是一组固定长度的码组(n , k),通常它用于前向纠错。在分组码中,监督位被加到信息位之后,形成新的码。在编码时,k个信息位被编为n位码组长度,而n-k个监督位的作用就是实现检错与纠错。对于长度为n的二进制线性分组码,它有种可能的码组,从种码组中,可以选择M=个码组(k<n)组成一种码。这样,一个k比特信息的线性分组码可以映射到一个长度为n码组上,该码组是从M个码组构成的码集中选出来的,这样剩下的码组就可以对这个分组码进行检错或纠错。本文使用的是功能强大的C语言软件。
1.设计目标
要设计一个(6,3)线性分组码的编译码程序,最基本的是要具备对输入的信息码进行编码,让它具有抗干扰的能力。同时,还要让它具有对接收到的整个码组中提取信息码组的功能。但是,在实际的通信系统中,由于信道传输特性不理想以及加性噪声的影响,
接收到的信息中不可避免地会发生错误,影响通信系统的传输可靠性,因而,本设计还要让该程序具有纠正错误的能力,当接收到的码组中有一位码,发生错误时可以检测到这一位错码,并且可以纠正这一位错码,并且让系统从纠正后的码组中提取正确的信息码组。
针对给定的矩阵
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)中许用码字(组)为2个。定义线性分组码的加法为模二加法,乘法为二进制乘法。即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,则有可能构造出纠正一位或一位以上错误的线性码。
k
3.1 线性分组码编码
下面以(6,3)分组码为例,讨论线性分组码的编码原理。设分组码(n,k)中,k = 3,为能纠正一位误码,要求r≥3。现取r=3,则n=k+r=6。该例子中,信息组为
c5c4c3 ,码字为 c5c4c3c2c1c0 .当已知信息组时,按以下规则得到三个校
验元,即
2=c5+c4
c1=c3+c4 (3-1)
0=c5+c3
这组方程称为校验方程。
(6,3)线性分组码有2(8)个许用码字或合法码字,另有2-2个禁用码字。发送
3
6
3
方发送的是许用码字,若接收方收到的是禁用码字,则说明传输中发生了错误。 为了深化对线性分组码的理论分析,可将其与线性空间联系起来。由于每个码字都是一个二进制的n重,及二进制n维线性空间Vn中的一个矢量,因此码字又称为码矢。线性分组码的一个重要参数是码率r=k/n,它说明在一个码字中信息位所占的比重,r越大,说明信息位所占比重越大,码的传输信息的有效性越高。由于(n,k)线性分组,线性分组码的2个码字组成了n维线性空间Vn的一个K维子空间。因此这2个码字完全可由k个线性无关的矢量所组成。
设此k个矢量为c1c2 ck有生成矩阵形式为
c1 c2
G= (3-2)
ck (n,k)码字中的任一码字ci,均可由这组基底的线性组合生成,即 ci=mi·G= mn 1
G (3-3) mn 2 mn k ·
式中,mi =[mn-1 mn-2 mn-k ]是k个信息元组成的信息组。
k
k
表3.1 (6,3)线性分组码
对于表1给出的(6,3)线性分组码,可将写成矩阵形式
100101
(3-4)010110 c5c4c3c2c1c0 = c5c4c3 .
001011
故(6,3)码的生成矩阵为
100101
(3-5)010110 G=
001011
可以看到,从(6,3)码的8个码字中,挑选出k=3个线性无关的码字(100101)(010110),(001011)作为码的一组基底,用c=m·G计算得码字。
一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵Ik,因此生成矩阵G表示为
G= IKQ (3-6)
式中,Q是一个k×(n-k)阶矩阵。
3.2 校验矩阵
在表1所示的(6,3)线性分组码的四个校验元由式(1-1)所示的线性方程组决定的。把(1-1)移相,有
上式的矩阵形式为
c3+c1+c4=0 (3-7) c5+c3+c0=0
c5 c4 0
110100
011010 . c3 = 0 (3-8) c2 0
101001 0 c1 c0
这里的四行七列矩阵称为(6,3)码的一致校验矩阵,用H表示,即
110100 H=011010 (3-9) 101001
由H矩阵得到(n,k)线性分组码的每一码字cj (i=1,2, ,2k),都必须满足由H矩阵各行所确定的线性方程组,即 ci·HT=0。(6,3)码的生成矩阵G中每一行及其线性组合都是(n,k)码的码字,所以有G·HT =0。由G和H构成的行生成的空间互为零空间,即G和H彼此正交。H=[PT Ir]其右边r行r列组成一个单位方阵。
3.3 伴随式与译码
3.3.1 码的距离及纠检错能力 1.码的距离
两个码字之间,对应位取之不同的个数,称为汉明距离,用d表示。一个吗的最小距离dmin定义为dmin=min{d(ci,cj),i j,ci,cj n,k },两个码字之间的距离表示了它们之间差别的大小。距离越大,两个码字的差别越大,则传送时从一个码字错成另一码字的可能性越小。码的最小距离愈大,其抗干扰能力愈强。 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= a5a4a3a2a1a0 中的任意一位就有可能出错。这样我们在接收端接收到一个码组是就有可能判断错发送端原来应该要表达的意思。为了描述数据在传输信道中出现错误的情况,引入了错误图样E,在错误图样中,0代表对应位没有传错,1代表传输错误。实际上错误图样E就是收序列与发送序列的差。所以在译码中用接收到的码字B模尔加错误图样E就可以得到发送端的正确码字A。因此译码的过程就是要找到错误图样E。
定义:伴随式S
S = R *HT= ( A + E ) * HT= A *HT+ E *HT
= E * HT (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的计算关系。对于译码过程来说,同样由上知道监督矩阵:
110100
(3-11)011010 H=
101001
H矩阵与(n,k)码的任何一个许用码字进行相乘的结果必等于0,即若C=m·G是任一(n,k)码字,则必有C·HT=0。若不属于许用码字,或有传输差错,且差错位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,可以纠错或检错重发当编码矩阵与生成矩阵的转置矩阵相乘时,若当其中的一位编码或两位出现差错时会有八种情况,则这些情况列出错码矩阵如下:
表3.2 (6,3)线性分组码的译码表
而这些情况正好是和校验子有某种对应关系的,根据这些对应关系可以进行相关编程。若编程检测到了那一位错误可以根据
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仿真结果
若输入接受码字为[0 0 1 0 1 1], 则显示没有错误,显示纠正后的码字为原码字并显示译出信息序列为 0 0 1
图4.1 输入正确码字
若输入接受到的码字为[1 1 0 0 0 0],则显示第四位出现一个错误并纠正其错误,显示纠正后的正确码字[1 1 1 0 0 0],并译出正确的信息序列 1 1 1
图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