资源描述
课 程 设 计 说 明 书
设 计 及 说 明
主要结果
引言
数字信号的传输方式分为基带传输和带通传输,在实际应用中,大多数信道具有带通特性而不能直接传输基带信号。为了使数字信号在带通信道中传输,必须使用数字基带信号对载波进行调制,以使信号与信道的特性相匹配。这种用数字基带信号控制载波,把数字基带信号变换为数字带通信号的过程称为数字调制。通常使用键控法来实现数字调制,比如对载波的振幅、频率和相位进行键控。其次,还有4PSK、16QAM等调制方式。
1、任务和要求
1.1、课程设计目的
☞通过课程设计加深对《通信原理》课程基本内容的理解
☞学习与掌握通信系统仿真的基本方法
1.2、课程设计要求
1)完成2ASK、2FSK、2PSK、4PSK、16QAM五种调制系统的仿真,要求有调制、信道、解调三个部分;
2)信道为高斯信道;
3)系统参数可自行设置;
4)仿真结果要求给出已调信号时域波形和频谱,解调后信号的时域波形与频谱。
1.3、MATLAB仿真平台简介
MATLAB是矩阵实验室(Matrix Laboratory)的简称,是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的MATLAB爱好者都编写了一些经典的程序,用户可以直接进行下载就可以用。
2、2ASK调制解调原理与系统仿真
2.1、2ASK调制原理与仿真
数字幅度调制又称幅度键控(ASK),二进制幅度键控记作2ASK。2ASK是利用代表数字信息“0”或“1”的基带矩形脉冲去键控一个连续的载波,使载波时断时续地输出。有载波输出时表示发送“1”,无载波输出时表示发送“0”。2ASK信号可表示为
(2-1)
式中,为载波角频率,s(t)为单极性NRZ矩形脉冲序列
(2-2)
其中,g(t)是持续时间、高度为1的矩形脉冲,常称为门函数;为二进制数字
(2-3)
2ASK/OOK信号的产生方法通常有两种:模拟调制(相乘器法)和键控法。本课程设计运用模拟幅度调制的方法,用乘法器实现。相应的调制如图2-3:
乘法器
图2-3模拟相乘法
调制代码:
clear; %清除空间变量
m=[1 0 1 1 0 1 1 0]; %数字信号序列
Lm=length(m); %序列的长度
F=150; %数字信号的带宽
f=600; %正弦载波信号的频率
A=1; %载波的幅度
Q=f/F; %频率比,即一个码元宽度中的正弦周期个数,为适配下面滤波器参数%%选%%取,推荐将Q 设为
Q>=1/3
M=500; %一个正弦周期内的采样点数
t=(0:M-1)/M/f; %一个正弦信号周期内的时间
carry1=repmat(A*sin(2*pi*f*t),1,Q); %一个码元宽度内的正弦载波信号
Lcarry1=length(carry1); %一个码元宽度内的信号长度
carry2=kron(ones(size(m)),carry1); %载波信号
ask=kron(m,carry1); %调制后的信号
V=0.002;
ask1=imnoise(ask,'gaussian',0,V); %加高斯白噪声后的已调信号
Fask=fft(ask); %对信号进行傅里叶变换
Fask=abs(Fask(1:length(Fask)/2+1)); %已调信号频谱
f1=(0:length(Fask)-1)*f/length(Fask)/2; %已调信号频谱带宽
N=length(ask); %长度
tau=(0:N-1)/(M-1)/f; %时间
Tmin=min(tau); %最小时刻
Tmax=max(tau); %最大时刻
T=ones(size(carry1)); %一个数字信号‘1’
dsig=kron(m,T); %数字信号波形
subplot(2,2,1) %子图分割
plot(tau,dsig),title('数字信号波形') %画出数字信号的波形图
grid on
axis([Tmin Tmax -0.2 1.2]) %设置坐标范围
subplot(2,2,2) %子图分割
plot(tau,carry2),title ('载波波形') %画出载波波形
grid on
axis([Tmin Tmax -1.2*A 1.2*A]) %设置坐标范围
subplot(2,2,3),plot(tau,ask) %画出调制后的波形
title('调制信号') %子图分割
grid on
axis([Tmin Tmax -1.2*A 1.2*A]) %设置坐标范围
subplot(224);plot(f1,Fask),title('已调信号频谱');
figure(2)
subplot(111),plot(tau,ask1) %画出调制加噪波形
title('调制后加噪声波形');grid on
axis([Tmin Tmax -1.2*A 1.2*A]) %设置坐标范围
运行结果:
信号经过信道后,会受到噪声的干扰,假设信道噪声为高斯白噪声。
信号加噪后波形:
2.2、2ASK解调原理与仿真
2ASK有两种基本解调方法:相干解调法(同步检测法)和非相fc
干解调法(包络检波法)。相干解调需要将载频位置的已调信号频谱重新搬回原始基带位置,因此用相乘器与载波相乘来实现。为确保无失真还原信号,必须在接收端提供一个与调制载波严格同步的本地载波,这是整个解调过程能否顺利完好进行的关键。解调过程如图5所示。
S( t )
定时脉冲
带通
相乘
低通
抽样
判决
eo( t )
cosωc t
2fs
图5 相干解调
带通
整流
低通
抽样判决
判决
定时脉冲
S( t )
eo( t )
a
b
c
d
包络检波器通常由整流器和低通滤波器组成,可以直接从已调波中提取原始基带信号,结构简单,如图6所示。经过各个模块后波形变化如图7所示。
图6 非相干解调
图7 非相干解调过程的时间波形
本实验采用非相干解调方式。
解调代码:
clear; %清除空间变量
m=[1 0 1 1 0 1 1 0]; %数字信号序列
Lm=length(m); %序列的长度
F=150; %数字信号的带宽
f=600; %正弦载波信号的频率
A=1; %载波的幅度
Q=f/F; %频率比即一个码元宽度中的正弦周期个数,为适配下面滤波器参数选%取
M=500; %一个正弦周期内的采样点数
t=(0:M-1)/M/f; %一个正弦信号周期内的时间
carry1=repmat(A*sin(2*pi*f*t),1,Q); %一个码元宽度内的正弦载波信号
Lcarry1=length(carry1); %一个码元宽度内的信号长度
carry2=kron(ones(size(m)),carry1); %载波信号
ask=kron(m,carry1); %调制后的信号
V=0.002;
ask1=imnoise(ask,'gaussian',0,V); %加高斯白噪声后的已调信号
sig_mul=ask.*carry2; %已调信号与载波信号相乘
N=length(ask); %长度
tau=(0:N-1)/(M-1)/f; %时间
Tmin=min(tau); %最小时刻
Tmax=max(tau); %最大时刻
T=ones(size(carry1)); %一个数字信号‘1’
dsig=kron(m,T); %数字信号波形
Fask=fft(ask); %对信号进行傅里叶变换
Fask=abs(Fask(1:length(Fask)/2+1)); %已调信号频谱
f1=(0:length(Fask)-1)*f/length(Fask)/2; %已调信号频谱带宽、
%Butterworth 模拟低通滤波器设计
%获得Butterworth 模拟低通原型滤波器的阶数及3dB 截止频率
[Ord,omega_c]=buttord(4*pi*f*0.6,4*pi*f*0.8,2,30,'s');
%由原型滤波器向实际滤波器转换,获得滤波器的分子,分母系数
[num,den]=butter(Ord,omega_c,'s');
h=tf(num,den); %获得滤波器传递函数%滤波
x=lsim(h,sig_mul,tau); %运用模拟滤波器对信号进行滤波
Fx=fft(x); %对信号进行傅里叶变换
Fx=abs(Fx(1:length(Fx)/2+1)); %解调信号频谱
f1=(0:length(Fx)-1)*f/length(Fx)/2; %解调信号频谱带宽
subplot(3,2,2) %子图分割
plot(tau,x),title('解调输出波形') %画出滤波后的波形
grid on %添加网格
axis([Tmin Tmax -0.3 0.8]) %设置坐标范围
subplot(323);
plot(f1,Fx),title('解调信号频谱'); %解调信号频谱
grid on %添加网格
axis([Tmin Tmax -0.3 0.8]) %设置坐标范围
th=0.25; %抽样判决的阈值设置
t_judge=(0:Lm-1)*Lcarry1+Lcarry1/2; %抽样判决点的选取
y=(x(t_judge))'; %抽样判决时刻时的信号值
y_judge=1*(y>=th)+0*(y<=th); %抽样判决信号值的0 阶保持
y_value=kron(y_judge,ones(size(carry1))); %抽样判决后的数字信号波形
n_tau=tau+0.5/F; %抽样判决后的信号对应的时间
subplot(3,2,4) %子图分割
plot(n_tau,y_value), title('抽样判决后的数字信号波形')%画出抽样判决%后%%的数字%%信号波形
axis([min(n_tau) max(n_tau) -0.2 1.2]) %设置坐标范围
grid on
subplot(3,2,5) %子图分割
plot(tau,dsig),title('原始信号波形与解调后的信号作对比') %画出原始%%信号波形与%解调后的信号作对比
axis([Tmin Tmax -0.2 1.2]) %设置坐标范围
grid on %添加网格
subplot(321),plot(tau,sig_mul)
title('已调信号与载波信号相乘波形')%已调信号与%载波信号相乘波形
grid on
axis([Tmin Tmax -1.2*A 1.2*A]) %设置坐标范围
运行结果:
分析结果:解调信号的频谱没出来,检查代码终究还是没找到问题所在。解调抽样后恢复原二进制序列。
3、2FSK调制解调原理与系统仿真
3.1、2FSK调制原理
2FSK是利用数字基带信号控制在波的频率来传送信息。例如,1码用频率f1来传输,0码用频率f2来传输,而其振幅和初始相位不变。故其表示式为:
式中,假设码元的初始相位分别为和;和为两个不同的码元的角频率;幅度为A为一常数,表示码元的包络为矩形脉冲。
2FSK信号的产生方法有两种:
(1) 模拟法,即用数字基带信号作为调制信号进行调频。如图1-1(a)所示。
(2) 键控法,用数字基带信号及其反相分别控制两个开关门电路,以此对两个载波发生器进行选通。如图1-1(b)所示。
这两种方法产生的2FSK信号的波形基本相同,只有一点差异,即由调频器产生的2FSK信号在相邻码元之间的相位是连续的,而键控法产生的2FSK信号,则分别有两个独立的频率源产生两个不同频率的信号,故相邻码元的相位不一定是连续的。
(a) (b)
2FSK信号产生原理图
由键控法产生原理可知,一位相位离散的2FSK信号可看成不同频率交替发送的两个2ASK信号之和,即
其中是脉宽为的矩形脉冲表示的NRZ数字基带信号。
其中,为的反码,即若,则;若,则。
2、2FSK信号的频谱特性:
由于相位离散的2FSK信号可看成是两个2ASK信号之和,所以,这里可以直接应用2ASK信号的频谱分析结果,比较方便,即
2FSK信号带宽为 式中,是基带信号的带宽。
3.2、2FSK解调原理
2FSK的解调方法有包络检波法、相干检波法、过零检测法、差分检测法,本实验用到相干检测法。
相干检测法原理:相干检测的具体解调电路是同步检波器,原理框图如下图所示。图中两个带通滤波器的作用同于包络检波法,起到分路作用。它们的输出分别与相应的同步相干载波相乘,再分别经低通滤波器滤掉二倍频信号,取出含基带数字信息的低频信号,抽样判决器在抽样脉冲到来时对两个低频信号的抽样值v1、v2进行比较判决(判决规则同于包络检波法),即可还原出基带信号。
假设信道噪声为高斯白噪声。
2FSK调制解调代码:
clear all
close all
i=10; %基带信号码元数
j=5000;
a=round(rand(1,i)); %产生随机序列
t=linspace(0,5,j);
f1=10; %载波1频率
f2=5; %载波2频率
fm=i/5; %基带信号频率
B1=2*f1; %载波1带宽
B2=2*f2; %载波2带宽
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%产生基带信号
st1=t;
for n=1:10
if a(n)<1;
for m=j/i*(n-1)+1:j/i*n
st1(m)=0;
end
else
for m=j/i*(n-1)+1:j/i*n
st1(m)=1;
end
end
end
st2=t;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%基带信号求反
for n=1:j;
if st1(n)>=1;
st2(n)=0;
else
st2(n)=1;
end
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%载波信号
s1=cos(2*pi*f1*t)
s2=cos(2*pi*f2*t)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调制
F1=st1.*s1; %加入载波1
F2=st2.*s2; %加入载波2
fsk=F1+F2; %fsk信号
nosie=rand(1,j); %高斯噪声
fsk1=fsk+nosie; %fsk信号加高斯白噪声
Ffsk1=fft(fsk1); %对信号进行傅里叶变换
%%%%%%%%%%%%%%%%%%%%已调信号加噪声后的频谱
Ffsk1=abs(Ffsk1(1:length(Ffsk1)/2+1));
%%%%%%%%%%%%%已调信号加噪声信号后的频谱带宽
f3=(0:length(Ffsk1)-1)*fm/length(Ffsk1)/2
subplot(421);plot(t,st1);title('基带信号');%显示基带波形
axis([0,5,-1,2]);
subplot(422);plot(t,st2);title('基带信号反码');
axis([0,5,-1,2]);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%载波信号
s1=cos(2*pi*f1*t) %载波S1
s2=cos(2*pi*f2*t) %载波S2
subplot(423),plot(s1);title('载波信号1'); %显示载波波形
subplot(424),plot(s2);title('载波信号2');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%调制
F1=st1.*s1; %加入载波1
F2=st2.*s2; %加入载波2
subplot(425); %显示载波1与基带信号相乘波形
plot(t,F1);title('s1*st1');
subplot(426); %显示载波2与反基带信号相乘波形
plot(t,F2);title('s2*st2');
fsk=F1+F2;
Ffsk=fft(fsk); %对信号进行傅里叶变换
Ffsk=abs(Ffsk(1:length(Ffsk)/2+1)); %已调信号频谱
f=(0:length(Ffsk)-1)*fm/length(Ffsk)/2; %已调信号频谱带宽
subplot(427);plot(t,fsk);title('2FSK信号')
subplot(428),plot(f,Ffsk),title('已调信号频谱');
figure(2);
subplot(321);plot(t,fsk1);
title('fsk信号加高斯白噪声输出信号')
subplot(322),plot(f3,Ffsk1),title('调制信号加高斯噪声后频%谱%')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%相干解调
st11=fsk1.*s1; %与载波1相乘
[f,sf1] = t2f(t,st11); %通过低通滤波器
[t,st11] = lpf(f,sf1,2*fm);
subplot(323);plot(t,st11);
title('fsk与载波1相乘后波形');
st22=fsk1.*s2; %与载波2相乘
[f,sf22] = t2f(t,st22); %通过低通滤波器
[t,st22] = lpf(f,sf22,2*fm);
subplot(324);plot(t,st22);
title('fsk与载波2相乘后波形');
for m=0:i-1;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%抽样判决
if st11(1,m*500+250)<0.25;
for j=m*500+1:(m+1)*500;
at(1,j)=0;
end
else
for j=m*500+1:(m+1)*500;
at(1,j)=1;
end
end
end;
subplot(325);plot(t,at);axis([0,5,-1,2]); %显示波形
title('抽样判决后波形')
subplot(326);plot(t,st1);title('原基带信号');
axis([0,5,-1,2]);
运行结果:
调制输出:
加噪后解调输出:
4、2PSK调制解调原理与系统仿真
4.1、2PSK调制原理与仿真
当相移常数Kp=π时,
当基带数字信号采用幅度为1宽度为TS的矩形脉冲的双极性非归零码表示时,时域表示式为
2PSK信号波形
2PSK信号的调制原理框图
2PSK调制代码:
clear all; %清除
close all; %关闭窗口
fs=8e5; %抽样频率
fm=20e3; %基带频率
n=2*(6*fs/fm);
final=(1/fs)*(n-1);
fc=2e5; %载波频率
t=0:1/fs:(final);
Fn=fs/2; %耐奎斯特频率
%用正弦波产生方波
twopi_fc_t=2*pi*fm*t;
A=1; %方波幅度
phi=0;
x = A * cos(twopi_fc_t + phi); % 方波
am=1;
x(x>0)=am;
x(x<0)=-1;
subplot(311); %显示基带信号图像
plot(t,x);
axis([0 2e-4 -2 2]); %坐标范围
title('基带信号');
grid on %画网格
car=sin(2*pi*fc*t); %载波
psk=x.*car; %载波调制
Fpsk=fft(psk); %对信号进行傅里叶变换
Fpsk=abs(Fpsk(1:length(Fpsk)/2+1)); %已调信号频谱
f=(0:length(Fpsk)-1)*fs/length(Fpsk)/2; %已调信号频谱带宽
subplot(312); %显示psk调制信号
plot(t,psk);
axis([0 200e-6 -2 2]);
title('PSK信号');
grid on;
subplot(313); %显示psk调制信号频谱
plot(f,Fpsk);
title('PSK信号频谱'); grid on;
运行结果:
4.2、2PSK解调原理与仿真
2psk调制器可以采用相乘器,也可以采用相位选择器就模拟调制法而言,与产生2ASK信号的方法比较,只是对s(t)要求不同,因此2PSK信号可以看作是双极性基带信号作用下的DSB调幅信号。而就键控法来说,用数字基带信号s(t)控制开关电路,选择不同相位的载波输出,这时s(t)为单极性NRZ或双极性NRZ脉冲序列信号均可。 2PSK信号属于DSB信号,它的解调,不再能采用包络检测的方法,只能进行相干解调。
2PSK解调原理框图
由于PSK信号的功率谱中五载波分量,所以必须采用相干解调的方式。在相干解调中,如何得到同频同相的本地载波是个关键问题。只有对PSK信号进行非线性变换,才能产生载波分量。2PSK信号经过带通滤波器得到有用信号,经相乘器与本地载波相乘再经过低通滤波器得到低频信号v(t),再经抽样判决得到基带信号。
信号经过信道,受到信道噪声干扰,假设噪声为高斯白噪声。
解调代码:
clear all; close all;
fs=8e5; %抽样频率
fm=20e3; %基带频率
n=2*(6*fs/fm);
final=(1/fs)*(n-1);
fc=2e5; % 载波频率
t=0:1/fs:(final);
Fn=fs/2; %耐奎斯特频率
%用正弦波产生方波
twopi_fc_t=2*pi*fm*t;
A=1; %方波幅度
phi=0;
x = A * cos(twopi_fc_t + phi); % 方波
am=1;
x(x>0)=am;
x(x<0)=-1;
car=sin(2*pi*fc*t); %载波
psk=x.*car; %载波调制
vn=0.1;
noise=vn*(randn(size(t))); %产生噪音
subplot(211); plot(t,noise); grid on; title('噪音信号');
axis([0 .2e-3 -1 1]);
pskn=(psk+noise); %调制后加噪
Fpskn=fft(pskn); %对信号进行傅里叶变换
Fpskn=abs(Fpskn(1:length(Fpskn)/2+1));%已调信号加噪声后的频谱
%已调信号加噪声信号后的频谱带宽
f1=(0:length(Fpskn)-1)*fs/length(Fpskn)/2
subplot(212); plot(t,pskn); axis([0 200e-6 -2 2]);
title('加噪后信号'); grid on;
figure(2);
subplot(321); plot(f1,Fpskn); title('psk加噪后信号频谱');
grid on; %画格子
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%带通滤波
fBW=40e3;
f=[0:3e3:4e5];
w=2*pi*f/fs;
z=exp(w*j);
BW=2*pi*fBW/fs;
a=.8547;%BW=2(1-a)/sqrt(a)
p=(j^2*a^2);
gain=.135;
Hz=gain*(z+1).*(z-1)./(z.^2-(p));
%Hz(Hz==0)=10^(8);%avoid log(0)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%滤波器系数
a=[1 0 0.7305];%[1 0 p]
b=[0.135 0 -0.135];%gain*[1 0 -1]
fpskn=filter(b,a,pskn);
subplot(322); plot(t,fpskn); axis([0 100e-6 -2 2]);
title('通过带通滤波后输出'); grid on;
cm=fpskn.*car; %解调
subplot(323); plot(t,cm); axis([0 100e-6 -2 2]);
grid on; title('通过相乘器后输出');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%低通滤波器
p=0.72;
gain1=0.14;%gain=(1-p)/2
Hz1=gain1*(z+1)./(z-(p));
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%滤波器系数
a1=[1 -0.72];%(z-(p))
b1=[0.14 0.14];%gain*[1 1]
so=filter(b1,a1,cm);
so=so*10;%add gain
so=so-mean(so);%removes DC component
subplot(324); plot(t,so); axis([0 6e-4 -3.5 3.5]);
title('通过低通滤波器后输出'); grid on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%比较
High=2.5;
Low=-2.5;
vt=0;
展开阅读全文