当前位置:文档之家› 基于蒙特卡罗法2FSK系统抗噪声性能仿真2

基于蒙特卡罗法2FSK系统抗噪声性能仿真2

通信原理
课程设计报告
题目:基于蒙特卡罗法2FSK系统抗噪声性能仿真院系:
专业:
班级:
姓名:
指导教师:
2010年12月27日-2010年12月31日
编写MATLAB的M文件,用该文件的采用相干解调法的2FSK系统的抗噪性能进行1000个符号的蒙特卡罗法仿真,画出误码率与信噪比之间的关系曲线,其中信噪比的取值为r=0dB、2dB、4dB、6dB…10dB,同时画出误码率与信噪比的理论曲线,其中信噪比的取值为r=0dB、0.1dB、0.2dB…10dB。

分步实施:
1)熟悉2FSK系统调制解调,熟悉蒙特卡洛法;熟悉误码率计算;
2)编写主要程序;
3)画出系统仿真误码率曲线的系统理论误码率曲线。

1、蒙特卡罗思想概述
蒙特卡罗方法也称为随机模拟方法,有时也称为随机抽样技术或统计实验方法。

它的基本思想是:为了求解数学、物理、工程技术以及生产管理等方面的问题,首先建立一个概率模型或随机过程,使它的参数等于问题的解;然后通过对模型或过程的观察或抽样试验来计算所求参数的统计特征,最后给出所求解的近似值。

而解得精确度可用估计值的标准误差来表示。

蒙特卡罗方法可以解决各种类型的问题,但总的来说,视其是否涉及随机过程的性态和结果,该方法处理的问题可以分为两类:第一类是确定性的数学问题,首先建立一个与所求解有关的概率模型,使所求的解就是我们所建立模型的概率分布或数学期望;然后对其进行随机抽样观察,即产生随机变量;最后用其算术平均值作为所求解的近似估计值。

第二类是随机性问题,被考察的元素更多的受到随机性的影响,一般情况下采用直接模拟方法,即根据实际物理情况的概率法则,用电子计算机进行抽样试验。

在应用蒙特卡罗方法解决实际问题的过程中,大体有如下几个内容: (1)对求解的问题建立简单而又便于实现的概率统计模型,使所求的解恰好是所建立模型的概率分布或数学期望。

(2)根据概率统计模型的特点和计算实践的需要,尽量改进模型,以便减小方差和费用,提高计算效率。

(3)建立对随机变量的抽样方法,其中包括建立产生伪随机数的方法和建立对所遇到的分布产生随机变量的随机抽样方法。

(4)给出获得所求解的统计估计值及其方差或标准误差的方法。

2、2FSK 系统调制解调原理
频移键控是利用载波的频率变化来传递数字信息。

在2FSK 中,载波的频率随二进制基带信号在f1和f2两个频率间变化。

用f1和f2分别表示二进制“1”和“0”。

