通信系统原理实验报告_第1页
通信系统原理实验报告_第2页
通信系统原理实验报告_第3页
通信系统原理实验报告_第4页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.四川大学电气信息学院实验报告课程:通信系统原理实验名称:通信系统原理设计性实验课任老师:张奕专业:通信工程年级:2013 级学生姓名:余佩学号:200文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.一、实验目的理解信源编码和解码的原理、步骤以及方法复习并更加熟练地掌握汇编语言的编程方法学习在 EMC开发工具下编程学习使用 EM78P259N微控制器通过观测示波器了解编码二、编码实验1、双极性不归零码(1)实验原理"1" 码和 &quo

2、t;0" 码都有电流,但是 "1" 码是正电流, "0" 码是负电流, 正和负的幅度相等, 极性相反,故称为双极性码。此时的判决门限为零电平,接收端使用零判决器或正负判决器,接收信号的值若在零电平以上为正,判为"1" 码 ; 若在零电平以下为负,判为"0" 码。(2)实验流程图开始将 Byte2 和 Byte1 暂存于 Data_temp2 和 Data_temp1中并设置编码计数值输出零电平NData_temp2,7=1?Y(3)实验思路Y输出正电平输出负电平Data_temp2 和 Data_temp

3、1 分别左移编码计数值不为0?N输出零电平结束需要在单极性不归零码的基础上,在程序的开始和结束时添加调用零电平的程序即可(4)实验程序/*双极性不归零码子程序*/Coding_Bi_NRZ:MOV A,Byte2MOV Data_temp2,A; 将 Byte2 中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A; 将 Byte2 中的数据暂存于Data_temp1中MOV A,16MOV temp,A;Byte2,Byte1中的信息共计16 位需要编码输出0文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版

4、本可编辑 .欢迎下载支持.call pulse_zero;=输出 16 位编码 =Bi_NRZ_LOOP:JBS Data_temp2,7CALL Pulse_negative;Data_temp2.7=0,调用负脉冲子程序JBC Data_temp2,7CALL Pulse_positive;Data_temp2.7=1,调用正脉冲子程序;信息左移1 位:RLC Data_temp1; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2; C=Data_temp1.7 -> R(0), R(n) -> R(n+1)

5、, R(7) -> CDJZ temp; temp-1=0?JMP Bi_NRZ_LOOP ; NO,继续编码输出call pulse_zero;=RET; NRZ 编码输出完毕/*/(5) 实验结果图一图二( 6)调试分析如图一所示,输入十六进制码 3456(相应的二进制为 0011 0100 0101 0110 ),再打开示波器,波形如图二所示。2.传号差分码(1)实验原理传号差分码的编码规则是用“ 1”和“ 0”表示发生电平跳变和电平不跳变,电平跳变用“ 1”表示,电平不跳变用“ 0”表示。(2)实验流程图开始输出零电平和 Data_temp1将 Byte2 和 Byte1 暂存于

6、 Data_temp2中,设置编码计数值和存放极性的寄存器YP并置 0上一位电平与当前位电N平是否改变?Y输出正电平输出负电平temp 左移1文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.Y编码计数值不为0?N输出零电平(3 )实验思路结束在双极性码的基础上,添加一个寄存器用于存放上一位编码的极性,再将存放极性的寄存器和存放下一位编码的寄存器进行异或。若异或结果为1,即电平发生了跳变, 则输出正电平;若异或结果为 0,同之前比电位没改变,则输出负电平。每次只能读出一位,所以最后再左移存放极性的寄存器,然后再进行下一次循

7、环。2文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.(4)实验程序/*传号差分码子程序*/Coding_DE_Mark:;传号差分码子程序;(对存放在Byte2,Byte1中的信息进行编码输出)MOV A,Byte2MOV Data_temp2,A; 将 Byte2 中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A; 将 Byte2 中的数据暂存于Data_temp1中MOV A,16MOV temp,A;Byte2,Byte1中的信息共计16 位需要编码输出call puls

