版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号:
毕业设计说明书题目:基于matlab的汉明码设计实现学院:信息与通信学院专业:电子信息工程学生姓名:韦荣铭学号:0801130502指导教师:严素清职称:讲师2012年5月20日摘要汉明码是一种能够自动检测并纠正一位错码的线性纠错码,即SEC(SingleErrorCorrecting)码,用于信道编码与译码中,提高通信系统抗干扰的能力。汉明码经过长期的发展,其编解码算法已经比较成熟。汉明码是性能优良的纠错码,在线性分组码中它的编码效率是最高的,可以纠正随机错误。本论文针对不同参数条件下的汉明码其纠错能力进行分析,主要做了以下三个方面的工作:1.了解汉明码的用途、分类及其纠错能力并通过学习相关基础知识,了解其工作原理以及加深理解汉明码的编码、纠错译码的相关算法。能实现任意N,K值的汉明码,对其纠错能力进行理论分析。imulink通信系统仿真模型库进行汉明码建模仿真,对汉明码的性能进行分析。3.利用MATLAB/GUI进行图形界面的仿真,通过建立一个GUI软件,使之能够实现任意N和K的误码率与汉明码图形分析,使之更通俗易懂的表示出来。在不同参数条件下,汉明码能够实现纠错一位误码,检测两位误码,汉明码随着信道误码率的增加纠错能力降低。关键字:汉明码;编码;译码;Simulink;GUI
AbstractHammingcodeisawaytoautomaticallydetectandcorrectanerrorcodeoflinearerrorcorrectingcode,theSEC(SingleErrorCorrecting)codeforchannelcodinganddecoding,theincreaseinanti-jammingabilityofthecommunicationsystem.Hammingcodeoveralongperiodofdevelopment,thecodecalgorithmhasbeenmoremature.Hammingcodeistheexcellentperformanceoferror-correctingcode,itscodingefficiencyisthehighestlinearblockcodescancorrectrandomerrors.ThisthesisfocusesonthedifferentparametersundertheconditionsoftheHammingcodeerrorcorrectioncapabilityanalysis,dothefollowingthreeaspects:1.AnunderstandingoftheuseoftheHammingcode,classificationandcorrectionabilitybylearningthebasicsofhowitworks,aswellastodeepenunderstandingoftheHammingcode,coding,errorcorrectiondecodingalgorithm.CanimplementanyN,theKvalueoftheHammingcodeerrorcorrectioncapabilityfortheoreticalanalysis.2.UsingMATLAB,SIMULINKsimulationmodellibraryofcommunicationsystemsthehammingmodelingandsimulation,toanalyzetheperformanceoftheHammingcode.3.UsingMATLAB/GUIgraphicalinterfaceofthesimulation,throughtheestablishmentofaGUIsoftware,toenablethemtoachieveabiterrorrateofarbitraryNandKandhamminggraphicalanalysis,makingitmoreuser-friendly.Underdifferentconditions,theHammingcodetoachievethecorrectionofanerror,todetecttwoerror,HammingcodeerrorcorrectioncapabilityWiththeincreaseofthechannelbiterrorratelower.Keywords:Hammingcode;encoding;decoding;Simulink;GUI
目录引言 11纠错编码简介 21.1差错控制系统模型 2差错的类型及其特点 2差错控制系统模型及分类 3差错控制基本原理 41.3纠错编码 42汉明码 52.1汉明码编码原理 52.2汉明码解码原理 82.3汉明码编码解码流程图 93汉明码Matlab/Simulink仿真 183.1Simulink简介 183.2汉明码仿真的思路 18汉明码的仿真模块分析 193.3.1BernoulliBinaryGenerator(伯努利二进制随机数产生器) 193.3.2HammingEncode(汉明码编码器) 193.3.3BinarySymmetricChannel(二进制对称信道) 203.3.4HammingDecode(汉明码译码器) 203.3.5ErrorRateCalculation(误码率计算) 203.4汉明码仿真的结果与分析 214基于matlab/GUI汉明码实现 24Matlab/GUI汉明码软件简介 244.2基于matlab/GUI汉明码性能分析 25当N=7,K=4时汉明码性能分析 25汉明码误码率性能分析 265结论 29谢辞 30参考文献 31附录 32引言在实际信道中传输数字信号时,由于信道特性不理想及加性噪声的影响,接收端所收到的数字信号不可避免的的会产生错码,影响通信质量。为了使数字通信系统达到一定的误比特率指标,首先应合理设计基带信号,选择合适的调制方式、解调方式,采用均衡,提高发信功率等,但如果误比特率指标仍不能满足要求,则必须采用信道编码。信道编码也称差错控制编码或纠错编码,它是提高数字通信系统可靠的重要方法。1948年,香农在他的开创性论文《通信的数学理论》中首次阐明了在有扰信道中实现可靠通信的方法,提出了著名的有扰信道编码定理,奠定了纠错编码的基石。如今的纠错编码已有几十年的历史,从早期的线性分组码,BCH码,到后来的RS码、卷积码,级联码、Turbo码;从原来的代数译码,到后来的门限译码、软判决译码,到Viterbi译码等;从注重数学模型、理论研究,到注重纠错编码的使用化问题,并且通过计算机仿真、搜索好码。无论是从编码方法、译码方法还有研究方法上,纠错编码研究都取得了长足的发展,并广泛应用于各种通信系统。如今,纠错编码技术已开始渗透带很多领域,如移动通信中大量利用纠错编码,计算机通信系统中也大量应用纠错编码。汉明码是1950年由Hamming首先构造的,他是一个能够纠正单个错误的线性分组码,即SEC(SingErrorCorrecting)码,它不仅性能好,而且编译电路非常简单,易于实现。从20世纪50年代问世以来,在提高系统可靠性方面获得了广泛的应用。最先用于磁芯存储器,60年代初用于大型计算机,70年代在MOS存储器得到应用,后来在中小型计算机中普遍采用,目前常用在RFID系统中多位错误的纠正。汉明码是在原编码的基础上附加一部分代码,使其满足纠错码的条件,原编码我们可将它称为信息码,附加码称为校验码(又可称为监督码或冗余码)。汉明码码距为3,所以只能够检测到2个错误或纠正1个错误,编码效率最高。它属于线性分组码,由于线性码的编码和译码容易实现,至今仍是应用最广泛的一类码。
1纠错编码简介近年来,随着计算机、卫星通信及高速数据网的飞速发展,数据的交换、处理和存储技术得到了广泛的应用,人们对数据传输和存储系统的可靠性提出了越来越高的要求。因此,如何控制差错、提高数据传输和存储的可靠性,成为现代数字通信系统设计工作者所面临的重要课题。1948年,香农提出了关于在有扰信道中传输消息的重要理论——香农第二定理。该定理指出,当信息传输率低于信道容量时,通过某种编译码方法,就能是错误概率为任意小。自此以后,很多科学工作者和工程技术人员在香农所指的方向上进行了极其有意义的探索。经过半个多世纪的努力,目前已有了许多有效的编译码方法,并形成了一门新的技术——纠错编码技术。1.1差错控制系统模型1.1.1差错的类型及其特点信道可以分为无记忆信道和有记忆信道。在有记忆信道中,噪声对传输码元的影响是互相独立的,即每一个差错的出现与其前后是否有错误无关。图1-1所示的模型就是这种信道的一个例子。这里,1错成0或0错成1的概率相等,均为。该模型描述的信道称为二进制对称信道,即BSC。于是就是码元错误概率,或称误码率;而码元正确接收的概率,即正码率为1-。在无记忆信道中错误是随机的,因此被称做随机错误,无记忆信道也被称为随机信道。01-011-1图1-1二进制对称信道在有记忆信道中,各种干扰所造成的错误往往不是单个地,而是成群、成串地出现,也就是一个错误的出现,往往会引起其前后码元的错误,表现出错误之间相关性。图1-2就是这种信道的一个模型。好状态坏状态好状态坏状态000011111-P11-P2S1EE3\MERGEFORM22图1-2有记忆信道模型图1-2中信道有两种状态,好状态和坏状态,它们各自被描述为二进制对称信道,信道工作在好状态时的错误概率远远小于信道工作在坏状态时的错误概率。由,信道经常地工作在状态,但偶尔会工作在状态,因此它会产生突发错误。在一个突发错误持续期内,开头和末尾的码元总是错误的,中间的码元不一定都是错,但错误的码元相对较多。1.1.2差错控制系统模型及分类(1)信息传输系统模型如图1-3所示,该模型突出了以控制差错为目的的纠错码编码器和译码器,因此也称为差错控制系统模型。这个模型包括如下5个部分:{E}{E}{R}{m}信源噪声源编码信道检、纠错码译码器信宿检、纠错码编码器{u}{C}图1-3简化的信息传输系统模型(2)为了提高接收端收到消息的可靠性,应采用纠错编码技术。如图1-4所示,差错控制系统大致可分为以下几类:EQ\o\ac(○,1)重传反馈方式(ARQ):这种方式是发信端采用某种能发现一定程度传输差错的简单编码方法对所传信息进行编码,加入少量监督码元,在接收端则根据编码规则收到的编码信号进行检查,一旦检测出(发现)有错码时,即向发信端发出询问的信号,要求重发。发信端收到询问信号时,立即重发已发生传输差错的那部分发信息,直到正确收到为止。所谓发现差错是指在若干接收码元中知道有一个或一些是错的,但不一定知道错误的准确位置。EQ\o\ac(○,2)前向纠错方式(FEC):这种方式是发信端采用某种在解码时能纠正一定程度传输差错的较复杂的编码方法,使接收端在收到信码中不仅能发现错码,还能够纠正错码。采用前向纠错方式时,不需要反馈信道,也无需反复重发而延误传输时间,对实时传输有利,但是纠错设备比较复杂。EQ\o\ac(○,3)混合纠错方式(HEC):这种方式少量纠错在接收端自动纠正,差错较严重,超出自行纠正能力时,就向发信端发出询问信号,要求重发。因此,“混合纠错”是“前向纠错”及“反馈纠错”两种方式的混合。这种方式在一定程度上避免了FEC方式要求用复杂的译码设备和ARQ方式信息连贯性差的缺点,并能达到较低的误码率,因此在实际中的应用越来越广。1.2差错控制基本原理为了能判断传送的信息是否有误,可以在传送时增加必要的附加判断数据;如果又能纠正错误,则需要增加更多的附加判断数据。这些附加数据在不发生误码的情况之下是完全多余的,但如果发生误码,即可利用被传信息数据与附加数据之间的特定关系来实现检出错误和纠正错误,这就是差错控制编码的基本原理。具体地说就是为了使信源代码具有检错和纠错能力,应当按一定的规则在信源编码的基础上增加一些冗余码元(又称监督码),使这些冗余码元与被传送信息码元之间建立一定的关系,发信端完成这个任务的过程就称为误码控制编码;在收信端根据信息码元与监督码元的特定关系,实现检错或纠错,输出原信息码元,完成这个任务的过程就称误码控制译码(或解码)。另外,无论检错和纠错都有一定的误别范围,若超过了该范围,则无法实现检错与纠错,因为这个时间也同样满足附加数据的约束条件,这就应当增加更多的附加数据(即冗余)。我们已知,信源编码的中心任务是消去冗余,实现码率压缩,可是为了检错与纠错,又不得不增加冗余,这又必然导致码率增加,传输效率降低;显然这是个矛盾。1.3纠错编码(1)奇偶校验码奇偶校验码也称奇偶监督码,它是一种最简单的线性分组检错编码方式。其方法是首先把信源编码后的信息数据流分成等长码组,在每一信息码组之后加入一位(1比特)监督码元作为奇偶检验位,使得总码长n(包括信息位k和监督位1)中的码重为偶数(称为偶校验码)或为奇数(称为奇校验码)。如果在传输过程中任何一个码组发生一位(或奇数位)错误,则收到的由于每两个1的模2相加为0,故利用模2加法可以判断一个码组中码重是奇数或是偶数。模2加法等同于“异或”运算。现以偶监督为例。对于偶校验,应满足。故监督位码元可由下式求出:。不难理解,这种奇偶校验编码只能检出单个或奇数个误码,而无法检知偶数个误码,对于连续多位的突发性误码也不能检知,故检错能力有限,另外,该编码后码组的最小码距为=2,故没有纠错码能力。奇偶监督码常用于反馈纠错法。(2)线性分组码线性分组码是分组码中最重要的一类码,它是讨论各类码的基础。虽然这种码的概念比较简单,但却非常重要,特别是有关码的生成矩阵G和校验矩阵H的表示,以及它们的关系,而H与纠错能力之间的关系则更为重要,线性分组码的基本概念如下。EQ\o\ac(○,1)线性分组码一般用[n,k]或[n,k,d]表示。其中n为码长,k为信息码元的数目,n-k为监督码元的数目,d表示码元距离。发送的码字:接收的矢量:信道错误图样:如:;则错误图样,从而可以看出从左端起第2位和第5位是错误的。EQ\o\ac(○,2)线性分组码具有如下性质(n,k)的性质:I.封闭性。任意两个码组的和还是许用的码组。II.码的最小距离等于非零码的最小码重。一个[n,k]线性分组码,是把信息划成k个码元为一段(称为信息组),通过编码器变成长为n个码元的一组,作为[n,k]线性分组码的一个码字。若每位码元的取值有q种,则共有个码字。n长的数组共有组,在二进制情况下,有个数组。显然,个n维数组组成一个上的n维线性空间。如果个码字集合构成了一个k维线性子空间,则称它是一个[n,k]线性分组码。对于码组长度为n、信息码元为k位、监督码元为r=n-k位的分组码,如果满足2r-1≥n,则有可能构造出纠正一位或一位以上错误的线性码。2汉明码汉明码是一个在原有数据中插入若干校验码来进行错误检查和纠正的编码技术,在原编码的基础上附加一部分代码,使其满足纠错码的条件。由Bell实验室的R.W.Hamming发明,因此定名为汉明码。汉明码编码原理汉明码编码的过程包括两个步骤:(1)把信息序列分成消息组,每组由k位相继的信息数字组成;(2)编码器根据某些规则,把消息组变换成一个n位(n>k)二进制数字的较长组(一个二进制n重),我们称它为码字。因为每个消息组成k位二进制数字,故共有个可能的码字。一般来说,若汉明码长为n,信息位数为k,则监督位数r=n-k。若希望用r个监督位构造出r个监督关系式来指示一位错码的n种可能位置,则要求或(2-1)下面以(7,4)汉明码为例说明原理:设汉明码(n,k)中k=4,为了纠正一位错码,由式(2-1)可知,要求监督位数r≥3。若取r=3,则n=k+r=7。我们用来表示这7个码元,用的值表示3个监督关系式中的校正子,则的值与错误码元位置的对应关系可以规定如表2-1所列。表2-1校正子和错码位置的关系错码位置错码位置001101010110100111011000无错码则由表2-1可得监督关系式:(2-2)(2-3)(2-4)在发送端编码时,信息位的值决定于输入信号,因此它们是随机的。监督位、、应根据信息位的取值按监督关系来确定,即监督位应使式(2-2)至式(2-4)中、、的值为0(表示编成的码组中应无错码)(2-5)式(2-5)经过移项运算,得出监督位(2-6)式(2-6)其等价形式为:(2-7)式(2-7)还可以简记为或(2-8)其中所以有(2-9)式(2-7)等价于(2-10)其中Q为P的转置,即(2-11)式(2-11)表示,在信息位给定后,用信息位的行矩阵乘矩阵Q就产生出监督位。我们将Q的左边加上一个k×k阶单位方阵,就构成一个矩阵G(2-12)G称为生成矩阵,因为由它可以产生整个码组,即有(2-13)或者(2-14)式(2-13)即汉明码的编码原理。2.2汉明码解码原理当数字信号编码成汉明码形式(本文中即A)后在信道中传输,由于信道中噪声的干扰,可能由于干扰引入差错,使得接收端收到错码,因此在接收端进行汉明码纠错,以提高通信系统的抗干扰能力及可靠性。一般来说接收码组与A不一定相同。若设接收码组为n列的行矩阵B,即(2-15)则发送码组和接收码组之差为(2-16)E就是传输中产生的错码行矩阵(2-17)若ei=0,表示接收码元无错误,若ei=1,则表示该接收码元有错。式(2-16)可改写成(2-18)若E=0,即接收码组无错,则,将它代人式(2-8),该是仍成立,即有(2-19)当接收码组有错时,E≠0,将B带入式(2-8)后,该式不一定成立。在未超过检错能力时,式(2-19)不成立。假设此时式(19)的右端为S,即(2-20)将代入式(2-20),可得(2-21)由式(2-8)可知,所以(2-22)此处S与前面的有着一一对应关系,则S能代表错码位置。因此,纠错原理即,接收端收到码组后按式(2-20)计算出S,再根据表2-1判断错码情况,进行差错纠正。汉明码编码解码流程图图2-1汉明码编码解码流程图为了让大家学习汉明码编码译码的过程不只是停留在文字之中,下面通过matlab程序来演示编码与译码的原理。汉明码编码或译码的功能选择程序:functionstart%(7,4)汉明码编码译码函数,分别调用汉明码编码子函数和汉明码译码子函数num=1;while(num==1)%进行编码或者译码的功能选择choose=input('如果你想测试汉明码编码,请按1.如果你想测试汉明码解码,请按2.\n');if(choose==1)%选择编码功能,输入编码向量A=input('请输入一个向量,码长为4:\n');A=mod(A,2);if(length(A)~=4)%当输入错误长度时,报错,然后选择继续或者结束此过程disp('你输入的向量是错误的!');num=input('如果你想继续,请按1,如果你想结束,请按1之外的任意键.\n');else%当输入正确向量时,调用编码函数,输出编码结果,然后选择继续或者结束此过程V=encoder(A);%汉明码编码子程序num=input('如果你想继续,请按1,如果你想结束,请按1之外的任意键.\n');endelseif(choose==2)%选择译码功能,输入接收的7位向量R=input('请输入一个收到的向量,长度是7:\n');R=mod(R,2);if(length(R)~=7)%当输入错误长度时,报错,然后选择继续或者结束此过程disp('你输入的向量不对!');num=input('如果你想继续,请按1,如果你想结束,请按1之外的任意键.\n');else%当输入正确向量时,调用译码函数,输出译码结果,然后选择继续或者结束此过程D=decoding(R);%汉明码译码子程序num=input('如果你想继续,请按1,如果你想结束,请按1之外的任意键.\n');endelse%当输入无效数字时,报错,然后选择继续或者结束此过程disp('你输入的向量是不对!');num=input('如果你想继续,请按1,如果你想结束,请按1之外的任意键.\n');endendend编码程序:%编码函数模块,对4位码元输入,产生7位线性汉明码。functionV=encoder(A)H=[0,0,0,1,1,1,1;0,1,1,0,0,1,1;1,0,1,0,1,0,1];H(3,:)=H(1,:)+H(3,:);H(1,:)=H(1,:)+H(2,:);H(3,:)=H(3,:)+H(2,:);H(2,:)=H(2,:)+H(3,:);%通过行变换,产生标准监督矩阵p=H(:,1:1:4);%提取H的前4列q=p';%做转置i=[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1];G=mod([i,q],2);%生成标准生成矩阵GV=mod(A*G,2);%生成编码结果fprintf('编码的结果是%d%d%d%d%d%d%d\n',V);stairs(0:1:7,[V,0],'c');axis([0,8,-0.5,1.5]);xlabel('outputtime:');%X轴标题ylabel('outputvalue:');%Y轴标题title('encoderresultfigure:');%标题汉明码的编码过程:按程序的提示当输入1的时候选择编码功能,如图2-2所示:图2-2选择编码或者译码功能当选择了编码功能后,按照提示输入一个4位的信息码,如[0101]信息码程序对信息进行编码,如图2-3所示:图2-3输入代码后显示编码编码后弹出一个汉明码的编码脉冲图,编码后为[0101010],如图2-4所示图2-4汉明码编码图汉明码解码程序:%译码函数模块,R是接收码字,D是译码输出结果functionD=decoding(R)H=[0,0,0,1,1,1,1;0,1,1,0,0,1,1;1,0,1,0,1,0,1];%给出非标准的监督矩阵HH(3,:)=H(1,:)+H(3,:);H(1,:)=H(1,:)+H(2,:);H(3,:)=H(3,:)+H(2,:);H(2,:)=H(2,:)+H(3,:);%通过行变换生成标准监督矩阵H=mod(H,2);S=mod(R*H',2);%生成校验子Sif(S==0)%如果校验子S为零,则表明没有错误或两个或两个以上错误D=R;%输出译码结果disp('结果是正确的或者超过了两个错误!');fprintf('结果是%d%d%d%d%d%d%d\n',D);stairs(0:1:7,[D,0],'g');,1.5]);xlabel('outputtime:');ylabel('outputvalue:');title('decodingresultfigure:');%绘制图形else%校验子S不等于零,表示出现错误index=1;whileindex<=length(H)%从H的第一列开始和S进行比较,当二者相等时,跳出循环,记录列数if(H(:,index)'==S)breakelseindex=index+1;endendD=R;D(index)=D(index)+1;%对错误的符号位进行纠正D=mod(D,2);fprintf('如果只有一个错,错的数字为%d\n',index);fprintf('正确的结果是%d%d%d%d%d%d%d\n',D);disp('如果有两位错误,不能给出正确的结果');stairs(0:1:7,[D,0],'g');axis([0,8,-0.5,1.5]);xlabel('outputtime:');ylabel('outputvalue:');title('decodingresultfigure:');%绘制图形end汉明码译码过程:当选择了汉明码的译码功能后,考虑到信道存在噪声的因素,可能存在三种情况,第一种情况是当没噪声的情况下汉明码,经过汉明解码恢复了源信息码,第二种情况,当信道存在噪声,噪声使汉明码产生了误码,当误码只有一个时,汉明码能够纠正一位误码,也能恢复出源码,第三种情况,当信道存在噪声,而噪声使信息码产生了误码,并且噪声使信息码发生了两个误码或者两个以上的误码时,通过汉明解码就不能纠正了,导致解码后的码出现错误。当选择了汉明码译码功能后提示输入7位的汉明码如图2-5所示:图2-5选择汉明码译码功能情况1:在没有噪声的情况下,输入的码与经过汉明码编码后是一样的,那么输出的结果如图2-6所示:图2-6汉明码在没有噪声的情况下进行解码经过汉明解码后为[0101010],如图2-7所示:图2-7汉明码解码后脉冲情况2:在有噪声的情况下,输入[0101011]信息码(含有一个错码),那么输出的结果如图2-9所示,从图中可以看出由于信息码[0101010]在加入噪声时信息码产生了误码[0101011],误码只有一个,并能指出误码位置在第7位,因为汉明码能够纠正一位误码,所以解码后的信息码能够恢复出源码。图2-8汉明码在有噪声的情况下进行解码经过汉明解码后为[0101010],如图2-9所示图2-9汉明码解码后脉冲情况3:在有噪声的情况下,当输入[0101111]信息码(含有两个错码),那么输出的结果如图2-10所示:图2-10汉明码在有噪声的情况下进行解码经过汉明解码后为[0001111],如图2-11所示:图2-11汉明码解码后脉冲从图2-11可以看出解码后的汉明码与源码不一样,这是因为当超过了两个误码,而汉明码最多只能纠错一位,检测两位误码,已经超过汉明码纠错的能力,汉明码就没办法对误码进行纠错,就会默认汉明码是只有一个错码的,并进行纠正,但实际上纠错的结果却是错误的。为了能够实现对于任意N和K汉明码的仿真,特改良了程序,使之对于任意N和K都能够实现汉明码的编码与解码,并进行性能的分析。其程序如下所示:clc;fprintf('基于matlab汉明码性能分析');fprintf('学生:韦荣铭学号:0801130502');fprintf('指导老师:严素清');%编码n=input('请输入汉明码的码长n=');k=input('请输入汉明码的信息码长k=');msg=randint1(2,k,2)%信息产生msg=msg'%对信息码进行转置变换code=encode1(msg',n,k)%汉明编码code=code'%对编码后的信息码进行转置变换code=code(:)%将编码后的信息码变为一个竖矩阵%产生噪声rand1=rand1'rand1=rand1(:)codenoise=rem(code+rand1,2)%把噪声加入汉明码中rcv=decode1(codenoise,n,k)%汉明译码subplot(411);%绘制信息码stem(1:2*k,msg(1:2*k),'b');title('随机输入的信息位msg')subplot(412);%绘制经过汉明编码的信息码stem(1:2*n,code(1:2*n),'b');title('编码信息code')subplot(413);%绘制加入噪声的汉明码stem(1:2*n,codenoise(1:2*n),'r*');holdon;stem(1:2*n,code(1:2*n),'b');title('接收加了误码的错误信息noisycode与编码信息code相比较')xlabel('红色为错误信息R,蓝色为编码信息code');%00X轴的标注holdoff;subplot(414);%绘制解码后的汉明码stem(1:2*k,rcv(1:2*k),'b');title('译码信息rcv')%[31,26][15,11][7,4][63,57]Matlab汉明码M文件程序性能的分析:当运行程序后会出现如图2-12所示界面图2-12汉明码程序运行当输入参数N=15,K=11,并按下回车键时,便会生成信息码msg=0101111000001100100111汉明码编码code=101001011110000110101100100111噪声码rand1=000000000000000000000000000101噪声与汉明码异或生成带有噪声的汉明码codenoise=101001011110000110101100100010汉明码解码rcv=0101111000000100100010生成的图形,如图2-13所示图2-13参数N=15,K=11时的汉明码从图2-13中我们可以看到信息码是[0101111000001100100111],然后对信息码进行汉明编码,经过汉明编码后的信息码是[101001011110000110101100100111],加入噪声后的信息码是[101001011110000110101100100010],经过译码后信息码是[0101111000000100100010],显而易见前15个码并没受到噪声的影响,在经过译码后恢复了源信息码,但后半部分11个信息码由于噪声的影响产生了两误码,其中两个0变成了两个1,而汉明码只能纠正一个误码,所以没能恢复源信息码。当输入N=31,K=26,并按下回车键时,便会生成汉明码信息码msg=01101000010101010010010111010110000100011011101001汉明码编码code=11000011010000101010100010010110111110101100001000110011101001噪声码rand1=00000000001001000000000010010000000100000000000000000000000000噪声与汉明码异或生成带有噪声的汉明码codenoise=11000011011001101010100000000110111010101100001000110011101001汉明码解码rcv=0110110011010101100000001110101100001000110011101001生成的图形,如图2-14图2-14参数N=31,K=26时的汉明码从图2-14中我们可以看到信息码是[01101000010101010010010111010110000100011011101001],然后对信息码进行汉明编码,经过汉明编码后的信息码是[11000011010000101010100010010110111110101100001000110011101001],加入噪声后的信息码是[11000011011001101010100000000110111010101100001000110011101001],经过汉明译码后信息码是[0110110011010101100000001110101100001000110011101001],显而易见前半部分的31个码由于受到了噪声的影响,产生了4个误码,其中两个0变成1,两个1变成了0,由于汉明码只能纠正一位误码,在经过解码后并没能恢复源信息码,后半部分的31个码由于噪声的影响产生了一位误码,其中的一个1变成了0,而汉明码能纠正一位误码,所以在经过了译码后,能够恢复源信息码。3汉明码Matlab/Simulink仿真3.1Simulink简介MATLAB通信系统功能函数库由七十多个函数组成,每个函数有多种选择参数、函数功能覆盖了现代通信系统的各个方面。这些函数包括:信号源产生函数、信源编码/解码函数、纠错控制编码/解码函数、调制/解调函数(基带和通带)、滤波器函数、传输信道模型函数(基带和通带)、TDMA、FDMA、CDMA函数、同步函数、工具函数等。以纠错控制编解码函数为例:函数库提供了线性分组码、汉明码、循环码、BCH码、里德一索洛蒙码(REED—SOLOMON)、卷积码等6种纠错控制编码,每种编码又有编码、解码、矢量输入输出、序列输入输出等四种形式的函数表达。3.2汉明码仿真的思路随机产生一组帧结构的数据,对此组数据进行汉明编码,编码后再加入一些噪声,使编码产生错误,然后再对这组有错的数据进行汉明译码,最后比较原数据与译码,统计与分析最终的比较结果,观察汉明译码的纠错与检错的效果。参数设置:信号源为伯努利随机二进制产生器,采样时间自定,传输环境是差错率为5%的二进制平衡信道。仿真系统:由伯努利二进制随机数产生器汉、汉明码编码器、二进制对称信道、汉明码译码器、误码率计算、输出到工作区模块组成。汉明明码仿真系统图,如图3-1所示:图3-1汉明码仿真系统图3.3汉明码的仿真模块分析3.3.1BernoulliBinaryGenerator(伯努利二进制随机数产生器)模块描述:产生服从伯努利分布的随机二进制序列,模块的输出可以是帧结构的矩阵,也可以是数据流形式的行或列向量或一维数组。模块参数:图3-2伯努利二进制随机数产生器Probabilityofazero:模块产生的二进制序列中出再0的概率。Initialseed:随机数种子,不同的随机数种子通常产生不同的序列。Sampletime:抽样时间,表示输出序列中每个二进制符号的持续时间。此处参数表示在0.02秒内产生4个比特。Frame-basedoutputs:选种表示输出为帧格式,否则输出数据流。Samplesperframe:只有当Frame-basedoutputs选种后才可编辑此参数,它表示输出一帧中包含的抽样点数。此处表示1帧由4个比特组成。3.3.2HammingEncode(汉明码编码器)模块描述:用于对输入信息进行汉明编码,汉明码是一种能够纠正一位错误的红性分组码,码长为N。该信息位的长度为K,其中,N=2^M-1(M>=3),K=N-M。模块参数:图3-3汉明码编码器3.3.3BinarySymmetricChannel(二进制对称信道)模块描述:用于对二进抽制信号的误比特率性能进行仿真,添加二进制噪声到输入信号,可以是标量、数据流向量或帧结构的行向量。模块参数:图3-4二进制对称信道Errorprobability:添加噪声比特的概率。HammingDecode(汉明码译码器)模块描述:创建一个码长为N,信息码长为K的汉明码。其中,N=2^M-1(M>=3),K=N-M。模块参数:此处的两个参数要与前面的HammingEncode参数一致。图3-5汉明码译码器ErrorRateCalculation(误码率计算)模块描述:通过比较传输数据和接收数据来计算误码率,模块的输出数据是长度为3的向量,其中每个元素的意义分别是:误码率或误比物率、总的错误个数、总的参加比较的符号或比特数。模块参数:图3-6误码率计算Receivedelay:指定接收方滞后发送的抽样点数,即接收的第几个值对应发送的第一个值。Computationdelay:指定开始比较时模块忽略的抽样点数。Computationmode:指定模块是比较全部还是输入数据。Outputdata:指定计算结果是输出到工作区还是端口。汉明码仿真的结果与分析(1)BSC模块的Errorprobability参数设置为0.05。Simout1:图3-8BBG产生的随机二进制码BernoulliBinaryGenerator一秒钟产生了2004个比特,每4个比特组成一帧,比特流0的概率为0.5。Simout2:图3-9HE对BBG进行汉明编码HammingEncoder对BernoulliBinaryGenerator产生的比特流进行汉明编码,采用(7,4)编码,即每4位信息码加上3位校验码组成7位码,如上图所示,2004位比特经编码后产生3507位比特。Simout3:图3-10HD进行汉明译码HammingDecoder对经过传输误码率为0.05的BSC信道的比帧进行汉明译码。Simout4:图3-11原码与译码对比结果ErrorRateCalculation对原码和译码进行比较,每4个比特(即一帧)统计一次,每次统计的时候把前面传输的比特一起统计,如图3-11所示,比较的比特共有2004位,传输错误的比特有38位,传输借误率为0.018962。Display:图3-12DisplayDisplay更加直观地显示了比较的结果,从上到下依次是实际传输误码率,误比特数,比较的比特总数。把表3-1所示:表3-1BSC模块的Errorprobability参数信道误码率比较结果信道误码率比较结果信道误码率0.1比较结果结合(1)信道误码率为0.05的结果,可得出下图图3-13实际误码率与信道误码率之比汉明码Matlab/Simulink仿真性能,由图3-13可知,汉明码能有效解决信道传输中由信道噪声等引起的传输差错问题,当信道误码率低于0.01的时候,汉明码甚至可以达到无差错传输,但当信道误码率越来越大的时候,汉明码的检纠错能力下降,当信道误码率在0.02的时候,汉明码能检纠错达75%,当信道误码率在0.1的时候,汉明码只能检纠不到50%的错误,且这个数值会随着信道误码率的增加而降低。4基于matlab/GUI汉明码实现4.1Matlab/GUI汉明码软件简介此Matlab/GUI汉明码软件由主界面与子界面组成,主界面图4-2所示,子界面由图4-3和4-4所示,此软件能实现有两种功能,分别是汉明码的图形分析和汉明码的误码率计算功能。Matlab/GUI汉明码软件流程图,如图4-1所示:开始开始汉明码的图形分析汉明码的误码率计算选择N和K的值在汉明码加入噪声运行程序绘制图形选择N和K的值运行程序绘制图形退出界面退出界面退出界面图4-1明码软件流程图基于matlab/GUI的汉明码软件主界面,主界面包括了汉明码的图形分析/汉明码误码率计算/退出界面的按键,如图4-2所示:图4-2Matlab/GUI汉明码软件主界面基于matlab/GUI的汉明码软件汉明码图形分析界面,其包括N和K值的输入框,汉明码噪声序列的输入框,运行汉明码图形的按钮,退出按钮,还有汉明码图形分析坐标框,如图4-3所示:图4-3Matlab/GUI汉明码图形分析界面基于matlab/GUI的汉明码软件汉明码图形分析界面,其包括N和K值的输入框,网格线的绘制按钮,误码率计算按钮,误码率计算坐标框,退出按钮,如图4-4所示:图4-4Matlab/GUI汉明码误码率界面4.2基于matlab/GUI汉明码性能分析4.2.1当N=7,K=4时汉明码性能分析(1)当N=7,K=4噪声为0时的汉明码图,如图4-5所示图4-5参数N=7,K=4噪声为0时的汉明码编译过程从图4-5中可以明显的看出来左上角的图信息码和右下角的解码图是一样的,信息码为[01111101],解码后的码为[01111101],这说明在没加噪声的时候是传输过程中信息码经过编码和解码后恢复了源码,就是说信道在无噪声的情况下,是可以无差错传输的。(2)当N=7,K=4在加入一位噪声时候的汉明码图,如图4-6所示图4-6参数N=7,K=4在加入一位噪声时,汉明码编译过程从图4-6中可以明显的看出来左上角的图信息码和右下角的解码图是一样的可以看出信息码为[11001010],解码后的码为[11001010],这说明在加入噪声的时候并且当噪声使一个码错误,是可以纠正的,说明汉明码能够纠正一位错误。(3)当N=7,K=4在加入两位噪声时候的汉明码图,如图4-7所示图4-7参数N=7,K=4在加入两位噪声时候的汉明码编译码过程从图4-7中可以明显的看出来左上角的图信息码和右下角的解码图是不一样的可以看出信息码为[00110101],解码后的码为[01110101],从此图可以看出当加入的噪声使编码后的汉明码产生两位错误的时候,汉明码的解码就产生了错误,这是由于大于汉明码能够纠错的最大范围所以并不能纠正误码,导致解码出错。4.2.2汉明码误码率性能分析(1)当N=7,K=4时,matlab/GUI汉明码误码率,如图4-8所示图4-8汉明码的误码率从图4-8中可以看出,在N=7,K=4的情况下抽样的检测了三组数据来统计汉明码的误码率。数据1:Errorr数据2:数据3:(2)当N=15,K=11matlab/GUI汉明码误码率,如图4-9所示图4-9参数N=15K=11时汉明码的误码率从图4-9中可以看出,在N=15,K=11的情况下抽样的检测三组数据来统计汉明码的误码率。数据1:数据2:数据3:E汉明码的误码率总结:当N=7,K=4时,汉明码的误码率在解码前和解码后相比较,解码后的误码率要低很多,说明经过了汉明码解码的确可以降低传输过程中的误码,当N=15,K=11时,也是如此。两者不同的地方:前者的没经过汉明码解码的误码率比后者的要低一些,这说明了当信息码越多误码就相对增多,在没经过汉明码处理的情况下误码率就相对的增加了。两者的共同点是:从以上六组数据可以看出经过汉明码编码、解码后的误码率明显的下降了很多,说明汉明码能降低信息在信道传输过程中的误码率!
5结论通过研究汉明码编码译码的原理、汉明码Matlab/Simulink仿真、汉明码Matlab/GUI,了解了汉明码的用途、分类及其纠错能力,汉明码能够纠正一位错码并检测两位误码,加深理解汉明码的编码、纠错译码的相关算法,通过学习(7,4)汉明码,近一步的进行改良程序,使之能实现任意N,K值的汉明码,对其纠错能力进行理论分析。在通过MATLAB/SIMULINK通信系统仿真模型库进行汉明码建模仿真,对汉明码的性能进行分析,汉明码能有效解决信道传输中由信道噪声等引起的传输差错问题,当信道误码率低于0.01的时候,汉明码甚至可以达到无差错传输,但当信道误码率越来越大的时候,汉明码的检纠错能力下降,当信道误码率在0.02的时候,汉明码能检纠错达75%,当信道误码率在0.1的时候,汉明码只能检纠不到50%的错误,且这个数值会随着信道误码率的增加而降低。为了能通俗易懂的展现汉明码纠错能力与误码率的分析,通过MATLAB/GUI进行图形界面的仿真,利用GUI图形用户接口,用户不需要输入脚本或命令,不需要了解任务的内部运行方式,只需点击鼠标就能实现汉明码编码、解码、纠错、误码率计算等一系列的复杂的过程,通过显示的图形清楚认识了汉明码在通信领域的作用,也为了进一步学习更为复杂的纠错码打下基础。通过此次的实训,我学到了很多知识,跨越了传统方式下的教与学的体制束缚,在论文的写作过程中,通过查资料和搜集有关的文献,培养了自学能力和动手能力。并且由原先的被动的接受知识转换为主动的寻求知识,这可以说是学习方法上的一个很大的突破。在以往的传统的学习模式下,我们可能会记住很多的书本知识,但是通过毕业设计,学会了如何将学到的知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的问题。我明白了做学问要一丝不苟,对于出现的任何问题和偏差都不要轻视,要通过正确的途径去解决,在做事情的过程中要有耐心和毅力,不要一遇到困难就打退堂鼓,只要坚持下去就可以找到思路去解决问题的。在工作中要学会与人合作的态度,认真听取别人的意见,这样做起事情来就可以事倍功半。在做毕业设计过程中,理论知识很重要,理论知识决定了设计的方法,设计软件的成败。所以需要查找很多资料,需要足够的耐心、细心去研究问题,解决问题。同时还必须有实事求是地分析问题的态度,知道理论与实际是有一些差别的。认清问题是前提,分析问题才是关键,只有认真地去分析问题才能更好的解决问题,分析问题时必须具备细心,耐心,恒心和毅力,同时还必须做到科学地具体地实事求是地分析问题。调试的过程中要有平和的心态,遇见问题是非常正常的,要做的就是多做比较和分析,逐步的排除可能的原因,要坚信“凡事都是有办法解决的”和“问题出现一定有它的原因”,这样最后一定能调试成功,做到分析的数据有理有据。谢辞在象牙塔里,走到最后的一站,路漫漫其修远兮。毕业设计作为大学最后一个课题,并不是完成了就到了终点,这只是人生中一个阶段,只有认真的完成了,才能为下一个阶段打下坚实的基础。几个月的复习和学习的过程,不仅把以前落下的知识重新学习了一遍,还从中悟出了新的知识。在毕业设计即将完成之际,回顾一路走来的学习和开发的过程,既紧张又充实。我在此,向所有关心以及给与我帮助的老师和同学,致以最诚挚的感谢!此次毕业设计历时一个学期,看似漫长,但是在学习的过程中却是充实而又短暂的,有收获的日子总是过得特别快。从一个了解的过程,走到一个熟知的过程;从纷繁复杂的资料中,挑选出最有用的精髓;从四万字的外文翻译的艰涩中走出来;从资料中,仔细求证,分析方案。不知在多少老师和同学的帮助和指点下,艰难的挑选了最合适的方案。不知不觉,基于MATLAB的汉明码分析这个课题,才有了进展,才有了收获,才有了将近完成的今天。在此,我要感谢陪伴我走过这过程的老师,特别是严素清老师悉心的教导,耐心的解答,一次次的使我从迷惑中走出来!本次毕业设计之所以能够比较顺利的完成,首先,非常感谢学院领导紧凑而明智的预期安排,能够让我更好的分配做毕业设计的时间,做到有条不紊,让大四学生的奋斗更有针对性和目的性,成效是巨大的。我尊敬的导师,非常有责任感,定时定期要求我汇报进度,检查工作,在此我非常感谢她!她态度端正,积极对待学生的请教和需求,有问必答,有求必应,对学生不明白的地方,不烦不燥地耐心讲解。她严谨,细致,耐心,全面,敬业的教师风尚深深的给予我触动,她深厚的理论水平和实践水平使我受益匪浅。本专业的其他同学,认真热情,勤于交流的求知欲望,一种团结协作,互帮互助的学习氛围深深打动了我,在今后在工作中,必将给我带来潜移默化的影响。在此我也一同感谢他们!学海无涯,希望我的毕业设计能为我的大学生活画上一个圆满的句号。再次深深感谢在大学期间给与我帮助的老师和同学们!谢谢!
参考文献[1]樊昌信.通信原理[M].北京:国防工业出版社,2001年[2]王新梅.纠错码原理与方法[M].西安:西安电子科技大学出版社,2002年[3]归绍升.纠错编码技术和应用[M].上海:上海交通大学出版社,1988年[4[M].北京:人民邮电出版社,1983年[5]徐明远,邵玉斌编著MATLAB仿真在通信与电子工程中的应用.西安:西安电子科技大学出版社,2005年[6]罗军辉.MATLAB7.0在数字信号处理中的应用.北京:机械工业出版社,2005年[7]薛年喜.MATLAB在数字信号处理中的应用.北京:清华大学出版社,2003年[8]丁玉美,高西全.数字信号处理.西安:西安电子科技大学出版社,2001年[9]程佩青.数字信号处理.北京:清华大学出版社,2005年[10]邓华.Matlab通信仿真及应用实例详解.北京:人民邮电出版社,2003年[11]王秉钧.现代通信系统原理.天津:天津大学出版社,1991年[15]罗建军.MATLAB教程.北京:电子工业出版社,2006年[16]孔英会,高强等.通信系统原理.北京:机械工业出版社,2011年[17]WuFang,MiaoGuosheng.DigitalImageWatermarkAlgorithmBasedonQuadtreeandError-correctingcode[J].JournalofWuhanUniversity(Editionof[18]ChenYanmei,ZhangShengyuan.DigitalImageScramblingMethodBasedonAES[J].JournalofChinaImageandGraphics[J],11(8):1076-1011,2006[19]BrassilJT,lowSH.CopyrightprotectionfortheElectronicDistributionofTextDocuments[J].proefortheIEEE,1998.[20]HuangD,YanH.InterwordDistancechangesRepresentedbysinewavesforwatermarkingtextImages[J].IEEETrans.Circuitssyst,videotechnol,2001.[21]TzengCH.AmewApproachtoAuthenticationofBinaryImagesformultimediaCommunicationwithDistortionreductionandSecurityEnhancement[J].IEEECommunicationletters,2003.[22]C.EShannon.Themathematicaltheoryofcommunication.TheBellSystemTechnicalJournal,Vol.27,pp.379-423,623-656,July,October,1948.
附录(1)汉明码GUI主界面M文件:functionvarargout=untitled(varargin)%UNTITLED,byitself,createsanewUNTITLEDorraisestheexisting%singleton*.%%H=UNTITLEDreturnsthehandletoanewUNTITLEDorthehandleto%theexistingsingleton*.%%UNTITLED('CALLBACK',hObject,eventData,handles,...)callsthelocal%functionnamedCALLBACKinUNTITLED.Mwiththegiveninputarguments.%%UNTITLED('Property','Value',...)createsanewUNTITLEDorraisesthe%existingsingleton*.Startingfromtheleft,propertyvaluepairsare%appliedtotheGUIbeforeuntitled_OpeningFunctiongetscalled.An%unrecognizedpropertynameorinvalidvaluemakespropertyapplication%stop.Allinputsarepassedtountitled_OpeningFcnviavarargin.%%*SeeGUIOptionsonGUIDE'sToolsmenu.Choose"GUIallowsonlyone%instancetorun(singleton)".%%Seealso:GUIDE,GUIDATA,GUIHANDLES%Copyright2002-2003TheMathWorks,Inc.%Edittheabovetexttomodifytheresponsetohelpuntitled%LastModifiedbyGUIDEv2.503-May-201220:56:56%Begininitializationcode-DONOTEDITgui_Singleton=1;gui_State=struct('gui_Name',mfilename,...'gui_Singleton',gui_Singleton,...'gui_OpeningFcn',@untitled_OpeningFcn,...'gui_OutputFcn',@untitled_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{:});elsegui_mainfcn(gui_State,varargin{:});end%Endinitializationcode-DONOTEDIT%Executesjustbeforeuntitledismadevisible.functionuntitled_OpeningFcn(hObject,eventdata,handles,varargin)%Thisfunctionhasnooutputargs,seeOutputFcn.%hObjecthandl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生守则和行为规范
- 学生会宣传部管理组竞选发言稿
- 小型农田水利设施管护实施方案
- 物业小区公共设施管理制度
- 无菌操作规范
- 市场监管行政强制实施管理细则
- 人教版品德与生活二年级下册《我和动物交朋友1》教学设计
- 轨道交通移动闭塞系统技术手册
- 非物质文化遗产活态传承与创新手册
- 城乡一体化绿化管理手册
- 兽药GSP知识培训课件
- 云南科技平台管理办法
- 海尔热水器ES60H-T1(E)说明书
- 口腔门诊药品管理制度
- 《中化集团聊城鲁西双氧水新材料科技5·1重大爆炸着火事故报告》警示教育学习
- 医学教程 床旁超声与容量反应性评估
- JJF 2167-2024电阻真空变送器校准规范
- 2024新能源光伏电站运行规程和检修规程
- 人教版五年级上册递等式计算100道及答案
- 输尿管肿瘤护理查房
- AQ 1119-2023 煤矿井下人员定位系统技术条件
评论
0/150
提交评论