通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx

上传人:b****2 文档编号:789566 上传时间:2023-04-30 格式:DOCX 页数:29 大小:193.22KB
下载 相关 举报
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第1页
第1页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第2页
第2页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第3页
第3页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第4页
第4页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第5页
第5页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第6页
第6页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第7页
第7页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第8页
第8页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第9页
第9页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第10页
第10页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第11页
第11页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第12页
第12页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第13页
第13页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第14页
第14页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第15页
第15页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第16页
第16页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第17页
第17页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第18页
第18页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第19页
第19页 / 共29页
通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx

《通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx》由会员分享,可在线阅读,更多相关《通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx(29页珍藏版)》请在冰点文库上搜索。

通信原理概论实验 数字基带传输系统 数字基带信号的码型一.docx

通信原理概论实验数字基带传输系统数字基带信号的码型一

《通信原理概论实验》实验报告

班级:

学号:

姓名:

日期:

2013年5月7日

实验名称:

数字基带传输系统—数字基带信号的码型

(一)

实验目的:

(1)使用MATLAB产生各种简单的数字基带信号码型。

通过实验进一步熟悉和掌握各种码型的编码规则。

)(2

实验要求:

请按照本实验说明的实验内容部分的信息独立完成本实验,并提交实验报告,实验报告请参照实验报告模板的格式。

实验内容:

1、编制以下函数,实现将输入的一段二进制代码编为相应的单极性不归零码输出。

参考程序如下:

%snrz.m

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:

t0

0%如果输入信息为0,码元对应的点值取

y((i-1)*t0+j)=0;

end

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)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

fori=1:

length(x)%计算机码元的值

ifx(i)==1

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

else

forj=1:

t0

%如果输入信息为0,码元对应的点值取0

y((i-1)*t0+j)=0;

end

end

end

N=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)==1

ifp0==0;

forj=1:

t0%如果输入信息为1,码元对应的点值取1

y((i-1)*t0+j)=1;

end;

p0=1;

else

forj=1:

t0

y((i-1)*t0+j)=0;

end;

p0=0;

end;

else

ifp0==0;

forj=1:

t0%如果输入信息为1,码元对应的点值取1

y((i-1)*t0+j)=0;

end;

p0=0;

else

forj=1:

t0

y((i-1)*t0+j)=1;

end;

p0=1;

end;

end

end

N=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)==0

ifp0==0;

1

,码元对应的点值取1如果输入信息为%forj=1:

t0

y((i-1)*t0+j)=1;

end;

p0=1;

else

forj=1:

t0

y((i-1)*t0+j)=0;

end;

p0=0;

end;

else

ifp0==0;

forj=1:

t0%如果输入信息为1,码元对应的点值取1

y((i-1)*t0+j)=0;

end;

p0=0;

else

forj=1:

t0

y((i-1)*t0+j)=1;

end;

p0=1;

end;

end

end

N=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.m

functiony=manchesete(x)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

fori=1:

length(x)%计算机码元的值

ifx(i)==1

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

0

%y((2*i-1)*t0/2+j)=0;定义后半段时间值为

end;

else

forj=1:

t0/2

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0

1

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为

end

end

end

N=length(y);

temp=y(N);

y=[y,temp];

plot(t,y);

axis([0,i,-0.1,1.1]);

title('曼彻斯特编码');

8.请参照前面的程序,编制一个函数,用于产生差分曼彻斯特编码(条件双相码)。

(提示:

下一个码元需要参考前一个码元,可假设第一个码元之前是零电平)

%tjshx.m

functiony=tjshx(x)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

p0=0;%设定第一个码元之前是零电平

fori=1:

length(x)%计算机码元的值

ifx(i)==1

ifp0==0;

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为0

end;

p0=1;

else

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

end;

else

ifp0==1;

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

0

定义前半段时间值为%y((2*i-2)*t0/2+j)=0;

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1

end;

p0=1;

else

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

end;

end

end

N=length(y);

temp=y(N);

y=[y,temp];

plot(t,y);

axis([0,i,-0.1,1.1]);

title('条件双向码');

9编制一个函数,用于产生传号反转码(CMI)

代码:

%xhfz.m

functiony=xhfz(x)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

p0=0;%设定第一个码元之前是零电平

fori=1:

length(x)%计算机码元的值

ifx(i)==1

ifp0==0;

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为0

end;

p0=1;

else

forj=1:

t0/2

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

end;

else

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1

end;

p0=1;

end

end

N=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==0

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1

end

p0=1;

else

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

end

else

if(x(i-1)==0)

