plot(t,s)
2.模拟调制与解调的仿真
(1)信号的DSB调制与解调
clearall;
closeall;
clc;
t0=0.15;
dt=0.0001;
t=[0:
dt:
1];
fc=250;
phi0=0;
ct=cos(2*pi*fc*t+phi0);%载波信号
fm=10;
fun=@(t)1.*(t>=0&t<=t0/3)+(-2).*(t>=t0/3&t<=2*t0/3)+0.*(t>=2*t0/3);
mt=fun(t);
ut=1.5*mt.*ct;
figure
(1)
subplot(3,1,1),plot(t,mt),title('mt----调制信号')
subplot(3,1,2),plot(t,ct),title('ct----载波信号')
subplot(3,1,3),plot(t,ut),title('ut----已调信号')
[m,n]=size(ut);
ni=0.05*randn(m,n);
u0=ut+ni;
figure
(2)
subplot(3,1,1),plot(t,ni),title('ni----高斯白噪声')
subplot(3,1,2),plot(t,u0),title('u0=ut+ni----已调信号+高斯白噪声')
w1=2*dt*(fc-2*fm);
w2=2*dt*(fc+2*fm);
[b,a]=butter(4,[w1,w2],'bandpass');
u1=filter(b,a,u0);
subplot(3,1,3),plot(t,u1),title('u1----信号进入带通滤波器')
figure(3)
u2=u1.*ct;
subplot(3,1,1),plot(t,u2),title('u2----与载波相乘后的波形')
B=2*fm;
wn3=2*dt*B;
[b,a]=butter(4,wn3,'low');
u3=filter(b,a,u2);
subplot(3,1,2),plot(t,-u3),title('u3----解调后的信号')
subplot(3,1,3),plot(t,-u3),holdon,title('解调后的信号与原调制信号比较')
plot(t,mt,'r');
dt=t
(2)-t
(1);%采样周期
f=1/dt;%采样频率(Hz)
X=fft(ut);%计算x的快速傅立叶变换X
N=1/dt;
F=X(1:
N/2+1);%F(k)=X(k)(k=1:
N/2+1)
f=f*(0:
N/2)/N;%使频率轴f从零开始
figure(4)
subplot(3,1,1),plot(f,abs(F)),title('dsb调制信号频谱图');xlim([0,fc*2]);
xlabel('Frequency');
ylabel('|F(k)|')
调制与解调的波形,频谱
(2)信号的SSB调制与解调
clearall;
closeall;
clc;
t0=0.15;
dt=0.0001;
t=[0:
dt:
1];
fc=250;
phi0=0;
ct=cos(2*pi*fc*t+phi0);%载波信号
fm=10;
fun=@(t)1.*(t>=0&t<=t0/3)+(-2).*(t>=t0/3&t<=2*t0/3)+0.*(t>=2*t0/3);
mt=fun(t);
mh=imag(hilbert(mt));
b=sin(2*pi*fc.*t)
ussb=mt.*ct-imag(hilbert(mt)).*b;
lssb=mt.*ct+imag(hilbert(mt)).*b;
figure
(1)
subplot(3,1,1),plot(t,mt),title('mt----调制信号')
subplot(3,1,2),plot(t,ussb),title('ussb----载波信号')
subplot(3,1,3),plot(t,lssb),title('lssb----已调信号')
dt=t
(2)-t
(1);%采样周期
f=1/dt;%采样频率(Hz)
X1=fft(ussb);%计算x的快速傅立叶变换X
X2=fft(lssb);
N=1/dt;
F1=X1(1:
N/2+1);%F(k)=X(k)(k=1:
N/2+1)
F2=X2(1:
N/2+1);
f=f*(0:
N/2)/N;%使频率轴f从零开始
figure(4)
subplot(3,1,1),plot(f,abs(F1)),holdon,title('ussb调制信号频谱图');plot(-f,abs(F1));xlim([-fc*2,fc*2]);
subplot(3,1,2),plot(f,abs(F2)),holdon,title('lssb');plot(-f,abs(F2));xlim([-fc*2,fc*2]);
xlabel('Frequency');
ylabel('|F(k)|')
(3)高斯白噪声
n0=30;
fc=250;
t=[0:
0.0005:
0.15];
u=cos(2*pi*fc.*t);
M=length(u);
x=sqrt(4*n0)*randn(1,M);
plot(t,x(1:
length(t)));
3.编程实现数字基带信号的码型的仿真
(1)单极性非归零码
functiony=snrz(x)
%本函数实现将输入的一段二进制代码编为相应的单极性非归零码输出
%输入x为二进制码,输出y为编好的码
%给出计算每一个码元的点数,因为我们只有用离散的点来得出连续的函数表示。
grid=300;
t=0:
1/grid:
length(x);
fori=1:
length(x),%计算码元的值
if(x(i)==1),%如果信息为1
forj=1:
grid,%该码元对应的点值取1
y((i-1)*grid+j)=1;
end
else
forj=1:
grid;%反之,信息为0,该码元对应的点值取0
y((i-1)*grid+j)=0;
end;end;end
y=[y,x(i)];
M=max(y);
m=min(y);
subplot(2,1,1);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
%采用title命令来实现标记出各码元对应的二进制信息
title('100110000101');
制与解调方式)
实例图
(2)双极性归零码:
源程序:
%双极性归零码
functiony=drz(x)
%本函数实现将输入的一段二进制代码编为相应的双极性归零码输出
%输入x为二进制码,输出y为编好的码
grid=300;
t=0:
1/grid:
length(x)%定义对应时间序列
fori=1:
length(x),%进行编码
if(x(i)==1),%如果信息为1
forj=1:
grid/2,
y(grid/2*(2*i-2)+j)=1;%定义前半时间为1
y(grid/2*(2*i-1)+j)=0;%定义后半时间为0
end
else
forj=1:
grid/2%反之,信息为0,该码元对应的点值取0
y(grid/2*(2*i-2)+j)=-1;%定义前半时间为-1
y(grid/2*(2*i-1)+j)=0;%定义后半时间为0
end;end;end
y=[y,x(i)];
M=max(y);
m=min(y);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
%采用title命令来实现标记出各码元对应的二进制信息
title('100110000101');
(3).Ami码
源程序
functiony=ami(x)
grid=300;
t=0:
1/grid:
length(x);
k=-1;%定义对应时间序列
fori=1:
length(x),%进行编码
if(x(i)==1),
k=-k;%如果信息为1
forj=1:
grid/2,
y(grid/2*(2*i-2)+j)=k;%定义前半时间为1
y(grid/2*(2*i-1)+j)=k;%定义后半时间为0
end
else
forj=1:
grid/2%反之,信息为0,该码元对应的点值取0
y(grid/2*(2*i-2)+j)=0;%定义前半时间为-1
y(grid/2*(2*i-1)+j)=0;%定义后半时间为0
end;end;end
y=[y,x(i)];
M=max(y);
m=min(y);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
%采用title命令来实现标记出各码元对应的二进制信息
title('100110000101');
(4).双相码
源程序
%双相码
functiony=mechester(x)
%本函数实现将输入的一段二进制代码编为相应的双相码输出
%输入x为二进制码,输出y为编好的码
grid=300;
t=0:
1/grid:
length(x)%定义对应时间序列
fori=1:
length(x),%进行编码
if(x(i)==1),%如果信息为1
forj=1:
grid/2,
y(grid/2*(2*i-2)+j)=1;%定义前半时间为1
y(grid/2*(2*i-1)+j)=0;%定义后半时间为0
end
else
forj=1:
grid/2%反之,信息为0,该码元对应的点值取0
y(grid/2*(2*i-2)+j)=1;%定义前半时间为1
y(grid/2*(2*i-1)+j)=0;%定义后半时间为0
end;end;end
y=[y,x(i)];
M=max(y);
m=min(y);
plot(t,y);
axis([0,i,m-0.1,M+0.1]);
%采用title命令来实现标记出各码元对应的二进制信息
title('100110000101');
4、利用SIMULINK实现数字调制与解调的仿真(选择两种调制与解调方式)
(1)2PSK调制仿真
1、参数设置:
载波f1(sinewave):
幅度为2,频率为1HZ,相位为0,采样周期为0.002。
载波f2(sinewave):
幅度为2,频率为2HZ,相位为pi,采样周期为0.002。
2、运行结果:
2PSK解调仿真
1、参数设置:
调制载波信号f1(modulator子系统中)频率由1hz改为100hz。
调制载波信号f2(modulator子系统中)频率由1hz改为100hz。
2PSK的抽样判决器参数设置与2FSK相同,低通滤波器和带通滤波器参数设置与2ASK和2FSK也相同,在此不作赘述。
2、运行结果
从图中可以看出,2PSK也是双极性信号系统,2PSK信号通过相干解调后,从噪声中分离出有用信号。
其中信号在通过抽样判决器后,信号延时了一个周期。
2PSK信号源功率谱密度
2PSK解调后信号功率谱密度
2PSK信号源与解调后信号序列比较
(2)2ASK的调制与解调仿真
2ASK调制仿真
正弦信号(sinewave)是载波信号,方波BernoulliBinaryGenerator代表信号源,载波和信号源相乘后就得到键控2ASK信号,Simulink的调制子系统Modulator模型图如下所示:
图3.22ASK信号调制子系统Modulator
1、参数设置:
图3.3正弦信号(载波)参数设置
载波:
幅度为2,频率为1HZ,相位为0,采样周期为0.002。
实际应用中载波信号频率很高,但为了在运行结果的波形图仿真中显示清晰,所以把频率调为1hz。
图3.4信号源的参数设置
信号源:
采样周期为1随机方波信号。
2、运行结果:
用simulink示波器直接观察出来的图是黑色背景,不便于后续应用和处理,特别是打印效果并不清晰,可以通过以下方式解决。
从示波器打开观察出来波形,在matlab中键入以下命令:
set(gcf,'menubar','figure');
set(0,'ShowHiddenHandles','on');
通过一系列波形参数设置后显示如下:
图3.52ASK信号调制各点的时间波形图
调制信号序列为1011011100……
3.1.32ASK解调仿真
2ASK调制后的信号通过信道进行相干解调,相干解调也叫同步解调,就是用已调信号恢复出载波——既同步载波。
再用载波和已调信号相乘,经过低通滤波器和抽样判决器恢复出S(t)信号,Simulink的解调子系统Demodulator模型图如下所示:
图3.62ASK信号解调子系统Demodulator
1、参数设置:
调制载波正弦信号(modulator子系统中)频率由1hz改为100hz.100hz可以看作实际应用中的高频载波。
一些模块比较简单(比如Product),参数设置取系统默认值,所以不再列出。
图3.7信道参数设置
信道:
信噪比(Eb/No)为50(db)。
图3.8100hz带通滤波器参数设置
图3.9低通滤波器参数设置
图3.10延时器参数设置
图3.11继电(采样)器参数设置
延时器与采样器构成抽样判决电器。
图3.12延时器参数设置
计算误码率时,为与解调后信号进行同步比较,需将信号源延时。
2、运行结果:
图3.132ASK信号解调的各点时间波形图
解调后信号序列为101101110……
图3.142ASK信号源功率谱密度
图3.152ASK解调后信号功率谱密度
图3.162ASK信号源与解调后信号序列比较
信号序列为101101110……
六心得体会
由于之前没有很深入的学习matlab,所以在这次的通信原理课程设计中遇到了很多大大小小的问题,在这里要感谢老师的悉心指导和同学的热心帮助。
在两周的课程设计中,我通过去图书馆翻阅资料,上网搜索资料,对matlab语言有了一定的了解,matlab语言的应用范围非常广,包括信号和图像处理,通讯,控制系统设计,测试和测量,财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱扩展了matlab环境,以解决这些应用领域内特定类型的问题。
Matlab自带函数很多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用自己编函数,这一点对程序非常有帮助,可以使程序简单运行效率高,节省很多时间。
编程中最头疼的就是调试程序了,又时候一个很小的错误要检查半天才能查出来,同时有些程序也是可以优化的,这就需要我们的耐心和细心。
在编程过程中,我与身边同学共同讨论,为对方查找错误,提示建议,在这个过程中我收获甚多,也培养了自己的合作精神。
本次通信原理小学期不仅