因此,2FSK 信号的时域表达式为
)
cos()()cos()()(212n n s n n n s n FSK t nT t g a t nT t g a t e θωφω+⎥⎦

⎢⎣⎡-++⎥⎦⎤⎢⎣⎡-=∑∑∞-∞→∞-∞→
2FSK 可采用调频方法或键控法进行调制,调制框图如下
2FSK 信号的解调方法是相干解调。

由于FSK 信号本身就是利用频率传递信息的,所以在接收端必须利用信号的频率信息来解调信号。

下图2FSK 信号相干接收原理方框图。

3、2FSK 的抗噪声性能
通信系统的抗噪声性能是指系统克服加性噪声影响的能力。

在数字通信系统中,加性噪声可能使传输码元产生错误。

其错误程度一般用误码率来衡量。

2FSK 相干接收时的误码率为:)2/(2
1
r erfc P e =
,其中222/σA r =为解调器的输入信噪比。

当信噪比r >>1时,上式变成2/21
r e e r
P -≈
π。

带通 滤波器
相乘器
低通 滤波
抽样 判决器
cos
ω1
输出
定时脉 冲
带通 滤波器
ω
2
相乘器
cos
ω
2
低通 滤波
三、设计流程
利用matlab对2FSK进行仿真,在2FSK调制后对信号加入不同信噪比的高斯噪声,然后进行解调,计算出误码率。

程序流程图如下:
四、程序运行结果
结果分析:图中实线是理论上的信噪比与误码率关系曲线,*则是进行2FSK调制解调后的仿真分析。

由图可见随着信噪比的增大,理论计算与实际仿真得到的误
10
码率均在下降,但是由于仿真码元数目比较少,误码率只能达到接近4
五、实验源程序
见附录
六、总结与体会
这次课设我受益匪浅,不但复习了通信原理的相关知识而且还更加深了对
matlab的理解与应用。

在课设过程中我遇到了很多问题,但是最后还是一一解
决了。

通过上网,去图书馆查资料,请教老师同学我解决了很多难题同时也掌握
了大量新知识。

我个人感觉像通信原理这种课程只有通过课设这种方式才能让我
们掌握书本上的抽象知识熟练运用。

通过这次通信原理课程设计实践,我复习了MATLAB编程语言的基本概念、语
法、语义和数据类型的使用特点,加深了对课堂所学理论知识的理解,掌握了运
用结构化程序设计的基本思想和方法,更重要的是培养了自己的自学能力。

因为这是我们第二次接触MATLAB编程语言,在编写程序以及调试的过程中遇到了很多困难,但是我通过去图书馆查找资料,请教同学老师,再自己一点点改善程序,最终编写出一个比较完善的程序,实现了所有要求功能,这是最值得我欣慰的一点。

当然成功编写一个程序绝非易事,之前,我总以为程序能够正常运行,就代表着编程成功,后来我才发现我大错特错了。

我用了三天时间,完成了程序的编写、改错,但我立刻发现尽管程序能够正常运行,部分功能却不完善,甚至不能实现。

经过一次又一次调试、修改又修改,一点一点发现问题并改正,我才真正发现编程远没有想象中的简单。

它需要的不仅是清晰地编程思路、编程技巧,还需要有耐心有毅力,不要放弃。

七、参考文献
【1】罗建军杨琦精讲多练matlab 西安交通大学出版社
【2】樊昌信.曹丽娜. 通信原理(第六版)北京:国防工业出版社附录(源程序)
主程序:
a=0:2:10;
b=0:0.1:10;
for i=1:length(a)
monizhi(i)=snr2pb(a(i)); %用蒙特卡罗法仿真
end;
for i=1:length(b)
c=10^(b(i)/10); %把DB变为数值
lilunzhi(i)=(1/2)*erfc(sqrt(c/2)); %用公式算理论误码率
end;
subplot(2,1,1);
semilogy(a,monizhi,'*');
hold
semilogy(b,lilunzhi);
xlabel('信噪比(dB)');
ylabel('误码率');
legend('仿真比特误码率','理论比特误码率');
function[p]=snr2pb(snr_in_dB)
N=1000; %用1000个符号进行蒙特卡罗仿

Eb=1; %有用信号能量
snr=10^(snr_in_dB/10);
sgma=sqrt(Eb/(snr)); %噪声的标准差
for i=1:N %由随机数差生的输入的0 1序列共1000个
temp=rand;
if(temp<0.5) %小于0.5判为0 dsource(i)=0;
else
dsource(i)=1; %大于0.5判为1
end;
end;
subplot(2,1,2);
i=1:1000;
plot(i,dsource(i));
axis([0 1000 0 1])
numoferr=0; %误码个数初始化为0
for i=1:N
if (dsource(i)==0)
x1=sqrt(2*Eb)+gngauss(sgma); %上支路信号波形
x2=gngauss(sgma); %下支路信号波形
else
x1=gngauss(sgma);
x2=sqrt(2*Eb)+gngauss(sgma);
end;
if(x1>x2) %上支路大于下支路时判为0
decis=0;
else
decis=1; %下支路大于上支路时判为0
end;
if (decis~=dsource(i)) %若输入与输出不一致误码数加1
numoferr=numoferr+1;
end;
end;
p=numoferr/N; %误码率为误码的个数除以总码数
function [n1,n2]=gngauss(m,sgma) %gngauss产生均值为m,标准偏差
if nargin==0
m=0;
sgma=1;
elseif nargin==1
sgma=m;
m=0;
end
u=rand; %在区间(0,1)内的均匀随机变量
z=sgma*(sqrt(2*log(1/(1-u)))); %瑞利分布随机变量
u=rand;
n1=m+z*cos(2*pi*u); %由瑞利分布和高斯分布的关系产生高斯分布n2=m+z*sin(2*pi*u);。

相关主题