8、e_negativeYP=0x24CLR YP;=输出 16 位编码 =DE_Mark_LOOP:MOV a,Data_temp2XOR YP,aJBS yp,7CALL Pulse_negative;Data_temp2.7=0,调用负脉冲子程序JBC yp,7CALL Pulse_positive;Data_temp2.7=1,调用正脉冲子程序RLC Data_temp1; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2; C=Data_temp1.7 -> R(0), R(n) -> R(n+1), R(7

9、) -> CDJZ temp; temp-1=0?JMP DE_Mark_LOOP; NO,继续编码输出call pulse_negative;=RET; 传号差分编码输出完毕/*/(5) 实验结果图三图四(6)调试分析如图三所示, 输入十六进制码55D3(相应的二进制为0101 0101 1101 0011 ),经过传号差分码编码后的二进制结果为0110 0110 1001 1101 。打开示波器,波形如图四所示。,理解并学会活用给新寄存器赋值,学会CLR3.空号差分码(1)实验原理0文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编

10、辑 .欢迎下载支持.空号差分码的编码规则是用“0 ”和“ 1”表示发生电平跳变和电平不跳变。与传号差分码相反,空号差分码中,电平跳变用“0”表示,电平不跳变用“1”表示。(2)实验流程图开始将 Byte2 和 Byte1 暂存于 Data_temp2 和 Data_temp1中,设置编码计数值和存放极性的寄存器YP1置 1输出零电平上一位电平与当前位电N平是否改变?Y输出负电平输出正电平temp 左移Y编码计数值不为0?N输出零电平(3)实验思路结束由于空号差分码正电平和负电平的编码规则与传号差分码的正好相反,所以空号差分码的程序段需要在传号差分码的基础上添加一个取反的语句,即 MOV A,0

11、XFFXOR YP1,A ,将上一步骤的异或结果取反。将异或取反后的结果置于寄存器YP1 中,输 t出 emp 的最高位再左移temp ,然后再进行下一次的循环。(4)实验程序/*空号差分码子程序*/Coding_DE_Space:;空号差分码子程序;(对存放在Byte2,Byte1中的信息进行HDB3 编码输出 )MOV A,Byte2MOV Data_temp2,A; 将 Byte2 中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A; 将 Byte2 中的数据暂存于Data_temp1中1文档来源为 :从网络收集整理.word 版本可编辑 .文档来

12、源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.MOV A,16MOV temp,A;Byte2,Byte1中的信息共计16 位需要编码输出call pulse_positiveYP1=0x25MOV A,0xFFMOV YP1,ADE_Space_LOOP:MOV A,0xFFXOR YP1,AMOV a,Data_temp2XOR YP1,aJBC yp1,7CALL Pulse_negative;Data_temp2.7=0,调用负脉冲子程序JBS yp1,7CALL Pulse_positive;Data_temp2.7=1,调用正脉冲子程序RLC Data_temp1;

13、 R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2; C=Data_temp1.7 -> R(0), R(n) -> R(n+1), R(7) -> CDJZ temp; temp-1=0?JMP DE_Space_LOOP ; NO,继续编码输出call pulse_negativeRET/*/(5)实验结果图五图六(6)调试分析如图五所示,输入十六进制码4723(相应的二进制为0100 0111 0010 0011 ),经过空号差分码的编码后,二进制结果为1101 0000 1001 0111 。打开示波

14、器,波形如图六所示。在设定新的寄存器时,没有掌握好寄存器的定义,将新寄存器先置0 了再将立即数存进去,这样就没意义,编码就是要求精简而准确。4.AMI 码(1)实验原理AMI 码属于单极性码的变形,当遇0 码时为零电平,当遇1 码则存在两种交替转换器极性,这样确保正负极性个数相等。编码规则:遇到编码为0 时就只出现0;消息代码中的1 传输码中的+1、-1 交替。例如:消息代码:1 0 1 1 0 1 0 1 1 1 AMI 码:+10-1 +1 0 -10+1-1+1(2)实验流程图开始将 Byte2 和 Byte1 暂存于 Data_temp2 和 Data_temp1中,置 YP2 为 0

15、2文档来源为 :从网络收集整理.word 版本可编辑 .输出零电平文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.(3) 实验思路输入为 0 的时候输出为零电平,输入为1 的时候为了满足极性交替的规律,需要设置标志位, 给标志位计数。设标志位为1 时输出正电平,标志位为0 时输出负电平。同时还要在输出正电平时改变标志位加1 为 0,输出负电平时改变标志位加1 为 1。(4) 实验程序/*AMI码子程序 */Coding_AMI:;AMI 码子程序;(对存放在Byte2,Byte1中的信息进行HDB3 编码输出 )MOV A,Byte2MOV Data_temp2,A; 将

