通信原理仿真实验系统设计与实现 第11页
t0=10; %时间序列长度
ts=0.001; %画出原信号采用的抽样周期,注意不是题中的抽样周期
ts1=0.1; %欠抽样时的周期
ts2=0.05; %抽样条件满足
fs=1/ts;
fs1=1/ts1;
fs2=1/ts2;
df=0.5;
t=[-t0/2:ts:t0/2]; %计算序列第一步
x=sin(20*t);
m=x./t; %计算出sinc函数
w=t0/(2*ts)+1; %计算错误值标号
m(w)=20; %修正错误值
m=m.*cos(100*t); %频谱搬移
[M,mn,dfy]=fftseq(m,ts,df);
M=M/fs;
f=[0:dfy:dfy*length(mn)-dfy]-fs/2;
%pause;
subplot(2,1,1)
plot(f,abs(fftshift(M)))
axis([-50,50,0,3]); title('原信号的频谱')
t1=[-t0/2:ts1:t0/2]; %抽样不足的信号序列
x1=sin(20*t1);
m1=x1./t1; %计算出sinc函数
w1=t0/(2*ts1)+1; %计算错误值标号
m1(w1)=20; %修正错误值
m1=m1.*cos(100*t1); %频谱搬移
[M1,mn1,df1]=fftseq(m1,ts1,df);
M1=M1/fs1;
N1=[M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1,M1];
f1=[-7*df1*length(mn1):df1:6*df1*length(mn1)-df1]-fs1/2;
subplot(2,2,3); plot(f1,abs(fftshift(N1)))
title('不满足抽样要求'); axis([-50,50,0,5]);
t2=[-t0/2:ts2:t0/2]; %满足抽样要求的时间序列
x2=sin(20*t2);
m2=x2./t2; %计算出sinc函数
w2=t0/(2*ts2)+1; %计算错误值标号
m2(w2)=20; %修正错误值
m2=m2.*cos(100*t2); %频谱搬移
[M2,mn2,df2]=fftseq(m2,ts2,df);
M2=M2/fs2;
N2=[M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2,M2];
f2=[-7*df2*length(mn2):df2:6*df2*length(mn2)-df2]-fs2/2;
subplot(2,2,4); plot(f2,abs(fftshift(N2)))
title('满足抽样要求'); axis([-50,50,0,3]);
xlabel('频率')
%单极性非归零码 snrz.m
function y=snrz(x)
%本函数实现将输入的一段代二进制代码编为相应的单极性非归零码输出
%输入X为二进制码,输出Y为编好的码
%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示
grid=300;
t=0:1/grid:length(x); %给出相应的时间序列
for i=1:length(x) %计算码元的值
if(x(i)==1) %若输入信息为1
for j=1:grid, %该码元对应的点值取1
y((i-1)*grid+j)=1;
end
else
for j=1:grid, %反之信息为0,码元对应点值取0
y((i-1)*grid+j)=0;
end; end; end
y=[y,x(i)]; %给序列Y加上最的一位,便于做图
M=max(y); m=min(y);
subplot(2,1,1);
plot(t,y);axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1');
%单极性归零码 srz.m
function y=srz(x)
%本函数实现将输入的一段代二进制代码编为相应的单极性归零码输出
%输入X为二进制码,输出Y为编好的码
grid=200;
t=0:1/grid:length(x); %给出相应的时间序列
for i=1:length(x) %进行码型变换
if(x(i)==1) %若输入信息为1
for j=1:grid/2
y(grid/2*(2*i-2)+j)=1; %定义前半时间值为1
y(grid/2*(2*i-1)+j)=0; %定义后半时间值为0
end
else
for j=1:grid/2 %反之,输入信息为○
y(grid*(i-1)+j)=0; %定义所有时间值为○
end; end; end
y=[y,x(i)]; %给序列Y加上最的一位,便于做图
M=max(y); m=min(y);
plot(t,y);axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1');
%双极性非归零码 dnrz.m
function y=snrz(x)
%本函数实现将输入的一段代二进制代码编为相应的双极性非归零码输出
%输入X为二进制码,输出Y为编好的码
%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示
grid=300;
t=0:1/grid:length(x); %给出相应的时间序列
for i=1:length(x) %计算码元的值
if(x(i)==1) %若输入信息为1
for j=1:grid, %该码元对应的点值取1
y((i-1)*grid+j)=1;
end
else
for j=1:grid, %反之信息为0,码元对应点值取0
y((i-1)*grid+j)=-1;
end; end; end
y=[y,x(i)]; %给序列Y加上最的一位,便于做图
M=max(y); m=min(y);
subplot(2,1,1);
plot(t,y);axis([0,i,m-0.1,M+0.1]);
title('1 0 0 1 1 0 0 0 0 1 0 1');
%双极性归零码 drz.m
function y=drz(x)
%本函数实现将输入的一段代二进制代码编为相应的双极性归零码输出
%输入X为二进制码,输出Y为编好的码
%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示
grid=300;
t=0:1/grid:length(x); %给出相应的时间序列
for i=1:length(x) %计算码元的值
if(x(i)==1) %若输入信息为1
for j=1:grid/2