基于matlab的2PSK的系统仿真.docx
《基于matlab的2PSK的系统仿真.docx》由会员分享,可在线阅读,更多相关《基于matlab的2PSK的系统仿真.docx(15页珍藏版)》请在冰豆网上搜索。
基于matlab的2PSK的系统仿真
基于matlab的2PSK的系统仿真
基于matlab的2PSK的系统仿真
摘要:
Simulink是Mathworks公司推出的基于Matlab平台的著名仿真环境Simulin作为一种专业和功能强大且操作简单的仿真工具,目前已被越来越多的工程技术人员所青睐,它搭建积木式的建模仿真方式既简单又直观,而且已经在各个领域得到了广泛的应用。
本次课程设计是基于MATLAB的2PSK和2DPSK仿真,通过系统分析,步骤来完成本次设计任务。
通过课程设计从理论学习的轨道逐步引向实际应用,把理论上熟悉的定性分析、定量计算逐步和工程估算、实验调整等手段结合起来,掌握工程设计的步骤和方法,了解科学实验的程序和实施方法,为以后毕业设计和从事信息处理技术的实际工作打下基础。
图2-42PSK的相干解调原理图
图2-5相干解调中各点波形图
图中,假设相干载波的基准相位与2PSK信号的基准一致(通常默认为0相位)。
但是由于2PSK信号的载波回复过程中存在着180°的相位模糊,即恢复的本地载波与所需相干载波可能相同,也可能相反,这种相位关系的不确定性将会造成解调出的数字基带信号与发送的基带信号正好相反,即“1”变成“0”吗“0”变成“1”,判决器输出数字信号全部出错。
这种现象称为2PSK方式的“倒π”现象或“反相工作”。
2PSK信号在一个码元的持续时间Ts内可以表示为
u1T(t)发送“1”时
ST(t)=
uoT(t)=-u1T(t)发送“0”时
期中Acosωct0u1T(t)=
0其他
设发送端发出的信号如上式所示,则接收端带通滤波器输出波形y(t)为
[a+nc(t)]cosωct-ns(t)sinωct发送“1”时
y(t)=
[-a+nc(t)]cosωct-ns(t)sinωct发送“0”时
y(t)经过想干解调(相乘—低通)后,送入抽样判决器的输入波形为
a+nc(t)发送“1”时
x(t)=
-a+nc(t)发送“0”时
由于nc(t)是均值为0,方差为σ2的高斯噪声,所以x(t)的一维概率密度函数为
由最佳判决门限分析可知,在发送“1”和“0”概率相等时,即P
(1)=P(0)时,最佳门限b*=0.此时,发“1”而错判为“0”的概率为
P(0/1)=P(x≦0)=∫0-∞f1(x)dx=1/2erfc(
)
式中:
r=a2/2σ2n
同理,发“0而错判为“1”的概率为
P(1/0)=P(x>0)=∫0-∞f0(x)dx=1/2erfc(
)
故2PSK信号相干解调系统的总误码率为
Pe=P
(1)P(0/1)+P(0)P(0/1)=1/2erfc(
)
在大信噪比(r>>1)的条件下,上式可近似为
Pe≈e-r/2
2.基于matlab的2PSK的系统仿真
通过编写M文件程序:
2PSK调制解调程序及注释
clearall
closeall
i=10;
j=5000;
fc=4;%载波频率
fm=i/5;%码元速率
B=2*fm;
t=linspace(0,5,j);
a=round(rand(1,i));%随机序列,基带信号
figure(3);
stem(a);
st1=t;
forn=1:
10
ifa(n)<1;
form=j/i*(n-1)+1:
j/i*n
st1(m)=0;
end
else
form=j/i*(n-1)+1:
j/i*n
st1(m)=1;
end
end
end
figure
(1);
subplot(411);
plot(t,st1);
title('基带信号st1');
axis([0,5,-1,2]);
%由于PSK中的是双极性信号,因此对上面所求单极性信号取反来与之一起构成双极性码
st2=t;
fork=1:
j;
ifst1(k)>=1;
st2(k)=0;
else
st2(k)=1;
end
end;
subplot(412);
plot(t,st2);
title('基带信号反码st2');
axis([0,5,-1,2]);
st3=st1-st2;
subplot(413);
plot(t,st3);
title('双极性基带信号st3');
axis([0,5,-2,2]);
s1=sin(2*pi*fc*t);
subplot(414);
plot(s1);
title('载波信号s1');
e_psk=st3.*s1;
figure
(2);
subplot(511);
plot(t,e_psk);
title('e_2psk');
noise=rand(1,j);
psk=e_psk+noise;%加入噪声
subplot(512);
plot(t,psk);
title('加噪后波形');
psk=psk.*s1;%与载波相乘
subplot(513);
plot(t,psk);
title('与载波s1相乘后波形');
[f,af]=T2F(t,psk);%通过低通滤波器
[t,psk]=lpf(f,af,B);
subplot(514);
plot(t,psk);
title('低通滤波后波形');
form=0:
i-1;
ifpsk(1,m*500+250)<0;
forj=m*500+1:
(m+1)*500;
psk(1,j)=0;
end
else
forj=m*500+1:
(m+1)*500;
psk(1,j)=1;
end
end
end
subplot(515);
plot(t,psk);
axis([0,5,-1,2]);
title('抽样判决后波形')
2DPSK调制解调程序及注释
clearall
closeall
i=10;
j=5000;
fc=4;%载波频率
fm=i/5;%码元速率
B=2*fm;
t=linspace(0,5,j);
a=round(rand(1,i));
figure(4);
stem(a);
st1=t;
forn=1:
10
ifa(n)<1;
form=j/i*(n-1)+1:
j/i*n
st1(m)=0;
end
else
form=j/i*(n-1)+1:
j/i*n
st1(m)=1;
end
end
end
figure
(1);
subplot(321);
plot(t,st1);
title('绝对码');
axis([0,5,-1,2]);
b=zeros(1,i);%全零矩阵
b
(1)=a
(1);
forn=2:
10
ifa(n)>=1;
ifb(n-1)>=1
b(n)=0;
else
b(n)=1;
end
else
b(n)=b(n-1);
end
end
st1=t;
forn=1:
10
ifb(n)<1;
form=j/i*(n-1)+1:
j/i*n
st1(m)=0;
end
else
form=j/i*(n-1)+1:
j/i*n
st1(m)=1;
end
end
end
subplot(323);
plot(t,st1);
title('相对码st1');
axis([0,5,-1,2]);
st2=t;
fork=1:
j;
ifst1(k)>=1;
st2(k)=0;
else
st2(k)=1;
end
end;
subplot(324);
plot(t,st2);
title('相对码反码st2');
axis([0,5,-1,2]);
s1=sin(2*pi*fc*t);
subplot(325);
plot(s1);
title('载波信号s1');
s2=sin(2*pi*fc*t+pi);
subplot(326);
plot(s2);
title('载波信号s2');
d1=st1.*s1;
d2=st2.*s2;
figure
(2);
subplot(411);
plot(t,d1);
title('st1*s1');
subplot(412);
plot(t,d2);
title('st2*s2');
e_dpsk=d1+d2;
subplot(413);
plot(t,e_dpsk);
title('调制后波形');
noise=rand(1,j);
dpsk=e_dpsk+noise;%加入噪声
subplot(414);
plot(t,dpsk);
title('加噪声后信号');
dpsk=dpsk.*s1;%与载波s1相乘
figure(3);
subplot(411);
plot(t,dpsk);
title('与载波相乘后波形');
[f,af]=T2F(t,dpsk);%通过低通滤波器
[t,dpsk]=lpf(f,af,B);
subplot(412);
plot(t,dpsk);
title('低通滤波后波形');
st=zeros(1,i);%全零矩阵
form=0:
i-1;
ifdpsk(1,m*500+250)<0;
st(m+1)=0;
forj=m*500+1:
(m+1)*500;
dpsk(1,j)=0;
end
else
forj=m*500+1:
(m+1)*500;
st(m+1)=1;
dpsk(1,j)=1;
end
end
end
subplot(413);
plot(t,dpsk);
axis([0,5,-1,2]);
title('抽样判决后波形')
dt=zeros(1,i);%全零矩阵
dt
(1)=st
(1);
forn=2:
10;
if(st(n)-st(n-1))<=0&&(st(n)-st(n-1))>-1;
dt(n)=0;
else
dt(n)=1;
end
end
st=t;
forn=1:
10
ifdt(n)<1;
form=j/i*(n-1)+1:
j/i*n
st(m)=0;
end
else
form=j/i*(n-1)+1:
j/i*n
st(m)=1;
end
end
end
subplot(414);
plot(t,st);
axis([0,5,-1,2]);
title('码反变换后波形');
%利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
%脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。
function[f,sf]=T2F(t,st)
%ThisisafunctionusingtheFFTfunctiontocalculateasignal'sFourier
%Translation
%Inputisthetimeandthesignalvectors,thelengthoftimemustgreater
%than2
%Outputisthefrequencyandthesignalspectrum
dt=t
(2)-t
(1);
T=t(end);
df=1/T;
N=length(st);
f=-N/2*df:
df:
N/2*df-df;
sf=fft(st);
sf=T/N*fftshift(s);
用到的低通滤波器函数
function[t,st]=lpf(f,sf,B)
%Thisfunctionfilteraninputdatausingalowpassfilter
%Inputs:
f:
frequencysamples
%sf:
inputdataspectrumsamples
%B:
lowpass'sbandwidthwitharectanglelowpass
%Outputs:
t:
timesamples
%st:
outputdata'stimesamples
df=f
(2)-f
(1);
T=1/df;
hf=zeros(1,length(f));%全零矩阵
bf=[-floor(B/df):
floor(B/df)]+floor(length(f)/2);
hf(bf)=1;
yf=hf.*sf;
[t,st]=F2T(f,yf);
st=real(st);
用到的反傅立叶函数
%脚本文件F2T.m定义了函数F2T,计算信号的反傅立叶变换。
function[t,st]=F2T(f,sf)
%Thisfunctioncalculatethetimesignalusingifftfunctionfortheinput
%signal'sspectrum
df=f
(2)-f
(1);
Fmx=(f(end)-f
(1)+df);
dt=1/Fmx;
N=length(sf);
T=dt*N;
%t=-T/2:
dt:
T/2-dt;
t=0:
dt:
T-dt;
sff=fftshift(sf);
st=Fmx*ifft(sff);
产生随机信号,按流程图2-1所示顺序对每一模块编程后。
程序中注有需注意语句及解释。
运行程序,实现2PSK的调制与解调过程。
本次设计采用模拟调制法和相干解调法。
参考文献
[1]李白萍,吴冬梅.通信原理与技术[M].北京:
人民邮电出版社,2003
[2]樊昌信,曹丽娜.通信原理[M].北京:
国防工业出版社,2001
[3]曹志刚,钱亚生.现代通信原理[M].北京:
清华大学出版社,1992
[4]李明明,李白萍.电子信息类专业MATLAB实验教程[M].北京:
北京大学出版社,2011
[5]刘学勇.详解MATLAB/Simulink通信系统建模与仿真[M].北京:
电子工业出版社,2011