实验名称 4PSK通信系统的蒙特卡洛仿真.docx
《实验名称 4PSK通信系统的蒙特卡洛仿真.docx》由会员分享,可在线阅读,更多相关《实验名称 4PSK通信系统的蒙特卡洛仿真.docx(13页珍藏版)》请在冰豆网上搜索。
![实验名称 4PSK通信系统的蒙特卡洛仿真.docx](https://file1.bdocx.com/fileroot1/2023-2/9/a75be367-0e93-4eb0-b06d-6b151fe45e0d/a75be367-0e93-4eb0-b06d-6b151fe45e0d1.gif)
实验名称4PSK通信系统的蒙特卡洛仿真
通信系统的数字调制
实验名称:
4PSK通信系统的蒙特卡洛仿真
(包含在无线通信的数字调制技术实验里面)
一.实验目的
1)学会运用MATLAB分析通信系统。
2)了解蒙特卡洛仿真原理。
3)掌握调相原理。
4)学会分析系统的误码率及误比特率。
5)理论联系实际,能运用所学知识分析具体问题。
二.实验仪器:
1)PC机。
2)采用matlab或其它软件工具编程实现
三.实验意义
在数字通信中,有些场合可以不经过载波调制和解调过程而让基带信号直接进行传输。
称为基带传输系统。
与之对应,把包括了载波调制和解调过程的传输系统称为频带传输系统。
无论是基带传输还是频带传输,基带信号处理是必须的组成部分。
因此掌握数字基带传输的基本理论十分重要,它在数字通信系统中具有普遍意义。
PSK是利用载波的不同相位表示相应的数字信息。
对于M相相位调制来说M-2K,这里K是每个传输符号的信息比特数。
4PSK是M=4的载波相位调制。
蒙特卡洛法的实质是利用服从某种分布的随机数来模拟现实系统中可能出现的随机现象。
其基本思想是:
为了求解数学、物理、工程技术以及生产管理等方面的问题,首先建立一个概率模型或随机过程,使它的参数等于问题的解;然后通过对模型或过程的观察或抽样试验来计算所求随机参数的统计特征,最后给出所求解的近似值,解的精度可用估计值的标准误差来表示。
四.实验原理
1、移相键控
移相键控即受键控的载波相位调制是按基带脉冲改变的一种数字调制方式。
其中,四相移相键控制(4PSK)的应用广泛,它是用4种不同相位代表4种不同相位的信息,因此对于输入的二进制数字序列应该先分组,将每两个比特编为一组;然后用4种不同的相位对其表征。
例如,若输入的二进制数字信息序列为10110010…,则可将他们分成10,11,00,10,…,然后用4种不同的相位对其表征。
采用相位选择法产生4PSK信号,以实现4PSK调制器的设计。
2、MPSK信号
所谓多进制数字调制,就是利用多进制数字基带信号去调制高频载波的某个参量,如幅度、频率或相位的过程。
根据被调参量的不同,多进制数字调制可分为多进制幅度键控(MASK)、多进制频移键控(MFSK)以及多进制相移键控(MPSK或MDPSK)。
也可以把载波的两个参量组合起来进行调制,如把幅度和相位组合起来得到多进制幅相键控(MAPK)或它的特殊形式多进制正交幅度调制(MQAM)等。
由于多进制数字已调信号的被调参数在一个码元间隔内有多个取值,因此,与二进制数字调制相比,多进制数字调制有以下几个特点:
(1)在码元速率(传码率)相同条件下,可以提高信息速率(传信率),使系统频带利用率增大。
码元速率相同时,
进制数传系统的信息速率是二进制的
倍。
在实际应用中,通常取
,
为大于1的正整数。
(2)在信息速率相同条件下,可以降低码元速率,以提高传输的可靠性。
信息速率相同时,
进制的码元宽度是二进制的
倍,这样可以增加每个码元的能量,并能减小码间串扰影响等。
正是基于这些特点,使多进制数字调制方式得到了广泛的使用。
不过,获得以上几点好处所付出的代价是,信号功率需求增加和实现复杂度加大。
MPSK信号将M进制符号与M个载波相位一一对应,可以写成如下形式:
五、设计步骤
1、4PSK调相波的产生
当传双比特码元00时,发送起始相位为0的载波;
当传双比特码元10时,发送起始相位为π/2的载波;
当传双比特码元11时,发送起始相位为π的载波;
当传双比特码元01时,发送起始相位为3π/2的载波。
按这种定义方式定义的4PSK系统称π/2系统(也称A方式)。
对4PSK信号还有另外一种定义方式:
称π/4系统或B方式。
具体定义如下:
当传双比特码元00时,发送起始相位为45°的载波;
当传双比特码元10时,发送起始相位为135°的载波;
当传双比特码元11时,发送起始相位为225°的载波;
当传双比特码元01时,发送起始相位为315°的载波。
(1)调相法
调相法产生QPSK,由两路相互正交的2PSK相加构成。
串/并变换器将输入的二进制序列变成两路并行的双极性序列,将这两路信号分别进行2PSK调制后再相加,这样就得到的四相移相信号。
每一个支路信号的速率是原始基带信号速率的一半。
图1调相法
(2)相位选择法
用相位选择法产生QPSK信号。
四相载波发生器分别送出调相所需的四种不同相位的载波。
按照串/并变换器输出的双比特码元的不同,逻辑选相电路输出响应相位的载波。
图2相位调相法
(3)QPSK信号的解调
四相调相信号可以看作是两个正交2PSK信号的合成,所以它可以采用与2PSK信号相似的解调方法进行解调,即由两个2PSK信号相干解调器构成。
图3相干解调
2、蒙特卡洛仿真
4PSK信号采用相干解调时系统的误码率为
式中,
为信噪比。
多相制是一种频带利用率较高的高效率传输方式。
再加之有较好的抗噪声性能,因而得到广泛的应用,而MDPSK比MPSK用得更广泛一些。
fori=1:
length(SNRindB1),
[pb,ps]=cm_sm32(SNRindB1(i));
smld_bit_err_prb(i)=pb;
smld_symbol_err_prb(i)=ps;
end;
fori=1:
length(SNRindB2),
SNR=exp(SNRindB2(i)*log(10)/10);
theo_err_prb(i)=Qfunct(sqrt(2*SNR));
仿真比特和符号比特率,信噪比,理论比特误码率分别画出曲线。
六、设计结果及分析
1、4PSK调相波产生
图44PSK的调相波
2、蒙特卡洛仿真
图54PSK蒙特卡洛仿真
附:
程序代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%对M=4的PSK通信系统进行蒙特卡罗仿真%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clearall
echooff
SNRindB1=0:
2:
10;
SNRindB2=0:
0.1:
10;
fori=1:
length(SNRindB1),
[pb,ps]=cm_sm32(SNRindB1(i));%仿真比特和符号误码率
smld_bit_err_prb(i)=pb;
smld_symbol_err_prb(i)=ps;
end;
fori=1:
length(SNRindB2),
SNR=exp(SNRindB2(i)*log(10)/10);%信噪比
theo_err_prb(i)=Qfunct(sqrt(2*SNR));%理论比特误码率
end;
%%%%%%%随后绘图曲线%%%%%%%
semilogy(SNRindB1,smld_bit_err_prb,'*r');
hold
semilogy(SNRindB1,smld_symbol_err_prb,'Og');
semilogy(SNRindB2,theo_err_prb);
grid
xlabel('Eb/NoindB')
ylabel('errorprobability')
title('4PSK通信系统的蒙特卡洛仿真')
%gtext('(注:
“—”理论误码率;“*”误比特率;“o”误符号率)')
function[pb,ps]=cm_sm32(snr_in_dB)
N=10000;
E=1;
snr=10^(snr_in_dB/10);
sgma=sqrt(E/snr)/2;
s00=[10];
s01=[01];
s11=[-10];
s10=[0-1];
fori=1:
N,
temp=rand;
if(temp<0.25),
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<0.5),
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<0.75),
dsource1(i)=1;
dsource2(i)=0;
else
dsource1(i)=1;
dsource2(i)=1;
end;
end;
numofsymbolerror=0;
numofbiterror=0;
fori=1:
N,
n
(1)=gngauss(sgma);
n
(2)=gngauss(sgma);
if((dsource1(i)==0)&(dsource2(i)==0)),
r=s00+n;
elseif((dsource1(i)==0)&(dsource2(i)==1)),
r=s01+n;
elseif((dsource1(i)==1)&(dsource2(i)==0)),
r=s10+n;
else
r=s11+n;
end;
c00=dot(r,s00);
c01=dot(r,s01);
c10=dot(r,s10);
c11=dot(r,s11);
c_max=max([c00c01c10c11]);
if(c00==c_max)
decis1=0;decis2=0;
elseif(c01==c_max)
decis1=0;decis2=1;
elseif(c10==c_max)
decis1=1;decis2=0;
else
decis1=1;decis2=1;
end;
symbolerror=0;
if(decis1~=dsource1(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if(decis2~=dsource2(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if(symbolerror==1),
numofsymbolerror=numofsymbolerror+1;
end;
end;
ps=numofsymbolerror/N;
pb=numofbiterror/(2*N);
%function[pb,ps]=cm_sm32(snr_in_dB)
clearall
snr_in_dB=1
N=10000;
E=1;
snr=10^(snr_in_dB/10);
sgma=sqrt(E/snr)/2;
s00=[10];
s01=[01];
s11=[-10];
s10=[0-1];
fori=1:
N,
temp=rand;
if(temp<0.25),
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<0.5),
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<0.75),
dsource1(i)=1;
dsource2(i)=0;
else
dsource1(i)=1;
dsource2(i)=1;
end;
end;
numofsymbolerror=0;
numofbiterror=0;
fori=1:
N,
n
(1)=gngauss(sgma);
n
(2)=gngauss(sgma);
if((dsource1(i)==0)&(dsource2(i)==0)),
r=s00+n;
elseif((dsource1(i)==0)&(dsource2(i)==1)),
r=s01+n;
elseif((dsource1(i)==1)&(dsource2(i)==0)),
r=s10+n;
else
r=s11+n;
end;
c00=dot(r,s00);
c01=dot(r,s01);
c10=dot(r,s10);
c11=dot(r,s11);
c_max=max([c00c01c10c11]);
if(c00==c_max)
decis1=0;decis2=0;
elseif(c01==c_max)
decis1=0;decis2=1;
elseif(c10==c_max)
decis1=1;decis2=0;
else
decis1=1;decis2=1;
end;
symbolerror=0;
if(decis1~=dsource1(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if(decis2~=dsource2(i)),
numofbiterror=numofbiterror+1;
symbolerror=1;
end;
if(symbolerror==1),
numofsymbolerror=numofsymbolerror+1;
end;
end;
ps=numofsymbolerror/N;
pb=numofbiterror/(2*N);
function[y]=Qfunct(x)
y=(1/2)*erfc(x/sqrt
(2));
function[gsrv1,gsrv2]=gngauss(m,sgma)
ifnargin==0,
m=0;sgma=1;
elseifnargin==1,
sgma=m;m=0;
end;
u=rand;
z=sgma*(sqrt(2*log(1/(1-u))));
u=rand;
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);