ifp0==0

1

,码元对应的点值取1如果输入信息为forj=1:

t0/2%.

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1

end;

p0=1;

else

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

end

else

ifp0==0

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=0;%定义前半段时间值为0

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=0;

else

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=1;%定义后半段时间值为1

end;

p0=1;

end

end

end

end

N=length(y);

temp=y(N);

y=[y,temp];

plot(t,y);

axis([0,i,-0.1,1.1]);

x=[11101001000110];

title('米勒码');

10.编制一个函数,用于产生AMI(传号交替反转码)。

%ami.m

functiony=ami(x)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

p0=-1;%由于遇到“1”交替变换为“+1”和“-1”,因此初始信息为-1

fori=1:

length(x)%计算机码元的值

ifx(i)==1

ifp0==-1;

forj=1:

t0/2%如果输入信息为1,码元对应的点值取1

y((2*i-2)*t0/2+j)=1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=1;

else

forj=1:

t0/2

y((2*i-2)*t0/2+j)=-1;%定义前半段时间值为1

y((2*i-1)*t0/2+j)=0;%定义后半段时间值为0

end;

p0=-1;

end;

else

forj=1:

t0%如果输入信息为1,码元对应的点值取1

y((i-1)*t0+j)=0;

end;

end

end

N=length(y);

temp=y(N);

y=[y,temp];

plot(t,y);

axis([0,i,-1.1,1.1]);

title('传号交替反转码');

%hdb3.m

functiony=hdb3(x)

%输入x为二进制码,输出y为编好的码

t0=200;%每个码元200个点

t=0:

1/t0:

length(x);%时间序列

zerocount=0;%该变量用于统计连零的数量

bcount=0;%该变量用于统计上一个V脉冲以来B脉冲的数量

B=1;%该变量存储前一个脉冲的极性,等于1时为正脉冲,等于负1时为负脉冲.

%循环处理二进制序列

fori=1:

length(x)

ifx(i)==1%如果为符号1

zerocount=0;%连零统计清零

bcount=bcount+1;%B脉冲数量+1

ifB==1%如果前一个脉冲为正脉冲,输出一个负脉冲

forj=1:

t0/2

y((2*i-2)*t0/2+j)=-1;

y((2*i-1)*t0/2+j)=0;

end;

B=-1;%更新B

else%如果前一个脉冲为负脉冲,输出一个正脉冲

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;

y((2*i-1)*t0/2+j)=0;

end;

B=1;%更新B

end

else%如果符号为0

zerocount=zerocount+1;%连零统计+1

ifzerocount==4%如果连零数量等于4

ifmod(bcount,2)==1%如果自上一V脉冲以来已经有了奇数个B

ifB==1

%如果前一个脉冲为正脉冲,输出一个正的V脉冲,这时取代节是000V+

forj=1:

t0/2

y((2*i-2)*t0/2+j)=1;

y((2*i-1)*t0/2+j)=0;

end;

else

%如果前一个脉冲为负脉冲,输出一个负的V脉冲,这时取代节是000V+

forj=1:

t0/2

y((2*i-2)*t0/2+j)=-1;

y((2*i-1)*t0/2+j)=0;

end;

end

else%如果自上一V脉冲以来已经有了偶数个B

ifB==1

%如果前一个脉冲为正脉冲,输出一个负的V脉冲,这时取代B-00V-

节是

forj=1:

t0/2

y((2*i-2)*t0/2+j)=-1;

y((2*i-1)*t0/2+j)=0;

end;

forj=1:

t0/2%调整往前数第三个符号为B-

y((2*i-2-6)*t0/2+j)=-1;

y((2*i-1-6)*t0/2+j)=0;

end;

B=-1%更新B

else

%如果前一个脉冲为负脉冲,输出一个正的V脉冲,这时取代节是B+00V+

forj=1:

t0/2

y((2*i-2)*t0/2+j)=+1;

y((2*i-1)*t0/2+j)=0;

end;

forj=1:

t0/2%调整往前数第三个符号为B-

y((2*i-2-6)*t0/2+j)=+1;

y((2*i-1-6)*t0/2+j)=0;

end;

B=+1;%更新B

end

end

bcount=0;?

ount清零

zerocount=0;?

ount清零

else%如果不是4连零,直接输出0

forj=1:

t0

y((i-1)*t0+j)=0;

end

end

end

end%endfor

N=length(y);

temp=y(N);

y=[y,temp];

plot(t,y);

axis([0,i,-1.1,1.1]);

x=[10110000000110000001]

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2