线性分组码94.docx
- 文档编号:25950812
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:23
- 大小:96.46KB
线性分组码94.docx
《线性分组码94.docx》由会员分享,可在线阅读,更多相关《线性分组码94.docx(23页珍藏版)》请在冰豆网上搜索。
线性分组码94
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
计算机通信课程设计
题目:
线性分组码(9,4)码的编译码仿真设计
专业班级:
姓名:
学号:
指导教师:
成绩:
前言
计算机通信是一种以数据通信形式出现,在计算机与计算机之间,计算机与终端设备之间进行信息传递的方式。
它是现代计算机技术与通信技术相结合的产物,在军队指挥自动化系统、武器控制系统、信息处理系统、决策分析系统、情报检索系统以及办公自动化系统等领域得到了广泛应用。
按通信覆盖地域的广度,计算机通信通常分为局域网、城域网、广域网三类。
在通常情况下,计算机通信都是由多台计算机通过通信线路连接成计算机通信网进行的,这样可共享网络资源,充分发挥计算机系统的效能。
近年来,随着计算机、卫星通信及高速数据网的飞速发展,数据的交换、数据的交换理和存储技术得到了广泛的应用,人们对数据传输和存储系统的可靠性提出了越来越高的要求。
因此,如何控制差错、提高数据传输和存储的可靠性,成为现代数字通信系统设计的重要课题。
目前,绝大多数的数字计算机和数字通信系统中广泛采用二进制形式的码。
而线性分组码具有编译码简单,封闭性好等特点,通常它用于前向纠错。
在分组码中,监督位被加到信息位之后,形成新的码。
在编码时,k个信息位被编为n位码组长度,而n-k个监督位的作用就是实现检错与纠错。
这种码的编码效率比较高,因此得到了广泛的应用。
本课程设计主要是采用Matlab仿真实现线性分组码的编译码。
在加深理论知识的基础上,对Matlab仿真也有进一步的理解。
第一章线性分组码原理
1.1差错控制概述
数字信号在传输过程中,由于受到干扰的影响,码元波形将变坏,接收端收到后可能发生错误判决,由乘性干扰引起的码间串扰,一般采用均衡的办法纠正。
加性干扰的影响一般从合理选择调制制度解调方法以及发送功率等方面考虑,使加性干扰不足以影响达到误码率要求。
在仍不能满足要求时,为减少错误、提高通信质量还采用检错、纠错技术,即差错控制措施。
差错控制的主要方法是将数据以某种形式编码。
差错控制的核心为:
抗干扰编码,简称差错控制编码。
差错控制编码分为检错码、纠错码两大类。
它在码元间建立了某种数学约束关系,并且对特定的信道总存在某种纠错编码信号以实现最小的能量或最小的带宽或最小的时间代价获得最小的数据传输差错。
对于不同信道,采用不同类型的差错控制技术。
差错控制技术主要有:
1)检错重发:
在发送码元序列中加入差错控制码元,接收端利用这些码元检测到有错码时,利用反向信道通知发送端,要求发送端重发,知道正确接收为止。
2)前向纠错:
前向纠错是利用接收端在发送码元序列中加入的差错控制码元,不但能够发现错码,还能够将错码恢复其正确值。
3)反馈校验:
不需要在发送序列中加入差错控制码元,接收端接收到的码元原封不动的转发会发送端。
在发送端将他和原发送码元逐一比较,若发现有不同,就认为接收端接受的序列有错码,发送端立即从发。
4)检错删除:
在接收端发现错码后,立即将其删除,不要求重发。
这种方法只适合在少数特定系统中,在那里发送码元有大量的多余度,删除部分接收码元不影响应用。
1.2差错控制原理
将信息码分组,并为每个信息组附加若干监督的编码,称为“分组码”。
在分组码中,监督码元仅监督本组码中的信息码元。
分组码一般用符号(n)、(k)表示,其中k是每组码二进制信息码元的数目。
n是码组的总位数,又称为码组的长度。
r=n-k为每个码组中的监督码元数目,或称监督位数目。
k位二进制数构成的码组集合为种不同的码组,若组都为有用码组,其中任意码组出现错误都将变成另一码组,则接收端无法检测识别哪一组出错。
若只取部分码组为有用码组,则在传输过程中如接收端接收到的码组为非许用码组即禁用码组时,则可知传输错误。
以3位二进制数构成的码组为例,它共有8种不同的可能组合,若将其全部用来表示天气,则可以表示8种不同天气,例如:
000晴、001云、010阴、011雨、100雪、101霜、110雾、111雹。
其中任一码组在传输中若发生一个或多个错误,则将变成另一个信息码组。
这时接收端无法发现错误。
若在上述8种码组中秩序使用4种来传达天气,例如:
000晴、011云、101阴、110雨。
这时,虽然只能传达4种不同的天气,但是接收端却可能发现码组中的一个错码。
如000错码一位,则接受码组将变成100或010或011.这三种码组都为禁用码组,故接收端认为接收码错误。
要想能够纠正错误,需增加冗余度。
1.3线性分组码概念
在计算机系统中,信息均按字节或字组成,故一般采用分组码。
对信源输出的序列,若按每组长k位进行分组,则在二进制情况下共有个不同的组合,若按某一种规则,将每一组k位增加r位校验位(r=n-k,n是含有码元的个数)。
使之成为具有一定纠错或检错能力的码字,则在个码字集合构成分组码。
分组码的规律性是局限在一个码组之内的,如果这种规律性是以一线性方程组来表示的,则这种分组码就叫做线性分组码。
1.4线性分组码的基本原理
分组码是一组固定长度的码组,一般可用符号(n,k)表示,其中k是每组的信息元数目,n是码组的总位数,又称为码组的长度(码长)。
r=n-k为码组的监督元数目。
长为n的所有二进制组(或称n重)共有个,但长为k的信息组只有个,因此分组码实际上就是以一定的规则从个n重中挑选出个n重,使个信息组与个n重之间建立一一对应关系,这个n重组成了一个(n,k)分组码。
通常称这个n重为许用码组,简称码组,码矢或码字,而其余的-个n重为禁用码组。
在(n,k)线性分组码中,常用编码效率R衡量码的有效性,它定义为信息位在码字中所占的比重:
R=k/n。
R越大,表明码的冗余度越小。
第二章线性分组码的编码
2.1生成矩阵
性分组码(n,k)中许用码字(组)为个。
定义线性分组码的加法为模二加法,乘法为二进制乘法。
即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,则有可能构造出纠正一位或一位以上错误的线性码。
下面我们通过(9,4)分组码的例子来说明如何具体构造这种线性码。
设分组码(n,k)中,k=4,为能纠正一位误码,要求r≥5。
现取r=5,则n=k+r=9。
该例子中,信息组为(),码字为().当已知信息组时,按以下规则得到五个校验元,即
(2.1)
(9,4)线性分组码有
个许用码字或合法码字,另有
-
个禁用码字。
发送方发送的是许用码字,若接收方收到的是禁用码字,则说明传输中发生了错误。
为了深化对线性分组码的理论分析,可将其与线性空间联系起来。
由于每个码字都是一个二进制的n重,及二进制n维线性空间Vn中的一个矢量,因此码字又称为码矢。
线性分组码的一个重要参数是码率r=k/n,它说明在一个码字中信息位所占的比重,r越大,说明信息位所占比重越大,码的传输信息的有效性越高。
由于(n,k)线性分组,线性分组码的2个码字组成了n维线性空间Vn的一个K维子空间。
因此这个码字完全可由k个线性无关的矢量所组成。
设此k个矢量为,,,有生成矩阵形式为
(2.2)
(n,k)码字中的任一码字,均可由这组基底的线性组合生成,即
=[
]·G(2.3)
式中,[
]是k个信息元组成的信息组。
写出线性分组码(9,4)码的所有信息组,由式(2.1)可得到生成的所有码字,如下表2-1所示:
信息组
码字
信息组
码字
1100
11
1
1
1
010
0101
11
11
1000
0001
1
110
表2-1线性分组码(9,4)码
对于表2-1给出的线性分组码(9,4)码,可将写成矩阵形式
[]=[](2.4)
故(9,4)码的生成矩阵为
(2.5)
可以看到,从(9,4)码的16个码字中,挑选出k=4个线性无关的码字(100011100)(010011011),(001010110),(000101111)作为码的一组基底,用C=m·G计算得码字。
一个系统码的生成矩阵G,其左边k行k列应是一个k阶单位方阵,因此生成矩阵G表示为G=[P](2.6)
式中,P是一个k×(n-k)阶矩阵。
2.2校验矩阵
表2-1所示的(9,4)线性分组码的四个校验元由式(2.1)所示的线性方程组决定的。
把式(2.1)移相,
(2.7)
上式的矩阵形式为
=0(2.8)
这里的五行九列矩阵称为(9,4)码的一致校验矩阵,用H表示,即
(2.9)
由H矩阵得到(n,k)线性分组码的每一码字,(i=1,2),都必须满足由H矩阵各行所确定的线性方程组,即·=0。
(9,4)码的生成矩阵G中每一行及其线性组合都是(n,k)码的码字,所以有G·=0。
由G和H构成的行生成的空间互为零空间,即G和H彼此正交。
H=[]其右边r行r列组成一个单位方阵。
第三章线性分组码的译码
3.1纠错码的介绍
纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。
仅用来发现错误的码一般常称为检错码。
关系的建立称为编码。
码字到达收端后,可以根据编码规则是否满足以判定有无错误。
当不能满足时,按一定规则确定错误所在位置并予以纠正。
纠错并恢复原码字的过程称为译码。
检错码与其他手段结合使用,可以纠错。
纠错编码又称信道编码,信源编码是信息传输的两个方面。
它们之存在对偶的关系。
准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。
码元间的关系为线性时,称为线性码;否则称为非线性码。
检错码与其他手段结合使用,可以纠错。
3.2纠错的原理
纠错码能够检错或纠错,主要是靠码字之间有较大的差别。
这可用码字之间的汉明距离d(x,y)来衡量。
它的定义为码字x与y之间的对应位取不同值的码元个数。
一种纠错码的最小距离d定义为该种码中任两个码字之间的距离的最小值。
一种码要能发现e个错误,它的最小距离d应不小于e+1。
若要能纠正t个错误,则d应不小于2t+1。
在构造线性码时,数字上是从n维空间中选一k维子空间,且使此子空间内各非零码字的重量尽可能大。
若一种码的码长为n,码字数为M,或信息位为h,以及最小距离为d,则可把此码记作分组码。
若此码为线性码,常简记作(n,k)码。
常用R=M/n表示码的信息率,单位为比特/码元。
R越大,则每个码元所携带的信息量越大,编码效率越高。
纠错码实现中最复杂的部分是译码。
它是纠错码能否应用的关键。
采用的码长n越大,则误码率越小。
但n越大,编译码设备也越复杂,且延迟也越大。
人们希望找到的译码方法是:
误码率随码长n的增加按指数规律下降;译码的复杂程度随码长n的增加接近线性地增加;译码的计算量则与码长n基本无关。
3.3线性分组码译码原理
两个码字之间,对应位取之不同的个数,称为汉明距离,用d表示。
一个码的最小距离定义为=min{d(,),i≠j,,∈(n,k)},两个码字之间的距离表示了它们之间差别的大小。
距离越大,两个码字的差别越大,则传送时从一个码字错成另一码字的可能性越小。
码的最小距离愈大,其抗干扰能力愈强。
对于任一个(n,k)线性分组码,若要在码字内检测出e个错误,则要求码的最小距离d≥e+1;纠正t个错误,则要求码的最小距离d≥2t+1;(3)纠正t个错误同时检测e(≥t)个错误,则要求d≥t+e+1。
假设接收端收到的码字为B,那么它和原来发送端发送的码字A之间就有可能存在着误差。
即在码组A={}中的任意一位就有可能出错。
这样我们在接收端接收到一个码组时就有可能判断错发送端原来应该要表达的意思。
为了描述数据在传输信道中出现错误的情况,引入了错误图样E,在错误图样中,0代表对应位没有传错,1代表传输错误。
实际上错误图样E就是收序列与发送序列的差。
所以在译码中用接收到的码字B模二加错误图样E就可以得到发送端的正确码字A。
因此译码的过程就是要找到错误图样E。
因为A是编得的正确码字。
根据前面所叙述,它和监督矩阵的转置相乘为0。
显然,S仅与错误图样有关,它们之间是一一对应的关系。
找到了校正子S,也就可以找到E。
而与发送的码字无关。
若E=0,则S=0;因此根据S是否为0可进行码字的检错。
如果接收码字B中只有一位码元发生错误,又设错误在第i位。
即=1,其他的均为0。
在后面的译码程序中,建立了一个校正子S与错误图样E对应的表。
也就是收到一个B序列,就可以通过计算得到一个校正子,而每一个校正子都对应着一个错误图样E,再通过B模二加上E,就可以得到正确的码字A。
因为在不同的错误序列B中,同一位码元错误时对应的E是一样的,所以可以利用000000000这个正确的码字让它每位依次错误,来求得它的校正子。
而这时的矩阵B就是错误图样E。
在编程时本实验所采用的为(9,4)线性分组码,最小汉明距离为2,所以具有纠错1位检错两位的功能。
第四章推导过程
4.1编码过程
监督矩阵H与生成矩阵G的关系:
由H与G的分块表示的矩阵形式
H=[P](4.1)
G=[Q](4.2)
P=(4.3)
则有G·=0(4.4)
或H·=0(4.5)
已知给出的(9,4)码的Q矩阵
(4.6)
则可以根据G=[Q]求出生成矩阵
(4.7)
由P=和H=[P]即可求出监督矩阵H
H=(4.8)
有了生成矩阵后则可以根据输入的四位信息位和生成矩阵相乘得到编码矩阵,即
C=mG(4.9)
4.2译码过程
对于译码过程,同样由上知道监督矩阵H
H=(4.10)
H矩阵与(n,k)码的任意一个许用码字相乘的结果必然为零,即若C=m·G是任一(n,k)码字,则必有C·=0。
若不属于许用码字,或有传输差错,且差错位数在(n,k)码纠错能力内,则运算结果将为非0值,此时,可以纠错或检错重发。
当编码矩阵与生成矩阵的转置相乘时,若当其中的一位编码或两位出现差错时会有十种情况:
=B·=[000000000]·=00000(4.11)
=B·=[000000001]·(4.12)
=B·=[000000010](4.13)
=B·=[000000100](4.14)
......
=B·=[010000000](4.15)
=B·=[100000000](4.16)
=B·=[010000100]
=11111(4.17)
由以上各式,可得出译码时所有可能出现的校正子及错误图样,如下表(4-1)所示:
校正子S
错误图样E
000
001
010
100
000
1
00
000
1
00
11
0
111
11111
010000100
表4-1(9,4)线性分组码的译码表
而这些情况正好是和校验子有某种对应关系的,根据这些对应关系可以进行相关编程。
若编程检测到了哪一位错误,可以根据
A=B+E(4.18)
其中A为纠错输出码序列,E为错码矩阵。
对接收到的信息进行改正求出正确的编码,从而再提去更正后的接收序列的前三位来提取信息位,以至获得信息矩阵I。
第五章仿真结果分析
5.1编码程序流程图
在前面章节,我们得到矩阵Q,Q为一个四行五列矩阵。
由Q得到生成矩阵G,在得到监督矩阵H,从而得到所有可用的码组,即完成编码。
(9,4)线性分组码的编码流程图如下图5-1所示:
图5-1编码程序流程图
5.2译码程序流程图
同样,我们根据上述章节得到监督矩阵H,则将码字与监督矩阵的转秩相乘,得到伴随式S,检验出错误码的位置,并得到正确的码字及信息位,即(9,4)线性分组码的译码完成。
译码流程图如下图5-2所示:
图5-2译码流程图
5.3运行结果分析
运行程序,因为矩阵Q在程序中已给出,则得出生成矩阵G和监督矩阵H,输入一组信息序列m,得到生成码字C。
此过程完成程序的编码。
同样,根据监督矩阵H,输入码字C,则C与H的转秩相乘得到伴随式S,并由程序得出出错位置及正确码字和信息位,从而完成校验过程,得到译码。
运行结果如下图5-3、5-4所示。
图5-3程序编码过程
图5-4程序校验过程
致谢
经过两个星期的课程设计,使我们加强了动手、思考和解决问题的能力。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
这次课程设计也让我体会到同学及老师间交流的重要性。
只有彼此间认真交流、协作,才能让每个人的思维更加开阔,使每个人的设计更加完善。
三人行,必有我师焉。
交流也能让我们学到其他方面的东西,也能增加同学间以及师生间的距离。
在我们师生认真努力下,此次课程设计终于顺利完成了,在设计中遇到了很多专业知识问题,最后在同学的交流以及老师的辛勤指导下,终于迎刃而解,同时也学到很多实用的知识,学到了很多课内学不到的东西,比如独立思考解决问题,出现差错的随机应变等都受益匪浅。
在此,感谢老师的细心指导!
参考文献
[1]樊昌新,曹丽娜.通信原理.国防工业出版社,2011
[2]孙丽华编.信息论与纠错编码.电子工业出版社.2005,3
[3]郭文彬桑林编.通信原理-基于MATLAB的计算机仿真.北京邮电大学出版社.2006.2
[4]王华李有军编.MATLAB电子仿真与应用教程(第二版).国防工业出版社.2007.3
[5]孙屹主编.MATLAB通信仿真开发手册.国防工业出版社.2005.1
[6]吴玲达,李国辉,杨冰等著.计算机通信原理与技术[M].国防科技大学出版社,2003,3.
[7]潘新民著.计算机通信技术[M].电子工业出版社,2003,7.
[8]孙丽华著.信息论与纠错编码[M].电子工业出版社,2005,3
[9]Proakis著,张力军译.数字通信(第四版)[M].电子工业出版社,2004,7.
附录
%---初始化k,r,满足分配条件----
flag_in=1;%输入条件标记,若满足条件则跳出循环,否则就一直输入(默认不满足)
while(flag_in)
k=input('线性分组码信息码长度k=');
r=input('线性分组码监督位长度r=');
if(2^r-1>=k+r)
flag_in=0;
else
disp('赋值错误!
须满足2^k-1>=k+r');
end
end
%----------------------------------------------
%---生成校正子,可选择自动生成或手动输入---
Q_yesOrNo=input('是否自动生成校正子?
Y/N:
','s');
if(Q_yesOrNo=='Y')
%从数值不会重合的集合中选出校验子的十进制数
Q_randFull=randperm(2^r-1);
Q_randCheck=zeros(1,k);
%初始化k行r列的矩阵Q
Q=zeros(k,r);
i=1;j=1;
%选出可用的校验子(十进制)
while(i<=k)
flag_cir=1;%循环标记,表示随机矩阵中是否有不符合规则的数,1,2,4,8,...
forn=0:
1:
k-1%判断是否有特殊数字
if(Q_randFull(j)==2^n)
flag_cir=0;%有特殊数字则将标记置为0
end
end
if(flag_cir==1)%一般情况下(默认flag_cir=1),会将正常的数组赋予Q_randCheck
Q_randCheck(i)=Q_randFull(j);
j=j+1;
i=i+1;
else%否则,就使被挑选的数下标加1,即此数不符合要求,试添加下一个数
j=j+1;
end
end
Q_charA=dec2bin(Q_randCheck);%将十进数格式转换为二进制表示方式
fori=1:
1:
k
forj=1:
1:
r
%将字符转换为数值后写入矩阵
Q(i,j)=str2double(Q_charA(i,j));
end
end
else
%初始化k行r列的矩阵
Q=zeros(k,r);
%根据校正子生成Q,为k行r列
fori=1:
1:
k
%要求为输入字符,否则默认输入的为数值
Q_charA(i,:
)=input(sprintf('输入一个校正子,以检测C%d位的错码(%d位)',k+r-i,r),'s');
forj=1:
1:
r
%将字符转换为数值后写入矩阵
Q(i,j)=str2double(Q_charA(i,j));
end
end
end
%-----------------------------------------------
%---生成完全的校正子与错码位置之间的对应关系---
%生成单位矩阵(字符型),以补齐校正子
fori=r-1:
-1:
0
Qr(r-i)=2^i;
end
Q_charB=dec2bin(Qr);%将十进数格式转换为二进制表示方式
%生成校正子与错码位置的对应关系
Q_charC(1:
k,:
)=Q_charA;
Q_charC(k+1:
k+r,:
)=Q_charB;
Q_charD=reshape(sprintf('---->C%02d',k+r-1:
-1:
0),8,k+r)';
disp('校正子与错码位置的对应关系');
Q_char=[Q_charCQ_charD]
%-----------------------------------------------------
%---线性分组码内部的函数关系及计算---
Ik=eye(k);%生成k*k的单位矩阵,与Q合成为生成矩阵G
G=[IkQ];%生成矩阵
P=Q';
Ir=eye(r);%生成r*r的单位矩阵,与P合成为监督矩阵H
H=[PIr];%监督矩阵
%--------------------------------------------------
%---计算所有的可用码组---
valid_yesOrNo=input('是否要显示所有可用码组?
Y/N:
','s');
if(valid_yesOrNo=='Y')
%初始化2^k行k+r列,与1行k列的矩阵
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 线性 分组码 94