16、Byte2 中的数据暂存于Data_temp2中MOV A,Byte1MOV Data_temp1,A; 将 Byte2 中的数据暂存于Data_temp1中MOV A,16MOV temp,A;Byte2,Byte1中的信息共计16 位需要编码输出CALL PULSE_ZEROYP2=0x26CLR YP2AMI_LOOP:JBS Data_temp2,7JMP YYJBC DATA_TEMP2,7INC YP2JBC YP2,0CALL PULSE_POSITIVEJBS YP2,0CALL PULSE_NEGATIVEJMP YY2YY:CALL PULSE_ZEROYY2:RLC Da

17、ta_temp1; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2; C=Data_temp1.7 -> R(0), R(n) -> R(n+1), R(7) -> CDJZ temp; temp-1=0?JMP AMI_LOOP; NO,继续编码输出call pulse_zeroRET/*/(5)实验结果图七图八(6)调试分析3文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.如图七所示,输入十六进制码4123(相应的二进制为0100

18、 0001 0010 0011 ),经过 AMI的编码后,结果为0 0+1 0 0 0 0 -1 0 0 +1 0 0 0 -1 +1。打开示波器,波形如图八所示。AMI 码实际上比较简单,主要就是要学会分情况讨论,然后设置好跳转的程序,这里出现0 位一种直接调用零电平, 出现 1 的时候则判断 1 的奇偶数, 后面 HDB3 的程序也可以出这里得到灵感。5.HDB3 码(1)实验原理首先, 将输入的原码变换成 AMI 码。然后 4 位 4 位的进行判断,检查 AMI 码中连“ 0” 的情况 , 当没有发现 4 个或 4 个以上连 “0”时,则不作改变, AMI 码就是 HDB3 码。当发现

19、4 个或 4 个以上连“ 0”的码元串时,就将第 4 个“ 0”变成与其前一个非“ 0”码元同极性的码元。 将这个码元称为“破坏码元” ,并用符号“ V”表示,即用“ + V”表示“ 1”,用“V”表示“ 1”。为了保证相邻“ V”的符号也是极性交替:当相邻“ V”之间有奇数个非“ 0” 码元时, 这是能够保证的。当相邻 “ V”之间有偶数个非 “ 0”码元时, 不符合此“极性交替”要求。这时,需插入补性码,将这个连“ 0”码元串的第 1 个“ 0”变成“ B”或“ B”。B的符号与前一个非“ 0”码元的符号相反,最后让之后的非“ 0”码元符号从 V 码元开始再交替变化,从而就能得到 HDB3

20、码。(2) 实验流程图开始将 Byte2 和 Byte1 暂存于 Data_temp2 和 Data_temp1 中,定义编码时所需的各种寄存器输出零电平记零寄存器加一N记零寄存器是否为 4?YData_temp2=0 ?NY数值标志寄存器N是否为 0?Y输出 -B输出 +BY极性标志寄存器输出零电平是否为 0?N4文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.输出 -V输出 +V0标志寄存器置 1标志寄存器置标志寄存器置 0标志寄存器置 1NBU 寄存器是否为 0YData_temp2 和 Data_temp1 左移

21、一位插入补性码编码计数值不为0?YN输出零电平(3)实验思路结束根据 HDB3 码的规则,首先判断连0 的情况,若小于4 则程序正常运行,调用脉冲,出现1时候,则开始计数,根据判断B 寄存器的奇偶性判断输出正负,当连0大等于 4则对 V寄存器计数,根据奇偶性判断正负,调用脉冲,同时对BU 计数,统计1 的个数,判断补信码的存在,其余的正常输出。(4)实验程序/*HDB3码子程序 */Coding_HDB3:MOV A,0X43MOV Data_temp2,AMOV A,0X05MOV Data_temp1,AMOV A,16MOV temp,Ab=0x27; 定义寄存器 b ,用于计数 B 和

