QPSK通信系统的MonteCarlo仿真.docx
《QPSK通信系统的MonteCarlo仿真.docx》由会员分享,可在线阅读,更多相关《QPSK通信系统的MonteCarlo仿真.docx(29页珍藏版)》请在冰点文库上搜索。
QPSK通信系统的MonteCarlo仿真
QPSK通信系统的MonteCarlo仿真
实验报告
班级:
通信一班
*****荣林林089
李海强086
一、实验目的
一、提高独立学习的能力;
二、培育发觉问题、解决问题和分析问题的能力;
3、学习Matlab的利用;
4、把握4PSK通信系统的MonteCarlo仿真方式;
五、把握4PSK通信系统的的组成原理;
6、比较编码信号和为编码信号在随机信道中的传输,加深对纠错编码的明白得;
二、系统框图及编程原理
实验原理
PSK是利用载波的不同相位表示相应的数字信息。
关于二进制相位调制(M=2)来讲,两个载波相位是0和π。
关于M相相位调制来讲M=2k,那个地址k是每一个传输符号的信息比特数。
4PSK是M=4的载波相位调制。
那个地址,将理论过失概率与仿真的过失概率比较,进一步观看仿真与理论值之间的不同。
同时,用不同的裁决准那么对同意信号进行裁决。
并比较两种判别方式的不同。
一.QPSK调制原理
1.信号能量分析
一组M载波相位调制信号波形的一样表示式为
m=[0,M-1]
式中
是发送滤波器的脉冲形状,它决定了传输信号的频谱特性,A是信号的幅度。
注意到,PSK信号对所有m都具有相等的能量,即
代表每一个传输符号的能量。
2.噪声分析
传输信号的信道假设被加性噪声n(t)所污损,如此信号在接收端将产生误码。
因为n(t)是功率谱为
的白高斯进程的一个样本函数,因此噪声分量
确实是零均值高斯型的,即
3.信号裁决分析
最正确检测器将接收信号向量r投射到M个可能的传输信号向量{
}之一上去,并选取对应于最大投影的向量。
据此,取得相关准那么为
m=[0,M-1]
检测器观看到接收信号向量
,并计算r在4种可能的信号向量
上的投影。
依照选取对应于最大投影的信号点作为裁决,从而裁决出信号。
同时,检测器的裁决准那么也可采纳最小距离法,即利用星座图上符号间的距离进行裁决,从而取得裁决结果。
二.MonteCarlo仿真进程
仿真框图如图
(一)
图
(一)用于MonteCarlo仿真的4PSK系统的方框图
如下图,利用一个随机数发生器,产生(0,1)范围内的随机数。
再将那个范围分成四个相等的区间(0,),(,),(,),(,),这些子区间别离对应于00,01,11,10信息比特对,再用这些比特对来选择信号相位向量
。
加性噪声的同相分量和正交分量,在上面讨论过,即为零均值,方差为的统计独立的高斯随机变量。
在检测器观看到的接收信号向量,利用上面讨论的两种检测方式,取得裁决结果,并与传输符号作比较,最后对符号过失和比特过失计数
三、信道纠错编码
在随机信道中,错码的显现是随机的,且错码之间是统计独立的。
有高斯白噪声引发的错码就具有这种性质。
因此,当信道中加性噪声为这种噪声时,就成这种信道为随机信道。
由于发送码元是随机的,接收端是无法预知的,也无法识别其中有无错码,为此,可在发送端的信息码元序列中,增加一些监督码元,这些监督码元与信息码元之间有必然的关系,接收端利用这种关系,来发觉和纠正其中的可能存在的错码。
在信息码元中加入监督码元就称为过失操纵编码,也称纠错编码。
汉明编码确实是一种能够纠正一名错码,且编码效率较高的线性分组码。
具体的汉明编码进程要紧为:
以(7,4)汉明编码为例,发送端信息序列以4个一组,再加上3个监督位,组成7为发送信息。
其中,a0,a1,a2为监督位,a3,a4,a5,a6为信息序列。
用S1,S2,S3为三个校正因子,当[S1,S2,S3]=001,错码位置a0,
010,错码位置a1,
100,错码位置a2,
011,错码位置a3,
101,错码位置a4,
110,错码位置a5,
111,错码位置a6,
000,无错码。
在发送端编码时,信息位a3,a4,a5,a6的值决定于输入信号,因此他们是随机的,监督位的a2,a1,a0依照信息位的取值依照监督关系(即是校验因子的值全为零),能够解得:
a2=a6
a5
a4,
a1=a6
a5
a3,
a0=a6
a4
a3,
给出信息位后能够直接依照上式确信出监督位。
在接收端,收到每一个码组先计算出对应的校验位,然后判定错码情形,并对应校正过来。
四、实验进程中需要用到的一些子函数模块
一、高斯白噪声子函数
function[gsrv1,gsrv2]=gnguass(m,sgma)
ifnargin==0
m=0;
sgma=1;
elseifnargin==1
sgma=m;
m=0;
end
u=rand;
z=sgma*sqrt(2*log10(1/(1-u)));
u=rand;
gsrv1=m+z*cos(2*pi*u);
gsrv2=m+z*sin(2*pi*u);
函数评注:
编程产生正交两路高斯白噪声
二、映射检测比较子函数
(1)、采纳最大投影准那么
function[pb,ps]=cm_sm32(snr_in_dB)
%[pb,ps]=cm_sm32(snr_in_dB)
%pb误符号率
%ps误比特率
N=1000;%符号长度
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<,%Withprobability1/4,sourceoutputis"00."
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<,%Withprobability1/4,sourceoutputis"01."
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<,%Withprobability1/4,sourceoutputis"10."
dsource1(i)=1;
dsource2(i)=0;
else%Withprobability1/4,sourceoutputis"11."
dsource1(i)=1;
dsource2(i)=1;
end;
end;
numofsymbolerror=0;%检测错误并计算错误率
numofbiterror=0;
fori=1:
N,
[gsrv1,gsrv2]=gnguass(0,sgma);%挪用高斯噪声子函数
n
(1)=gsrv1;
n
(2)=gsrv2;
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);
(2)最小距离判别法(只需将上面红色部份改成下面程序即可)
c00=sqrt((r
(1)-s00
(1))^2+(r
(2)-s00
(2))^2);%最小距离裁决
c01=sqrt((r
(1)-s01
(1))^2+(r
(2)-s01
(2))^2);
c10=sqrt((r
(1)-s10
(1))^2+(r
(2)-s10
(2))^2);
c11=sqrt((r
(1)-s11
(1))^2+(r
(2)-s11
(2))^2);
c_min=min([c00c01c10c11]);
if(c00==c_min),
decis1=0;decis2=0;
elseif(c01==c_min),
decis1=0;decis2=1;
elseif(c10==c_min),
decis1=1;decis2=0;
else
decis1=1;decis2=1;
end;
三、实验内容及程序分析(以下程序皆以N=1000为例)
(一)、未加新年到纠错编码的4PSK调制系统
(1)、依照系统组成框图用MATLAB编写程序,并在每条语句后进行注释
(2)、最大投影点准那么进行裁决
A、计算方差sgma^2别离为0、、、时的符号过失概率和比特过失概率;
B、画出在在每种sgma^2是,在检测器输入端1000个接收到的信号加噪声的样本
C、别离画出数据点为1000、5000、10000时MonteCarlo仿真误比特率曲线和理论误比特率曲线,比较不同,分析数据点的数量对仿真结果的阻碍;
(3)、将检测器裁决准那么改成最下距离法,比较与上面结果的区别。
(4)、分析整个通信系统个组成部份的原理、分析实验结果、总结归纳。
相应程序如下:
A、计算方差sgma^2别离为0、、、时的符号过失概率和比特过失概率;
%函数分为四步第一步产生随机序列,进行4PSK映射。
%第二步:
挪用高斯高斯噪声子函数,产生正交两路高斯噪声,与输出符号序列相加
%第三步:
检测同意信号
%第四步:
计算误码率和误比特率
N=1000;%符号长度
E=1;%计算噪声方差
sgma=input('方差=');
sgma=sqrt(sgma);
%4PSK比特映射
s00=[10];
s01=[01];
s11=[-10];
s10=[0-1];
%第一步产生随机序列,进行4PSK映射。
生成随机信源
fori=1:
N,%生成随机信源
temp=rand;
if(temp<,%Withprobability1/4,sourceoutputis"00."
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<,%Withprobability1/4,sourceoutputis"01."
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<,%Withprobability1/4,sourceoutputis"10."
dsource1(i)=1;
dsource2(i)=0;
else%Withprobability1/4,sourceoutputis"11."
dsource1(i)=1;
dsource2(i)=1;
end;
end;
numofsymbolerror=0;%检测错误并计算错误率
numofbiterror=0;
%第二步:
挪用高斯高斯噪声子函数,产生正交两路高斯噪声,与输出符号序列相加
fori=1:
N,
[gsrv1,gsrv2]=gnguass(0,sgma);%挪用高斯噪声子函数
n
(1)=gsrv1;
n
(2)=gsrv2;
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=sqrt((r
(1)-s00
(1))^2+(r
(2)-s00
(2))^2);%最小距离裁决
c01=sqrt((r
(1)-s01
(1))^2+(r
(2)-s01
(2))^2);
c10=sqrt((r
(1)-s10
(1))^2+(r
(2)-s10
(2))^2);
c11=sqrt((r
(1)-s11
(1))^2+(r
(2)-s11
(2))^2);
c_min=min([c00c01c10c11]);
if(c00==c_min),
decis1=0;decis2=0;
elseif(c01==c_min),
decis1=0;decis2=1;
elseif(c10==c_min),
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);
pb
ps
结果统计如下:
sgma=0
最大投影准那么:
pb=ps=
最小距离裁决:
pb=ps=
sgma=
最大投影准那么:
pb=ps=
最小距离裁决:
pb=ps=
sgma=
最大投影准那么:
pb=ps=
最小距离裁决:
pb=ps=
sgma=
最大投影准那么:
pb=ps=
最小距离裁决:
pb=ps=
B、画出在在每种sgma^2是,在检测器输入端1000个接收到的信号加噪声的样本
函数如下:
%画星座图函数
sgma=input('方差=');%输入方差
sgma=sqrt(sgma);%求sgma
N=1000;%输入数据点数
E=1;%单个符号能量
%4PSK映射规那么%
s00=[10];
s01=[01];
s11=[-10];
s10=[0-1];
%化星座图
%产生信源序列%
fori=1:
N,%auniformrandomvariablebetween0and1
temp=rand;%随机序列
if(temp<,%Withprobability1/4,sourceoutputis"00."
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<,%Withprobability1/4,sourceoutputis"01."
dsource1(i)=0;
dsource2(i)=1;
elseif(temp<,%Withprobability1/4,sourceoutputis"10."
dsource1(i)=1;
dsource2(i)=0;
else%Withprobability1/4,sourceoutputis"11."
dsource1(i)=1;
dsource2(i)=1;
end;
end;
fori=1:
N,
%Thereceivedsignalatthedetector,fortheithsymbol,is:
[gsrv1,gsrv2]=gnguass(0,sgma);
n
(1)=gsrv1;
n
(2)=gsrv2;
if((dsource1(i)==0)&(dsource2(i)==0)),
r00=s00+n;
elseif((dsource1(i)==0)&(dsource2(i)==1)),
r01=s01+n;
elseif((dsource1(i)==1)&(dsource2(i)==0)),
r11=s10+n;
else
r10=s11+n;
end;
holdon;
plot(r00
(1),r00
(2),'*g',r01
(1),r01
(2),'*r',r11
(1),r11
(2),'*y',r10
(1),r10
(2),'*b');
title('sgma^2=');
end;
编程显现问题解决:
语句fori=1:
N,%auniformrandomvariablebetween0and1中红色逗号,在修改程序时,不警惕输入为中文输入形式下的:
“,“,从而致使在运行时报错:
”Undefinedfunctionormethod'r00'forinputargumentsoftype'double'.“
Sgma^2=0Sgma^2=
Sgma^2=Sgma^2=
C、别离画出数据点为1000、5000、10000时MonteCarlo仿真误比特率曲线和理论误比特率曲线,比较不同,分析数据点的数量对仿真结果的阻碍;
%对M=4的PSK通信系统进行蒙特卡罗仿真%
echoon
SNRindB1=0:
2:
10;
SNRindB2=0:
:
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)=erfc(sqrt(2*SNR));%理论比特误码率
end;
%随后画图曲线
semilogy(SNRindB1,smld_bit_err_prb,'*');
hold
semilogy(SNRindB1,smld_symbol_err_prb,'O');
semilogy(SNRindB2,theo_err_prb);
grid
xlabel('Eb/NoindB')
ylabel('errorprobability')
title('4PSK通信系统的蒙特卡洛仿真')
gtext('(注:
“—”理论误码率;“*”误比特率;“o”误符号率)')
左:
最大投影点准那么裁决右:
最小距离裁决
N=1000
N=5000
N=10000
N=100000
3、实验分析:
通过比较在不同长度符号数情形下别离采取最大投影点准那么裁决和最小距离裁决法的蒙特卡罗仿真所取得的误比特率曲线和理论误比特率曲线,能够取得如下结论:
(1)、最大投影点准那么裁决和最小距离裁决法判别方式的选取对误码率的阻碍相似。
(2)、随着数据点的数量的增加,接收端仿真结果误码率随之降低。
(二)信道纠错编码(7、4)汉明码+4PSK调制的通信系统
(1)、依照系统组成框图用MATLAB编写程序,并在每条语句后进行注释
(2)、比较编码信号与未编码信号在随机信道中的传输性能,分析实验结果,总结归纳
信道纠错编码(7、4)汉明码+4PSK调制的通信系统程序如下:
1、用到的相关子程序:
(1)、source子函数产生原始序列
%产生原始序列,N个
function[a]=source(N)
n=0:
N-1;
a=rand(1,N);
fori=1:
N
ifa(i)<
a(i)=0;
elsea(i)=1;
end
End
(2)、gnguass子函数产生两路高斯白噪声(如上)
(3)、Hanming子程序,将4为信息位,加上监督位,变成7位
%汉明编码,将4位变成7位
function[hanming,s1]=hanming(N)%hanming为7/4编码后的序列,s1为原始发送序列
s1=source(N);
temp=zeros(1,7);
hanming=zeros(1,N*7/4);
j=1;%hanming编码后序列角标操纵
fori=1:
4:
N
temp(4:
7)=s1(i:
i+3);
%temp
(1)=mod(temp(7)+temp(5)+temp(4),2);
%temp
(2)=mod(temp(7)+temp(6)+temp(4),2);
%temp(3)=mod(temp(7)+temp(6)+temp(5),2);
temp
(1)=xor(xor(temp(7),temp(5)),temp(4));
temp
(2)=xor(xor(temp(7),temp(6)),temp(4));
temp(3)=xor(xor(temp(7),temp(6)),temp(5));
hanming(j:
j+6)=temp;
j=j+7;
end
(4)、整个信道编码的子程序:
function[R,err_ps,err_pb]=hanm(N,snr_in_dB)
%N为发送序列长度,R为复数,接收序列对应的
M=N*7/4;
L=M/2