通信原理概论实验 数字基带传输系统数字基带信号的码型一Word文档格式.docx
《通信原理概论实验 数字基带传输系统数字基带信号的码型一Word文档格式.docx》由会员分享,可在线阅读,更多相关《通信原理概论实验 数字基带传输系统数字基带信号的码型一Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
functiony=snrz(x)
%输入x为二进制码,输出y为编好的码
t0=200;
%每个码元200个点
t=0:
1/t0:
length(x);
%时间序列
fori=1:
length(x)%计算机码元的值
ifx(i)==1
forj=1:
t0
%如果输入信息为1,码元对应的点值取1
y((i-1)*t0+j)=1;
end;
else
forj=1:
%如果输入信息为0,码元对应的点值取0
y((i-1)*t0+j)=0;
end
end
N=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.m
functiony=srz(x)
ifx(i)==1
t0/2
y((2*i-2)*t0/2+j)=1;
%定义前半段时间值为1
y((2*i-1)*t0/2+j)=0;
%定义后半段时间值为0
单极性归零码'
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;
于下一段。
5.请参照前面的程序,编制一个函数,用于产生传号差分码。
(提示:
下一个码元需要参考前一个码元,可假设第一个码元之前是零电平)
%schuanhao.m传号差分码
functiony=schuanhao(x)
p0=0;
%设定第一个码元之前是零电平
ifp0==0;
forj=1:
t0%如果输入信息为1,码元对应的点值取1
y((i-1)*t0+j)=1;
end;
p0=1;
else
y((i-1)*t0+j)=0;
p0=0;
else
end
传好差分码'
6.请参照前面的程序,编制一个函数,用于产生空号差分码。
%schuanhao.m空号差分法
ifx(i)==0
空号差分码'
7.请参照前面的程序,编制一个函数,用于产生曼彻斯特编码(数字双相码),规定发送1时编为10,发送0时编为01。
曼彻斯特编码和双极性归零码的相同点是:
发送1的时候,先正电平后零电平。
区别在于:
双极性归零码发送0时,先负电平后零电平,而曼彻斯特编码发送0时,先零电平后正电平)
%manchesete.m
functiony=manchesete(x)
y((2*i-2)*t0/2+j)=0;
%定义前半段时间值为0
y((2*i-1)*t0/2+j)=1;
%定义后半段时间值为1
曼彻斯特编码'
8.请参照前面的程序,编制一个函数,用于产生差分曼彻斯特编码(条件双相码)。
%tjshx.m
functiony=tjshx(x)
t0/2%如果输入信息为1,码元对应的点值取1
y((2*i-2)*t0/2+j)=0;
y((2*i-1)*t0/2+j)=1;
y((2*i-2)*t0/2+j)=1;
y((2*i-1)*t0/2+j)=0;
ifp0==1;
条件双向码'
9编制一个函数,用于产生传号反转码(CMI)
代码:
%xhfz.m
functiony=xhfz(x)
信号反转码'
显示结果:
9.编制一个函数,用于产生密勒码(延迟调制码)
functiony=yctz(x)
if(x(i)==1)
ifp0==0
y((2*i-2)*t0/2+j)=0;
y((2*i-1)*t0/2+j)=1;
y((2*i-2)*t0/2+j)=1;
y((2*i-1)*t0/2+j)=0;
if(x(i-1)==0)
end
米勒码'
10.编制一个函数,用于产生AMI(传号交替反转码)。
%ami.m
functiony=ami(x)
p0=-1;
%由于遇到“1”交替变换为“+1”和“-1”,因此初始信息为-1
ifp0==-1;
%定义后半段时间值为0
y((2*i-2)*t0/2+j)=-1;
p0=-1;
else
axis([0,i,-1.1,1.1]);
传号交替反转码'
%hdb3.m
functiony=hdb3(x)
zerocount=0;
%该变量用于统计连零的数量
bcount=0;
%该变量用于统计上一个V脉冲以来B脉冲的数量
B=1;
%该变量存储前一个脉冲的极性,等于1时为正脉冲,等于负1时为负脉冲
%循环处理二进制序列
length(x)
ifx(i)==1%如果为符号1
zerocount=0;
%连零统计清零
bcount=bcount+1;
%B脉冲数量+1
ifB==1%如果前一个脉冲为正脉冲,输出一个负脉冲
B=-1;
%更新B
else%如果前一个脉冲为负脉冲,输出一个正脉冲
B=1;
end
else%如果符号为0
zerocount=zerocount+1;
%连零统计+1
ifzerocount==4%如果连零数量等于4
ifmod(bcount,2)==1%如果自上一V脉冲以来已经有了奇数个B
ifB==1
%如果前一个脉冲为正脉冲,输出一个正的V脉冲,这时取代节是000V+
%如果前一个脉冲为负脉冲,输出一个负的V脉冲,这时取代节是000V+
else%如果自上一V脉冲以来已经有了偶数个B
ifB==1
%如果前一个脉冲为正脉冲,输出一个负的V脉冲,这时取代节是B-00V-
t0/2%调整往前数第三个符号为B-
y((2*i-2-6)*t0/2+j)=-1;
y((2*i-1-6)*t0/2+j)=0;
B=-1%更新B
%如果前一个脉冲为负脉冲,输出一个正的V脉冲,这时取代节是B+00V+
y((2*i-2)*t0/2+j)=+1;
y((2*i-2-6)*t0/2+j)=+1;
B=+1;
bcount=0;
%bcount清零
else%如果不是4连零,直接输出0
end%endfor
x=[10110000000110000001]