22、 B' 的个数及判断极性v=0x28;定义寄存器 v,用于判断 V 码的个数和极性bu=0x29;定义寄存器 bu, 用于计数 B,B;V;的个数及极性MOV A,0MOV b,AMOV v,AMOV bu,ALOOP_HDB3:JBC Data_temp2,4JMP Output_normal;若 Data_temp2 第四位不为 0 ,跳转正常输出JBS Data_temp2,45文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.JBC Data_temp2,5JMP Output_normal;若 Data_

23、temp2第五位不为0,跳转正常输出JBS Data_temp2,5JBC Data_temp2,6JMP Output_normal;若 Data_temp2第六位不为0,跳转正常输出JBS Data_temp2,6JBC Data_temp2,7JMP Output_normal;若 Data_temp2第七位不为0,跳转正常输出BS Data_temp2,4;出现四个连0INC vdec bJBS bu,0;判断寄存器bu 的值是奇数还是偶数BS Data_temp2,7;偶数时,则存在补信码B'JBS Data_temp2,7;奇数时,无补信码B'JMP Output_

24、normal;没有加入补信码,跳转正常输出JBC Data_temp2,7inc buinc bOutput_buxinma:JBC b,0CALL Pulse_negativeJBS b,0CALL Pulse_positiveJMPOutput_zuoyiOutput_normal:JBS Data_temp2,7CALL Pulse_zeroJBS Data_temp2,7JMP Output_zuoyiJBC Data_temp2,7INC bINC buJBC b,0CALL Pulse_positiveJBS b,0CALL Pulse_negativeOutput_zuoyi:R

25、LC Data_temp1; R(n) -> R(n+1), R(7) -> C=Data_temp1.7RLC Data_temp2; C=Data_temp1.7 -> R(0), R(n) -> R(n+1), R(7) -> CBS Data_temp1,7DJZ temp; temp-1=0?JMP Loop_HDB3;(学生编写程序段)RET;16 位编码输出完毕6文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持./*/(5)实验结果图十一图十二(6)调试分析如图十一所示,输入十六

26、进制码 861E(相应的二进制为 1000 0110 0001 1110 ),经过 HDB3 编码后,结果为 +B0 0 0 +V -B +B -B 0 0 -V +B -B +B -B 0。打开示波器,波形如图十二所示。HDB3码就是将前面的码综合运用,所以分情况比较多,并且复杂。因此我的思路就是四位四位地比较,但是这样就出现了一些考虑不周的情况导致错误的情况错误一: 没有考虑第一为为0 的情况, 直接给 B码计数, 导致不能满足首位为0 的情况错误二:在用 B 码计数的时候没有考虑每次计数之后当左移再次到达该数的时候多记了一次 1. 因此输出为错误,后面添加DEC B 从而得到正确情况错误

27、三:没有考虑最后一位为0 的情况,这样16 位左移完了之后,会自动补0 会多出现 4 位 0 的情况,从而影响,之后在每次左移之后加入BS DATA_TEMP1, 7 从而解决6.汉明码的编码( 7,4 码的编码)(1)实验原理汉明码是 d0=3、高效的( 7,4)线性分组码,它有纠正单个随机差错或检测两个错误的能力。(2)实验流程图开始输入原码定义计数寄存器输出零电平调用汉明码编码子程序结束输出 8 位编码(3)实验思路根据线性分组码的计算规则,得到十进制0 至 15 所对应的汉明码,如下图所示:利用 RETL 语句和以上表格中的数据即可编出汉明码的编码。(4)实验程序/*汉明码的编码*/C

28、oding_T8:;( 7,4 )线性分组码MOV A,8MOV temp3,A;定义输出计零寄存器7文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.CALL Pulse_zeroCALL Hamming_CodeMOV temp1,A;将累加器 A 中的汉明码存放到temp1 中Circle:JBC temp1,7; 输出汉明码CALL Pulse_positiveJBS temp1,7CALL Pulse_negativeRLC temp1DJZ temp3JMP CircleCALL Pulse_zeroRET;=

