奇偶校验-通信原理课程设计
西南科技大学 通信原理设计报告
课程名称: 通信原理课程设计 设计名称: 奇偶校验编码仿真 姓 名: 王雷 学 号: 20105615 班 级: 通信1004 指导教师: 秦明伟 起止日期: 2013年7月5日星期五
西南科技大学信息工程学院制
方 向 设 计 任 务 书
学生班级: 通信1004 学生姓名: 王雷 学号: 20105615 设计名称: 奇偶校验编码仿真 起止日期: 2013年7月5日星期五 指导教师: 秦明伟
方 向 设 计 学 生 日 志
奇偶校验编码仿真
一、 摘要(150-250字)
奇偶校验是一种校验代码传输正确性的方法。根据被传输的一组二进制代码的数位中“1”的个数是奇数或偶数来进行校验。采用奇数的称为奇校验,反之,称为偶校验。采用何种校验是事先规定好的。通常专门设置一个奇偶校验位,用它使这组代码中“1”的个数为奇数或偶数。若用奇校验,则当接收端收到这组代码时,校验“1”的个数是否为奇数,从而确定传输代码的正确性。
二、 设计目的和意义
认识matlab软件,学习掌握matlab的基本操作方法,熟悉M文件和simulink的具体实现方法,了解数据奇偶校验的原理和在matlab中的基本仿真,通过对简单的通信实验设计,提高了动手能力和对matlab操作,巩固了课程知识。
三、 设计原理
在数据传输前附加一位奇校验位,用来表示传输的数据中"1"的个数是奇数还是偶数,为奇数时,校验位置为"0",否则置为"1",用以保持数据的奇偶性不变。例如,需要传输"11001110",数据中含5个"1",所以其奇校验位为"0",同时把"110011100"传输给接收方,接收方收到数据后再一次计算奇偶性,"110011100"中仍然含有5个"1",所以接收方计算出的奇校验位还是"0",与发送方一致,表示在此次传输过程中未发生错误。奇偶校验就是接收方用来验证发送方在传输过程中所传数据是否由于某些原因造成破坏。
奇偶校验原理是基于异或的逻辑功能。奇偶校验的编码方法是在原信号码组后面添加以为监督码元,奇偶校验分为奇校验和偶校验,奇校验是原信息码元加上监督码元后,使整个组成的数码组中,1的个数为奇数个。偶校验的工作原理则正好与奇校验相反。 对于n位二进码a1a2a3a4„„an奇校验有如下表示:
a1⊕a2⊕a3⊕a4„„⊕an⊕C=1
偶校验的表达式为:
a1⊕a2⊕a3⊕a4„„⊕an⊕C =1
其中,C为监督码元,在本设计中n为8,可以推出C的表达式为:
C =a1⊕a2⊕a3⊕a4„„⊕a8
、
在发送端让其监督码和信息码一起发送,在信息接收端,计算校验因子的表达式为:
S=a1⊕a2⊕a3⊕a4„„⊕an⊕C
四、 详细设计步骤
1.创建一个M文件,保存到自定义的文件夹中。
2.在M文件中,首先利用rand函数随机生成一组八位的只包含0和1的数组a,设置当a(n)大于0.5时,设a(n)为1,小于0.5,则为0,这样0和1等概率出现,即出现一组随机等概率的八位都为0或者1的数组。
3.同样用rand函数生成一组八位的只含有0和1的数组b,但是要设置当b(n)大于0.95时,才给其赋值为1,其他为0,这样在异或的逻辑检测中容易检测到错误序列,其中的0.95是一个自己可以设定的概率大小,本设计选择0.95.
4.利用已知的数组a相互异或生成数C,利用数组a和b对应相互异或生成数组c,然后用c和数C分别模拟接受到的八位有效位和校验位。
5.把C和c相互异或可以生成数S,当S大于0时,则表示b中有1的出现,既某些位错误传输了,当S等于0时,则表示原有效数据传输正确。(由于奇偶校验只是检查当发生奇数数位变化时,才能够通过异或的关系检测到变化,当你错误位为偶数时,不能够检测出你传输出错。)
6.在程序的开始,初始化S=1,并且设置只能当S大于0时才进入到后面的数据处理,在程序的结尾,设置了一个判断打印函数和一个断点函数pause,,这样当有错误产生的时候,可以提示错误警告,在从新点击enter键时,程序会再次传输一次,一直到S=0,即传输没有错误产生。
7.在M文件中点击运行,观察实验结果,本实验未来更加直观的感受到数据传输和接受的情况,在传输的数据赋值为send,接收数据为receive。
该M文件中,程序利用校验因子S用于判断传输途中是否有错,从而决定信号是否被重新传输;程序利用随机数列b模拟使传输信号出错率为5%的干扰信号。程序中的while循环中被加入了一个pause命令。在pause的作用下,当程序模拟一次信号传输后,不管模拟的传输信号是否需要被重传,程序都将暂停执行。在程序结束运行之后,如果前一次循环传输成功(即S=0),则用户在按下【Enter】键后程序结束运行;如果前一次循环传输有错(即S=1),则用户按下【Enter】键后,程序将再次进入while循环,如此反复直到传输成功(即S=0),程序运行结束。
实验M文件源程序: clc; clear; a=rand(1,8); S=1; while S>0 b=rand(1,8) for i=1:8 if a(i)>0.5 a(i)=1 else a(i)=0 end
if b(i)>0.95 b(i)=1 else b(i)=0 end
c(i)=a(i)+b(i) if c(i)==2 c(i)=0 end end send=a; receive=c for i=1:7
send (i+1)=send (i)*not(send (i+1))+not(send (i))*send (i+1)
receive (i+1)=receive (i)*not(receive (i+1))+not(receive (i))*receive (i+1) end C=send(8) B=receive(8) S=B*not(C)+not(B)*C if S==1
fprintf('传输错误,请重传!') end pause; end
五、 设计结果及分析
1.在M文件中点击运行后,在command window窗口观察实验结果并截图
:
传输数据为【01000110】接收数据为【01000110】校验码S值为0传输过程没有出现错误
2.当传输出现错误时如下图所示
校验码S值为1说明传输出现错误,按【Enter】键进行重新传输,如果还是有错则再次按【Enter】键重新传输直至正确,按【Enter】键结束程序。
六、 总结
奇偶校验是带有一段信息关联的冗余信息,带奇偶校验的带区集意味着每行有一个附加的奇偶校验带区。因此,必须使用至少三个(而不是两个)磁盘才能考虑该附加的奇偶校验信息。奇偶校验带区包括该带区内数据的XOR(称为排它性“或”的布尔操作)。重新生成失败的磁盘时,WindowsNTServer将使用这些带区中与完好磁盘上数据关联的奇偶校验信息重新在失败盘上创建数据。
奇偶校验能够检测出信息传输过程中的部分误码(1位误码能检出,2位及2位以上误码不能检出),同时,它不能纠错。在发现错误后,只能要求重发。但由于其实现简单,仍得到了广泛使用。
为了能检测和纠正内存软错误,首先出现的是内存“奇偶校验”。内存中最小的单位是比特,也称为“位”,位只有两种状态分别以1和0来标示,每8个连续的比特叫做一个字节(byte)。不带奇偶校验的内存每个字节只有8位,如果其某一位存储了错误的值,就会导致其存储的相
应数据发生变化,进而导致应用程序发生错误。而奇偶校验就是在每一字节(8位)之外又增加了一位作为错误检测位。在某字节中存储数据之后,在其8个位上存储的数据是固定的,因为位只能有两种状态1或0,假设存储的数据用位标志为1、1、1、0、0、1、0、1,那么把每个位相加(1+1+1+0+0+1+0+1=5),结果是奇数。对于偶校验,校验位就定义为1,反之则为0;对于奇校验,则相反。当CPU读取存储的数据时,它会再次把前8位中存储的数据相加,计算结果是否与校验位相一致。从而一定程度上能检测出内存错误,奇偶校验只能检测出错误而无法对其进行修正,同时虽然双位同时发生错误的概率相当低,但奇偶校验却无法检测出双位错误。
奇偶监督码是一种增加二进制传输系统最小距离的简单和广泛采用的方法。例如,单个的奇偶监督将使码的最小距离由一增加到二。
一个二进码字,如果它的码元有奇数个1,就称为具有奇性。例如,码字“1011010111”有七个1,因此,这个码字具有奇性。同样,偶性码字具有偶数个1。注意奇性检测等效于所有码元的模二加,并能够由所有码元的异或运算来确定。对于一个n位字,奇性下式给出:
奇性=a0⊕a1⊕a2⊕…⊕an(8-1)
很明显,用同样的方式,我们也能够根据每一个码字的零的个数来构成奇偶监督。 单个的奇偶监督码可描述为:给每一个码字加一个监督位,用它来构成奇性或偶性监督。 在一个典型系统里,在传输以前,由奇偶发生器把奇偶监督位加到每个字中。原有信息中的数字在接收机中被检测,如果没有出现正确的奇、偶性,这个信息标定为错误的,这个系统将把错误的字抛掉或者请求重发。注意,用单个的奇偶监督码仅能检出奇数个码元的错误。
Matlab是一种方便的容易上手的数学软件,其软件编写语言和其他程序语言相通,并且更加灵活,在其中创建M文件可以很好的模拟本次奇偶校验的实验现象。通过在其中的simulink中添加控件模块,能够更加直观的感受到本次实验的通信传输特性。
在本次实验中,实验的内容相对简单,概念容易理解,在M文件中,利用了matlab固有的rand函数和pause等语句,简单的在异或的关系上实现了奇偶校验的仿真,并且能够体现数据在真实传输过程中的误差性,当数据在传输出现错误的时候,会提示传输错误并且从新传输直到传输正确为止。
七、 体会
在本次实验中,通过对实现实验目的的一步步研究,让我学习到了查阅资料,操作matlab软件的一些基本方法,也让我深刻认识到了自学能力的重要性。在实验之初,我对于matlab了解很少,只是知道它是一款非常流行的数学软件,在国内外的数学研究上有举足轻重的地位,在这次实验中,我发现原来matlab还有更多的应用功能,比如在通信的实验仿真,在物理电路等实验的仿真。
本次实验让我更加深刻的理解了奇偶校验的原理,奇偶校验是一种比较简单的解决通信传输误差的分析方法,在一般要求不高的通信传输中有着重要的作用,能够避免大部分传输误差,由于其原理简单,容易实现,因此在通信传输方面得到了广泛的应用和发展,这次试验我从根本上了解了其通信传输的原理和实现方法,在简单的仿真实验中,加深了对matlab软件的认
识,也提高了自己的动手操作能力,了解了关于matlab的M文件和simulink的基本操作,也认识了matlab的一些重要的函数。
在学习之初,我在图书馆借阅了基本关于matlab的软件书籍,通过这些书籍,我了解了matlab的一些基本方法,同时,我在网络中也找到了一些关于matlab的学习资料,这样,我先熟悉的掌握了matlab的操作方法之后,再结合奇偶校验的原理,很快我就明白了仿真的原理,并且自己试着改编,调试,这样一步步实现了整个设计。
本设计的要求是只在M文件下实现八位数据和一位校验码的传输,不过,我同时增加了在simulink中的仿真,其原理都是大同小异,引用异或的方法,得到检验码,然后判断是否传输正确。在simulink中的操作,类似于在单片机中作为应用比较广泛的上位机软件labviEW,都是一些直接调控现有的原始控件,修改控件属性,进而得到需要的验证码并判断是否实验传输正确。
八、 参考文献(递增引用,引用相关内容)
1.《matlab基础与应用教程》 蔡旭辉 刘卫国 人民邮电出版社》 2.《现代通信原理》 曹志刚 钱亚生 清华大学出版社 3.网络有关matlab资料