《奇偶编码校验.docx》由会员分享,可在线阅读,更多相关《奇偶编码校验.docx(23页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、奇偶编码校验西南科技大学奇偶校验编码仿真设计报告课程名称:通信原理课程设计设计名称:奇偶校验编码仿真姓名:任XX学号:20205523班级:通信1002班指导老师:秦明伟起止日期:2021.6.272021.7.5西南科技大学信息工程学院制奇偶校验编码仿真一、摘要150-250字本文介绍了奇偶校验的编码规则及应用前景,使用matlab仿真工具对奇偶校验中的单向奇偶校验与双向奇偶校验进行编程仿真,具体的阐述了奇偶校验的原理和编码经过。分析了实验结果,以及对于奇偶校验有了更新的认识,奇偶校验是几种校验方法中实现最为简单,得到了广泛的应用。二、设计目的和意义通过本次课程设计,对于matlab仿真工具
2、愈加熟悉,同时也深化了解了奇偶校验编码的原理与方法。三、设计原理奇偶校验是一种检测代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1的个数能否为奇数,进而确定传输代码的正确性。1.单向校验概述:单向奇偶校验(RowParity)由于一次只采用单个校验位,因而又称为单个位奇偶校验(SingleBitParity)。发送器在数据祯每个字符的信号位后添一个奇偶校验位,接收器对该奇偶
3、校验位进行检查。典型的例子是面向ASCII码的数据信号祯的传输,由于ASCII码是七位码,因而用第八个位码作为奇偶校验位。单向奇偶校验又分为奇校验(OddParity)和偶校验(EvenParity),发送器通过校验位对所传输信号值的校验方法如下:奇校验保证所传输每个字符的8个位中1的总数为奇数;偶校验则保证每个字符的8个位中1的总数为偶数。显然,假如被传输字符的7个信号位中同时有奇数个(例如1、3、5、7)位出现错误,均能够被检测出来;但假如同时有偶数个(例如2、4、6)位出现错误,单向奇偶校验是检查不出来的。一般在同步传输方式中常采用奇校验,而在异步传输方式中常采用偶校验。校验方法:奇校验
4、:就是让原有数据序列中包括你要加上的一位1的个数为奇数10001100必须添0,这样原来有3个1已经是奇数了所以添上0之后1的个数还是奇数个。偶校验:就是让原有数据序列中包括你要加上的一位1的个数为偶数10001101就必须加1了这样原来有3个1要想1的个数为偶数就只能添1了。2.双向校验为了提高奇偶校验的检错能力,可采用双向奇偶校验(RowandColumnParity),可以称为双向冗余校验(VerticalandLongitudinalRedundancyChecks)。双向奇偶校验,又称“方块校验或“垂直水平校验。例:1010101101011111101000101110110100
5、10011010“表示奇偶校验所采用的奇校验或偶校验的校验码。如此,对于每个数的关注就由以前的17次增加到了77次。因而,比单项校验的校验能力更强。简单的校验数据的正确性,在计算机里都是010101二进制表示,每个字节有八位二进制,最后一位为校验码,奇校验测算前七位里1的个数合的奇偶性,偶校验测算前七位里0的个数的奇偶性。当数据里其中一位变了,得到的奇偶性就变了,接收数据方就会要求发送方重新传数据。奇偶校验只能够简单判定数据的正确性,从原理上可看出当一位出错,能够准确判定,好像时两个1变成两个0就校验不出来了,只是两位或更多位及校验码在传输经过中出错的概率比拟低,奇偶校验能够用在要求比拟低的应
6、用下。本文对两种校验进行编码校验仿真。四、具体设计步骤1.8bit信息码的产生:使用matlab指令大全中的“randint(m,n)指令生成m,n)矩阵的随机二进制数字,“0和“1出现的概率均等。其中取n=8生成8bit的信息码。2.奇偶校验码的产生:i.对产生的每行信息码求和除二取余,使用指令库中的“sum()求和,使用“rem()求余数;ii.补校验位:奇校验时,若求得余数为1,则校验位补0;若求得的余数为0,则校验位补1。偶校验时,若求得的余数为1,则校验位补1;若求得的余数为0,则校验位补0。iii.参加校验位,构成新的信息码进行传输。3.产生误码:由取非指令“对信息码中的某些位进行
7、取反,造成误码,以便校验检测。4.对信息码进行校验在接收端对信码继续每行求和除二取余,若使用奇校验,则每行余数为1时显示校验正确,否则校验错误;若使用偶校验,则每行余数为0时显示校验正确,否则校验错误。五、设计结果及分析1.设计程序A.单向校验clearall;%去除工作空间的所有变量m=input(请输入行:);%input();用于向计算机输入一个参数n=input(请输入列:);A=randint(m,n)%randint(m,n)产生的是一个m*n维的矩阵,矩阵的元素或者是0或者是1,是随机的并显示AB=A;%A暂存在B,while(1)A=B;%避免循环中A中信码改变sum=zero
8、s(1,m);%zeros(1,m)创立一个1行m列的零矩阵l=input(请选择奇偶校验(0:偶校验1:奇校验9:结束校验):);%;不回显ifl=0|l=1fori=1:mforj=1:n%求第i行各位相加对2取余,即相异或的结果sum(i)=sum(i)+A(i,j);%向量元素求和x=sum(i);%每行结果放入x中endifl=0;%偶校验ifrem(x,2)=1;%求余数指令A(i,n+1)=1;%校验位定义为1elseA(i,n+1)=0;%否则定义为0endendifl=1%奇校验ifrem(x,2)=1%求余数指令A(i,n+1)=0;elseA(i,n+1)=1;enden
9、dendelseifl=9fprintf(退出校验n);%设置显示格式break;%跳出循环elsefprintf(非法输入!n);continue;%结束本次循环endendfprintf(补校验位:)A%显示参加校验位后的矩阵%检查传输数据能否正确ifl=0%偶校验能否正确fprintf(改动结果,产生误码改动1行1列和2行3列);A(1,1)=A(1,1);A(2,3)=A(2,3);A%显示改动过的数据sum=zeros(1,m);%zeros(1,m)创立一个1行m列的零矩阵fori=1:mforj=1:(n+1)%求第i行各位相异或的结m果sum(i)=sum(i)+A(i,j);
10、x=sum(i);endifrem(x,2)=0%正确fprintf(检查正确n);else%错误fprintf(检查错误!n);endendendifl=1%奇校验能否正确fprintf(改动结果,产生误码改动1行3列和3行1列n);A(1,3)=A(1,3);A(3,1)=A(3,1);Asum=zeros(1,m);%zeros(1,m)创立一个1行m列的零矩阵fori=1:mforj=1:(n+1)%求第i行各位相异或的结果sum(i)=sum(i)+A(i,j);x=sum(i);endifrem(x,2)=1%正确fprintf(检查正确n);else%错误fprintf(检查错误
11、!n);endendendendB.双向校验clcclearallm=input(请输入行:);%input();用于向计算机输入一个参数n=input(请输入列:);A=randint(m,n)B=A;while(1)A=B;sum1=zeros(1,m);%zeros(1,m)创立一个1行m列的零矩阵存放每行和l=input(请选择奇偶校验(0:偶校验1:奇校验9:结束校验):);%;不回显ifl=0|l=1fori=1:mforj=1:nsum1(i)=sum1(i)+A(i,j);%向量元素求和x=sum1(i);%每行结果放入x中endifl=0;%偶校验ifrem(x,2)=1;%
12、求余数指令A(i,n+1)=1;%校验位定义为1elseA(i,n+1)=0;%否则定义为0endendifl=1%奇校验ifrem(x,2)=1%求余数指令A(i,n+1)=0;elseA(i,n+1)=1;endendend%列求和sum2=zeros(n,1);%定义一个n行1列的零矩阵fori=1:nforj=1:msum2(i)=sum2(i)+A(j,i);%求每列信码之和x=sum2(i);endifl=0;%偶校验ifrem(x,2)=1;%求余数指令A(m+1,i)=1;%校验位定义为1elseA(m+1,i)=0;%否则定义为0endendifl=1%奇校验ifrem(x,
13、2)=1%求余数指令A(m+1,i)=0;elseA(m+1,i)=1;endendendA%显示参加校验位之后的信码C=A;elseifl=9fprintf(退出校验n);%设置显示格式break;%跳出循环elsefprintf(非法输入!n);continue;%结束本次循环endend%奇偶校验%行校验ifl=0%偶校验能否正确fprintf(改动结果,产生误码改动1行1列和2行3列);A(1,1)=A(1,1);A(2,3)=A(2,3);A%显示改动过的数据fprintf(行校验结果:n)sum1=zeros(1,m);%zeros(1,m)创立一个1行m列的零矩阵fori=1:m
14、forj=1:(n+1)%求第i行各位相异或的结m果sum1(i)=sum1(i)+A(i,j);x=sum1(i);endifrem(x,2)=0%正确fprintf(检查正确n);else%错误fprintf(检查错误!n);endendendifl=1%奇校验能否正确fprintf(改动结果,产生误码改动1行3列和3行1列n);A(1,3)=A(1,3);A(3,1)=A(3,1);Afprintf(行校验结果:n)sum1=zeros(1,m);%zeros(1,m)创立一个1行m列的零矩阵fori=1:mforj=1:(n+1)%求第i行各位相异或的结果sum1(i)=sum1(i)
15、+A(i,j);x=sum1(i);endifrem(x,2)=1%正确fprintf(检查正确n);else%错误fprintf(检查错误!n);endendend%列校验ifl=0%偶校验能否正确fprintf(n列校验结果:n)sum2=zeros(n,1);%zeros(1,m)创立一个1行m列的零矩阵fori=1:nforj=1:(m+1)%求第i列各位相异或的结m果sum2(i)=sum2(i)+A(j,i);x=sum2(i);endifrem(x,2)=0%正确fprintf(检查正确n);else%错误fprintf(检查错误!n);endendendifl=1%奇校验能否正
16、确fprintf(n列校验结果:n)sum2=zeros(n,1);%zeros(1,m)创立一个1行m列的零矩阵fori=1:nforj=1:(m+1)%求第i列各位相异或的结m果sum2(i)=sum2(i)+A(j,i);x=sum2(i);endifrem(x,2)=1%正确fprintf(检查正确n);else%错误fprintf(检查错误!n);endendendend2.程序运行结果单向校验1)CommandWindow窗口显示结果请输入行:4请输入列:8A=01001010100011001111110101110111请选择奇偶校验(0:偶校验1:奇校验9:结束校验):4非法输入!请选择奇偶校验(0:偶校验1:奇校验9:结束校验):5非法输入!请选择奇偶校验(0:偶校验1:奇校验9:结束校验):1补校验位:A=010010100100011000111111010011101111改动结果,产生误码改动1行3列和3行1列A=011010100100011000