29、查表 =Hamming_Code:MOV A,Byte1;将输入数据从 Byte1中存入累加器A 中ADD R2_SP ,A;通过累加器 A 查表得出汉明码RETL 0;0RETL 11;1RETL 21;2RETL 30;3RETL 38;4RETL 45;5RETL 51;6RETL 56;7RETL 71;8RETL 76;9RETL 82;ARETL 89;BRETL 97;CRETL 106;DRETL 116;ERETL 127;F/*/(5)实验结果图十三图十四;=查表 =Hamming_Code:.7.汉明码的解码(1)实验原理8文档来源为 :从网络收集整理.word 版本可编

30、辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.汉明码是 d0=3、高效的( 7, 4)线性分组码,它有纠正单个随机差错或检测两个错误的能力。(2)实验思路输入 8 位十六进制的数存于Byte2 中,再将 Byte2 中的数值与表中存放的汉明码数值相异或,再统计异或结果中“1”的个数,即码距。若“1”的个数为一个或是0 个则此时所取的汉明码的原码是所解码的数值。最后再把解码出的数值置于Byte1 中输出。(3)实验流程图开始输入 Byte2Byte2 与存放汉明码表中的数值N进行异或Y异或结果有一个异或结果有0 个N“ 1”?输出该汉明码“1”?对应的原码Y输出该汉明

31、码提取下一个汉明码对应的原码结束(4)实验程序/*汉明码的解码*/Coding_T8:;( 7,4 )线性分组码;将存放于Byte2 中的信息码字 (bit3bit0)转换为( 7,4 )码的合法码字,;合法码字存入Byte1(bit6bit0),并通过Signal口输出到示波器;(学生编写程序段)MOV A,7MOV TEMP ,Amov a,Byte2call encode74mov Byte1,acall encode74_outputretencode74:mov A,Byte2add R2_SP ,Aretl 0b00000000;0000retl 0b00001011;0001re

32、tl 0b00010101;0010retl 0b00011110;0011retl 0b00100110;0100retl 0b00101101;0101retl 0b00110011;01109文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.retl 0b00111000;0111retl 0b01000111;1000retl 0b01001100;1001retl 0b01010010;1010retl 0b01011001;1011retl 0b01100001;1100retl 0b01101010;1101

33、retl 0b01110100;1110retl 0b01111111;1111RETencode74_output:JBS Byte1,6call Pulse_negativeJBC Byte1,6CALL Pulse_positiveRLC Byte1DJZ tempJMP encode74_outputRET/*/Coding_T8:rrr=0x30;收到的码字aaa=0x31;存放查表指针hanming=0x32;存放正确码字ccc=0x33;存放查表得到的码字yihuoqs=0x34;存放异或后结果sum=0x35;码距clr rrrclr aaaclr cccclr hanming

34、clr yihuoqsmov a,1mov sum,a ;给各寄存器赋初始状态值loop_qs:jbs aaa,4;aaa.4=0, 还没有判断完16 位码,继续nopjbc aaa,4;aaa.41, 已经判断完16 位汉明码后仍无匹配结果,程序自动结束ret;已经判断完16 位汉明码后自主结束。mov a,Byte2mov rrr,a; 将输入信息放到rrrcall encode74;调用查表子程序JMP judge74;跳转到判断码距程序K1:10文档来源为 :从网络收集整理.word 版本可编辑 .文档来源为 :从网络收集整理.word 版本可编辑 .欢迎下载支持.JMP output

35、74;跳转到解码输出程序K2:ret; 汉明码解码输出完毕/*子程序段 */encode74:nopmov A,aaa ;查表指针给到 A, 根据指针查表,将查得结果又放到 A 中 add R2_SP ,Aretl 0b00000000;0000retl 0b00001011;0001retl 0b00010101;0010retl 0b00011110;0011retl 0b00100110;0100retl 0b00101101;0101retl 0b00110011;0110retl 0b00111000;0111retl 0b01000111;1000retl 0b01001100;1001retl 0b01010010;1010retl 0b01011001;1011retl 0b01100001;1100retl 0b01101010;1101retl 0b011101

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论