奇偶校验-通信原理课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西南科技大学通信原理设计报告
课程名称:通信原理课程设计
设计名称:奇偶校验编码仿真
姓名:王雷
学号: 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……a n奇校验有如下表示:
a1⊕a2⊕a3⊕a4……⊕a n⊕C=1
偶校验的表达式为:
a1⊕a2⊕a3⊕a4……⊕a n⊕C =1
其中,C为监督码元,在本设计中n为8,可以推出C的表达式为:
C =a1⊕a2⊕a3⊕a4……⊕a8
在发送端让其监督码和信息码一起发送,在信息接收端,计算校验因子的表达式为:
、
S=a1⊕a2⊕a3⊕a4……⊕a n⊕C
四、详细设计步骤
1.创建一个M文件,保存到自定义的文件夹中。
2.在M文件中,首先利用rand函数随机生成一组八位的只包含0和1的数组a,设置当a
(n)
大于0.5时,设a
为1,小于0.5,则为0,这样0和1等概率出现,即出现一组随机等概(n)
率的八位都为0或者1的数组。
3.同样用rand函数生成一组八位的只含有0和1的数组b,但是要设置当b
大于0.95时,
(n)
才给其赋值为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