二进制基带通信系统蒙特卡洛仿真matlab实现.docx
《二进制基带通信系统蒙特卡洛仿真matlab实现.docx》由会员分享,可在线阅读,更多相关《二进制基带通信系统蒙特卡洛仿真matlab实现.docx(9页珍藏版)》请在冰豆网上搜索。
二进制基带通信系统蒙特卡洛仿真matlab实现
一
clc;
clearall;
ts=0.0001;fc=25;
t=[-0.05:
ts:
0.05];
df=0.02;
ift<1&t>=0.1;
m=t;
elseift>=1&t<1.9;
m=-t+2;
elset>=1.9&t<0.1;
m=0.1;
end
c=cos(2*pi*fc*t);
m_n=m/max(abs(m));
u=m_n*max(abs(m)).*c;
s=u.*c;
f=-10:
df:
10;
subplot(4,1,1);plot(t,u);plot(t,u);title('解调信号');xlabel('t');ylabel('幅度');
subplot(4,1,2);plot(f,abs(fftshift(u)));title('解调信号频谱');xlabel('t');ylabel('幅度');
subplot(4,1,3);plot(t,s);title('已调信号');xlabel('t');ylabel('幅度');
subplot(4,1,4);plot(f,abs(fftshift(s)));title('已调信号频谱');xlabel('t');ylabel('幅度');
实验二二进制基带通信系统的蒙特卡洛仿真
一、实验目的
1、理解蒙特卡洛仿真方法的原理;
2、掌握使用蒙特卡洛法仿真通信系统的方法。
二、实验内容
1、用蒙特卡洛法仿真使用单极性信号的二进制基带通信系统,绘制误码率与信噪比的关系曲线图;
2、用蒙特卡洛法仿真使用双极性信号的二进制基带通信系统,绘制误码率与信噪比的关系曲线图。
三、实验原理
1、蒙特卡洛仿真的基本原理
由概率定义知,某事件的概率可以用大量试验中该事件发生的频率来估算,当样本容量足够大时,可以认为该事件的发生频率即为其概率。
因此,可以先对影响其可靠度的随机变量进行大量的随机抽样,然后把这些抽样值一组一组地代入功能函数式,确定结构是否失效,最后从中求得结构的失效概率。
蒙特卡罗法正是基于此思路进行分析的。
设有统计独立的随机变量Xi(i=1,2,3,…,k),其对应的概率密度函数分别为fx1,fx2,…,fxk,功能函数式为Z=g(x1,x2,…,xk)。
首先根据各随机变量的相应分布,产生N组随机数x1,x2,…,xk值,计算功能函数值Zi=g(x1,x2,…,xk)(i=1,2,…,N),若其中有L组随机数对应的功能函数值Zi≤0,则当N→∞时,根据伯努利大数定理及正态随机变量的特性有:
结构失效概率,可靠指标。
从蒙特卡罗方法的思路可看出,该方法回避了结构可靠度分析中的数学困难,不管状态函数是否非线性、随机变量是否非正态,只要模拟的次数足够多,就可得到一个比较精确的失效概率和可靠度指标。
特别在岩土体分析中,变异系数往往较大,与JC法计算的可靠指标相比,结果更为精确,并且由于思路简单易于编制程序。
2、蒙特卡洛仿真的工作过程
在解决实际问题的时候应用蒙特·卡罗方法主要有两部分工作:
·用蒙特卡罗方法模拟某一过程时,需要产生各种概率分布的随机变量。
·用统计方法把模型的数字特征估计出来,从而得到实际问题的数值解。
四、实验方法
1、第一个实验内容的实验方法
①实验框图如下:
②实验方法
第一步:
先产生一个等概率出现并且统计独立的二进制0和1的序列作为数据源。
方法是:
用一个“均匀分布随机数产生器”产生在(0,1)范围均匀分布的随机数s,送到“二进制数据源”进行处理,如果输入的随机数在(0,0.5)以内,“二进制数据源”的输出就是0;否则输入为1。
设产生的信号比特能量为Eb。
第二步:
仿真产生信道上的加性高斯噪声。
方法是:
利用“高斯分布随机数产生器”分别产生一个均值为零,方差为σ2=EbN0/2的高斯分布随机数n,这个随机数将加在输入的二进制数据序列上。
为了方便,我们将信号比特能量归一化,即设Eb=1。
这样一来,信噪比SNR(定义为Eb/N0)就等于1/(2σ2)。
第三步:
仿真产生接收的随机变量r,它构成了“检测器”(即代表采样判决器)的输入。
由第一步和第二步可知,r=s+n。
第四步:
“检测器”(即采样判决器)对输入的r进行判决,如果r>0.5,则输出为1,如果r<0.5,则输出为零。
第五步:
计算误码率,方法是:
将“检测器”的输出与“二进制数据源”的发送序列进行逐位比较,如果对应位的值不同,则差错计数器(表示比特差错计数)的值加一。
全部比较完后,计算误码率,计算公式为:
Pe=差错计数器值/发送序列的全部比特数N。
第六步:
设置不同的SNR(即改变N0的值),重复以上的步骤,得到不同SNR下的误码率。
第七步:
至少得到20个不同的SNR下的误码率后,绘制误码率与信噪比的关系曲线图,并在图上同时画出理论曲线图。
曲线图应该与下图类似(采用对数坐标系)。
2、第二个实验内容的实验方法
①实验框图同第一个实验,只是“二进制数据源”的输出是±1。
②实验方法
第一步:
先产生一个等概率出现并且统计独立的二进制0和1的序列作为数据源。
方法是:
用一个“均匀分布随机数产生器”产生在(0,1)范围均匀分布的随机数s,送到“二进制数据源”进行处理,如果输入的随机数在(0,0.5)以内,“二进制数据源”的输出就是-1;否则输入为1。
设产生的信号比特能量为Eb。
第二步:
仿真产生信道上的加性高斯噪声。
方法是:
利用“高斯分布随机数产生器”分别产生一个均值为零,方差为σ2=EbN0/2的高斯分布随机数n,这个随机数将加在输入的二进制数据序列上。
为了方便,我们将信号比特能量归一化,即设Eb=1。
这样一来,信噪比SNR(定义为Eb/N0)就等于1/(2σ2)。
第三步:
仿真产生接收的随机变量r,它构成了“检测器”(即代表采样判决器)的输入。
由第一步和第二步可知,r=s+n。
第四步:
“检测器”(即采样判决器)对输入的r进行判决,如果r>0,则输出为1,如果r<0,则输出为-1。
第五步:
计算误码率,方法是:
将“检测器”的输出与“二进制数据源”的发送序列进行逐位比较,如果对应位的值不同,则差错计数器(表示比特差错计数)的值加一。
全部比较完后,计算误码率,计算公式为:
Pe=差错计数器值/发送序列的全部比特数N。
第六步:
设置不同的SNR(即改变N0的值),重复以上的步骤,得到不同SNR下的误码率。
第七步:
至少得到20个不同的SNR下的误码率后,绘制误码率与信噪比的关系曲线图,并在图上同时画出理论曲线图。
曲线图应该与下图类似(采用对数坐标系)。
五、Matlab源程序及仿真结果
1、单极性信号:
(1)代码如下
k=20000;%k表示产生的随机数的个数
E=1;%E表示比特能量,进行归一化,设为1
forj=1:
30%产生30个不同的N
N(j)=1/(10^(0.1*j));%设定N的值
d(j)=sqrt(E*N(j)/2);%标准差
count=0;
m=rand(1,k);%产生k个在(0,1)之间的均匀分布的随机数
fori=1:
k
if(m(i)>0)&&(m(i)<0.5)
s(i)=0;
else
s(i)=1;
end
end%根据产生的均匀随机数产生二进制数据源s
n=random('Normal',0,d(j),1,k);%产生k个均值为0标准差为d(j)的高斯分布随机数n
r=s+n;%r为检测器数据输入
fori=1:
k
ifr(i)>0.5
t(i)=1;
else
t(i)=0;
end
end%对检测器输出的数据进行判决,输出t
t;
fori=1:
k
ifs(i)~=t(i)
count=count+1;
end
end%将检测器输出的数据t与数据源数据s比较,计算错误的比特个数
p1(j)=count/k%计算误码率
x(j)=10*log10(1/(2*d(j)^2))%将信噪比表示为对数形式,单位为db
p2(j)=0.5*erfc(1/(2*sqrt
(2)*d(j)))%理论上计算单极性信号误码率的公式
end
semilogy(x,p1,'*');%绘制实验中测得的误码率与信噪比的曲线图
holdon
semilogy(x,p2,'g');%绘制理论值误码率与信噪比的曲线图
axis([015,1e-61])
legend('仿真数据','理论曲线')
title('蒙特卡洛仿真单极性误码率波形');
(2)仿真图形如下:
2双极性信号:
(1)代码如下
k=20000%k表示产生的随机数的个数
E=1%E表示比特能量,进行归一化,设为1
forj=1:
50%产生30个不同的N
N(j)=1/(10^(0.1*j));%设定N的值
d(j)=sqrt(E*N(j)/2);%标准差
count=0
m=rand(1,k);%产生k个在(0,1)之间的均匀分布的随机数
fori=1:
k
if(m(i)>0)&&(m(i)<0.5)
s(i)=-1;
else
s(i)=1;
end
end
s;
n=random('Normal',0,d(j),1,k);%产生k个均值为0标差d(j)高斯分布的随机数
r=s+n;%r为检测器数据输入
fori=1:
k
ifr(i)>0
t(i)=1;
else
t(i)=-1;
end
end%对检测器输出的数据进行判决,输出t
fori=1:
k
ifs(i)~=t(i)
count=count+1;
end
end%将检测器输出的数据t与数据源数据s比较,计算错误的比特个数
p1(j)=count/k;%计算误码率
x(j)=10*log10(1/(2*d(j)^2))%将信噪比表示为对数形式,单位为db
p2(j)=0.5*erfc(1/(sqrt
(2)*d(j)))%理论上计算单极性信号误码率的公式
end
semilogy(x,p1,'*');%绘制实验中测得的误码率与信噪比的曲线图
holdon
semilogy(x,p2,'g');%绘制理论上的误码率与信噪比的曲线图
axis([010,1e-61])
xlabel('信噪比/db')
ylabel('误码率')
legend('仿真数据','理论曲线')
title('蒙特卡洛仿真双极性误码率波形');
(2)仿真图形如下
3、实验分析
(1)由以上两个仿真图形,即单极性信号的误码率与信噪比的曲线图和双极性信号的误码率与信噪比的曲线图可知,实际测得的误码率与理论值比较接近。
(2)对比以上两个仿真图形可知,在同样的信噪比条件下,双极性信号的误码率要比单极性信号的误码率小。
而在理论上有,由于双极性信号的判决门限为0,而单极性信号的判决门限为0.5,可知,单极性信号受信道特性的变化的影响,而双极性信号不受信道特性的变化的影响,所以双极性信号的误码率要比单极性信号的误码率小。
由此可知,实际测得的结果与理论分析是一致的。
六、实验总结
1、通过这个实验,对蒙特卡洛仿真方法的基本原理以及如何利用蒙特卡洛仿真方法来解决通信系统中的一些问题有了一定的了解,蒙特卡洛仿真方法思想比较简单,其实在通信系统中,有很多问题都可以用该方法来进行仿真。
通过仿真并与理论值比较,能够促进我们对一些知识的理解。
2、由于整个实验的操作流程比较清晰,因此用matlab来具体实现就相对比较简单,在实验中需要注意的是,随机数产生的个数要比较大,不然测得的值就会与理论值有比较大的误差,这是因为蒙特卡洛仿真的原理包含了一个统计的过程,只有统计数比较大,才能用频率来近似代替概率。