《通信原理概论实验》实验报告班级:学号:姓名:日期:2013年5月7日实验名称:数字基带传输系统—数字基带信号的码型(一)实验目的:(1)使用MATLAB产生各种简单的数字基带信号码型。通过实验进一步熟悉和掌握各种码型的编码规则。)(2实验要求:请按照本实验说明的实验内容部分的信息独立完成本实验,并提交实验报告,实验报告请参照实验报告模板的格式。实验内容:1、编制以下函数,实现将输入的一段二进制代码编为相应的单极性不归零码输出。参考程序如下:%snrz.mfunctiony=snrz(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列fori=1:length(x)%计算机码元的值ifx(i)==1forj=1:t0%如果输入信息为1,码元对应的点值取1y((i-1)*t0+j)=1;end;elseforj=1:t00%如果输入信息为0,码元对应的点值取y((i-1)*t0+j)=0;endendendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('单极性不归零码');说明:该函数编制好后,在MATLAB的命令窗口输入:x=[11101001000110];%这个二进制序列可以任意修改snrz(x)%执行函数,输出显示对应的码型结果如图所示:2.编制另一个函数,用于产生双极性不归零码。双极性不归零码的实现同单极性基本一样,只需将snrz.m中判断得到0信息后的语句“y((i-1)*t0+j)=0;”改为“y((i-1)*t0+j)=-1;”。此外,双极性波形显示的时候,需要将“axis([0,i,-0.1,1.1]);””axis([0,i,-1.1,1.1]);改为“3.编制以下函数,用于产生单极性归零码。参考程序如下:%srz.mfunctiony=srz(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列fori=1:length(x)%计算机码元的值ifx(i)==1forj=1:t0/2y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;elseforj=1:t0%如果输入信息为0,码元对应的点值取0y((i-1)*t0+j)=0;endendendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('单极性归零码');结果如图所示:4.请修改srz.m,编制另一个函数,用于产生双极性归零码。编制另一个函数,用于产生双极性不归零码。双极性不归零码的实现同单极性基本一样,只需将srz.m中判断得到0信息后的语句“y((i-1)*t0+j)=0;”改为“y((2*i-2)*t0/2+j)=-1”。并添加y((2*i-1)*t0/2+j)=0;于下一段。此外,双极性波形显示的时候,需要将“axis([0,i,-0.1,1.1]);”改为“axis([0,i,-1.1,1.1]);”5.请参照前面的程序,编制一个函数,用于产生传号差分码。(提示:下一个码元需要参考前一个码元,可假设第一个码元之前是零电平)%schuanhao.m传号差分码functiony=schuanhao(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列设定第一个码元之前是零电平%p0=0;fori=1:length(x)%计算机码元的值ifx(i)==1ifp0==0;forj=1:t0%如果输入信息为1,码元对应的点值取1y((i-1)*t0+j)=1;end;p0=1;elseforj=1:t0y((i-1)*t0+j)=0;end;p0=0;end;elseifp0==0;forj=1:t0%如果输入信息为1,码元对应的点值取1y((i-1)*t0+j)=0;end;p0=0;elseforj=1:t0y((i-1)*t0+j)=1;end;p0=1;end;endendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('传好差分码');6.请参照前面的程序,编制一个函数,用于产生空号差分码。(提示:下一个码元需要参考前一个码元,可假设第一个码元之前是零电平)%schuanhao.m空号差分法functiony=schuanhao(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列p0=0;%设定第一个码元之前是零电平fori=1:length(x)%计算机码元的值ifx(i)==0ifp0==0;1,码元对应的点值取1如果输入信息为%forj=1:t0y((i-1)*t0+j)=1;end;p0=1;elseforj=1:t0y((i-1)*t0+j)=0;end;p0=0;end;elseifp0==0;forj=1:t0%如果输入信息为1,码元对应的点值取1y((i-1)*t0+j)=0;end;p0=0;elseforj=1:t0y((i-1)*t0+j)=1;end;p0=1;end;endendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('空号差分码');7.请参照前面的程序,编制一个函数,用于产生曼彻斯特编码(数字双相码),规定发送1时编为10,发送0时编为01。(提示:曼彻斯特编码和双极性归零码的相同点是:发送1的时候,先正电平后零电平。区别在于:双极性归零码发送0时,先负电平后零电平,而曼彻斯特编码发送0时,先零电平后正电平)%manchesete.mfunctiony=manchesete(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列fori=1:length(x)%计算机码元的值ifx(i)==1forj=1:t0/2y((2*i-2)*t0/2+j)=1;%定义前半段时间值为10%y((2*i-1)*t0/2+j)=0;定义后半段时间值为end;elseforj=1:t0/2y((2*i-2)*t0/2+j)=0;%定义前半段时间值为01y((2*i-1)*t0/2+j)=1;%定义后半段时间值为endendendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('曼彻斯特编码');8.请参照前面的程序,编制一个函数,用于产生差分曼彻斯特编码(条件双相码)。(提示:下一个码元需要参考前一个码元,可假设第一个码元之前是零电平)%tjshx.mfunctiony=tjshx(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列p0=0;%设定第一个码元之前是零电平fori=1:length(x)%计算机码元的值ifx(i)==1ifp0==0;forj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=0;%定义前半段时间值为1y((2*i-1)*t0/2+j)=1;%定义后半段时间值为0end;p0=1;elseforj=1:t0/2y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;end;elseifp0==1;forj=1:t0/2%如果输入信息为1,码元对应的点值取10定义前半段时间值为%y((2*i-2)*t0/2+j)=0;y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1end;p0=1;elseforj=1:t0/2y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;end;endendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('条件双向码');9编制一个函数,用于产生传号反转码(CMI)代码:%xhfz.mfunctiony=xhfz(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列p0=0;%设定第一个码元之前是零电平fori=1:length(x)%计算机码元的值ifx(i)==1ifp0==0;forj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=1;%定义后半段时间值为0end;p0=1;elseforj=1:t0/2y((2*i-2)*t0/2+j)=0;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;end;elseforj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1end;p0=1;endendN=length(y);temp=y(N);y=[y,temp];plot(t,y);axis([0,i,-0.1,1.1]);title('信号反转码');显示结果:9.编制一个函数,用于产生密勒码(延迟调制码)functiony=yctz(x)%输入x为二进制码,输出y为编好的码t0=200;%每个码元200个点t=0:1/t0:length(x);%时间序列p0=0;%设定第一个码元之前是零电平fori=1:length(x)%计算机码元的值if(x(i)==1)ifp0==0forj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1endp0=1;elseforj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;endelseif(x(i-1)==0)ifp0==01,码元对应的点值取1如果输入信息为forj=1:t0/2%.y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1end;p0=1;elseforj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;endelseifp0==0forj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0end;p0=0;elseforj=1:t0/2%如果输入信息为1,码元对应的点值取1y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1end;p0=1;endendendendN=length(y);temp=y(N);y=[y