您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于MATLAB的(7-4)循环码的编译仿真
1EquationChapter1Section1HarbinInstituteofTechnology信息论与编码实验报告基于MATLAB的(7,4)循环码的编译仿真院系:电子与信息工程学院姓名:周才发学号:13S005051班级:通信二班哈尔滨工业大学2基于MATLAB的(7,4)循环码的编译仿真(电子与信息工程学院13S005051周才发序号:15)1、循环码简介随着社会经济的迅速发展和科学技术的全面进步,计算机事业的飞速发展,以计算机与通信技术为基础的信息系统正处于蓬勃发展的时期。随着经济文化水平的显著提高,人们对生活质量及工作软件的要求也越来越高。在计算机通信信息码中循环码是线性分组码的一个重要子集,是目前研究得最成熟的一类码。它有许多特殊的代数性质,它使计算机通信以一种以数据通信形式出现,实现了在计算机与计算机之间或计算机与终端设备之间进行有效的与正确地信息传递,它使得现代通信的可靠性与有效性实现了质的飞跃。它是现代计算机技术与通信技术飞速发展的产物,在日常生活通信领域、武器控制系统等领域都被广泛应用。纠错码(errorcorrectingcode),在传输过程中发生错误后能在收端自行发现或纠正的码。仅用来发现错误的码一般常称为检错码。为使一种码具有检错或纠错能力,须对原码字增加多余的码元,以扩大码字之间的差别,即把原码字按某种规则变成有一定剩余度(见信源编码)的码字,并使每个码字的码之间有一定的关系。关系的建立称为编码。码字到达收端后,可以根据编码规则是否满足以判定有无错误。当不能满足时,按一定规则确定错误所在位置并予以纠正。纠错并恢复原码字的过程称为译码。检错码与其他手段结合使用,可以纠错。纠错编码又称信道编码,它与信源编码是信息传输的两个方面。它们之间存在对偶的关系。应用信道译码直接对一些自然信息进行处理,可以去掉剩余度,以达到压缩数据的目的。为了使一种码具有检错或纠错能力,必须对原码字增加多余的码元,以扩大码字之间的差别,使一个码字在一定数目内的码元上发生错误时,不致错成另一个码字。准确地说,即把原码字按某种规则变成有一定剩余度的码字,并使每个码字的码元间有一定的关系。关系的建立称为编码。码字到达收端后,用编码时所用的规则去检验。如果没有错误,则原规则一定满足,否则就不满足。由此可以根据编码规则是否满足以判定有无错误。当不能满足时,在可纠能力之内按一定的规则确定错误所在的位置,并予以纠正。纠错并恢复原码字的过程称为译码;码元间的关系为线性时,称为线性码;否则称为非线性码。检错码与其他手段结合使用,可以纠错。检错反馈重发系统(ARQ系统)就是一例。循环码是线性分组码的一种,所以它具有线性分组码的一般特性,此外还具有循环性。循环码的编码和解码设备都不太复杂,且检(纠)错能力强。它不但可以检测随机的错误,还可以检错突发的错误。,nk循环码可以检测长为nk或更短的任何突发错误,包括首尾相接突发错误。循环码是一种无权码,循环码编排的特点是相邻两个数码之间符合卡诺图中的邻接条件,即相邻两个数码之间只有一位码元不同,码元就是组成数码的单元。符合这个特点的有多种方案,但循环码只能是表中的那种。循环码的优点是没有瞬时错误,因为在数码变换过程中,在速度上会有快有慢,中间经过其它一些数码形式,称它们为瞬时错误。这在某3些数字系统中是不允许的,为此希望相邻两个数码之间仅有一位码元不同,即满足邻接条件,这样就不会产生瞬时错误。循环码就是这样一种编码,它可以在卡诺图中依次循环得到。循环码又称格雷码(GrayCode)。2、实验要求(1)利用(7,4)系统循环码的生成多项式为:31gxxx,请设计该循环码的编码器;(2)随机产生重量为0或1的八种错误图样中的一种,得到实际接收码字。(3)根据接收到的码字进行译码。3、编译码原理循环码最大的特点就是码字的循环特性,所谓循环特性是指:循环码中任一许用码组经过循环移位后,所得到的码组仍然是许用码组,也就是说,不论是左移还是右移,也不论移多少位,仍然是许用的循环码组。,nk循环码的生成多项式写为gx,它是,nk循环码码集中唯一的,幂次为nk的码多项式,则kxgx是一个幂次为n的码多项式。按模1nx运算,此时:11knnxgxRxQxxx(1)即kxgxRx,且因kxgx也是n次幂,故1Qx。由于它是循环码,故kxgx按模1nx运算后的“余式”也是循环码的一个码字,它必能被gx整除,即:()()RxFxGx(2)由以上两式可以得到:11knnxgxQxxRxxFxGx(3)1nkxxFxGx(4)从上式中可以看出,生成多项式g(x)应该是1nx的一个因式,即循环码多项式应该是1nx的一个nk次因式。由生成多项式可以得出相应的典型生成矩阵及标准监督矩阵:1,11,11,02,12,12,00,10,10,0100010000knkkkknkkknkGbbbbbbbbb(5)41,12,10,11,12,10,11,02,00,0100010001knkknknkkkkkHbbbbbbbbb(6)已知(7,4)循环码的生成多项式和校验多项式分别为:31gxxx,421hxxxx。写得其生成矩阵和校验矩阵分别为:1011000010110000101100001011G(7)111010001110100011001H(8)循环码的编译码过程如下:(1)编码过程第一步:将信息码字表示为mx,其最高次幂为1k;第二步:将nkxmx与gx求模得出相应的余式rx;第三步:编码结果为nkcxxmxrx。(2)译码过程第一步:由接收码字Rx与监督矩阵相乘得出错误图样S;第二步:判断S是否为零。若不为零,则出错。在假定至多只有一位错的情况下,可以有效地译了相应的信息码字。第三步:在出错的情况下,将S与标准监督矩阵对比,得出错误的比特位并进行更正得出前四位为信息码字。4、仿真结果(1)编译码程序说明编译码程序由三个子函数及界面函数组成。三个子函数分别完成编码、译码及字符提取的工作,以下为三个函数的源码:%%%%%%%%cyle_code.mfunction[msg_en]=cycle_code(m,msg)%循环码编码函数%输入参数%m:监督位的位数;%msg:信息码字%输出参数%msg_en:编码结果5%inputparameters%码长与信息码字n=2^m-1;k=n-m;%产生生成矩阵parmat和校验矩阵genmatpol=cyclpoly(n,k);[parmat,genmat,k]=cyclgen(7,pol);%调整生成矩阵与监督矩阵gen_temp=eye(k);par_temp=eye(m);parmat=[par_tempgenmat(:,1:m)'];genmat=[gen_tempgenmat(:,1:m)];%产生编码后的码字空间Cmsg_en=rem(msg*genmat,2);%%%%%%%%cyle_decode.mfunctioncode=cycle_decode(m,msg)%循环码译码函数%输入参数%m:监督位的位数;%msg:信息码字%输出参数%code:译码结果%码长与信息码字n=2^m-1;k=n-m;%产生生成矩阵parmat和校验矩阵genmatpol=cyclpoly(n,k);[parmat,genmat,k]=cyclgen(7,pol);%调整生成矩阵与监督矩阵gen_temp=eye(k);par_temp=eye(m);parmat=[par_tempgenmat(:,1:m)'];genmat=[gen_tempgenmat(:,1:m)];%计算伴随式S=rem(msg*parmat',2)';count=0;%比较译码if(sum(S)~=0)for(ii=1:1:n)for(jj=1:1:m)if(S(jj)==parmat(jj,ii))6count=count+1;end;end;if(count==3)mis=ii;elsecount=0;end;end;elsemis=0;end;if(mis)msg(mis)=rem(msg(mis)+1,2);end;%译码结果code=msg(1:k);%%%%%%%%extracts_bits.mfunctionmsg=extract_bits(inf_msg)%比特提取函数%输入参数%inf_msg:信息码字%输出参数%msg:提取结果warningofflen=length(inf_msg);msg=zeros(1,len);forii=1:lenmsg(1,ii)=str2num(inf_msg(ii));%将字符转换成数字end;%msg%%%%%%%cycle.mfunctionvarargout=cycle(varargin)%CYCLEMATLABcodeforcycle.fig%CYCLE,byitself,createsanewCYCLEorraisestheexisting%singleton*.%%H=CYCLEreturnsthehandletoanewCYCLEorthehandleto%theexistingsingleton*.%7%CYCLE('CALLBACK',hObject,eventData,handles,...)callsthelocal%functionnamedCALLBACKinCYCLE.Mwiththegiveninputarguments.%%CYCLE('Property','Value',...)createsanewCYCLEorraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforecycle_OpeningFcngetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.Allinputsarepassedtocycle_OpeningFcnviavarargin.%%*SeeGUIOptionsonGUIDE'sToolsmenu.ChooseGUIallowsonlyone%instancetorun(singleton).%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Edittheabovetexttomodifytheresponsetohelpcycle%LastModifiedbyGUIDEv2.530-Nov-201321:58:46%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@cycle_OpeningFcn,...'gui_OutputFcn',@cycle_OutputFcn,...'gui_LayoutFcn',[],...'gui_Callback',[]);ifnargin&&ischar(varargin{1})gui_State.gui_Callback=str2func(varargin{1});endifnargout[varargout{1:nargout}]=gui_mainfcn(gui_State,varargin{:})
本文标题:基于MATLAB的(7-4)循环码的编译仿真
链接地址:https://www.777doc.com/doc-5631634 .html