随机过程上机报告 本文关键词:上机,随机,过程,报告
随机过程上机报告 本文简介:随机过程上机报告姓名:孙丹妮专业:电子信息工程学号:U201515363班级:电信中英1501班一.随机模拟的典型步骤:1、根据问题构建模拟系统2、仿真系统中各种分布的随机变量3、运行模拟系统,进行统计测量4、分析数据,输出结果二.主要工具基本工具:C、C++等编程模拟、matlab网络模拟:OPN
随机过程上机报告 本文内容:
随机过程上机报告
姓名:孙丹妮
专业:电子信息工程
学号:U201515363
班级:电信中英1501班
一.
随机模拟的典型步骤:
1、根据问题构建模拟系统
2、仿真系统中各种分布的随机变量
3、运行模拟系统,进行统计测量
4、分析数据,输出结果
二.主要工具
基本工具:C、C++等编程模拟、matlab
网络模拟:OPNET
Modeler、NS2:大型网络仿真
CASSAP:数字信号处理;SPW:电子系统
本次实验主要是使用了c++进行编程模拟
3.
实验原理
1,模块的功能描述
random.dsp
这个文件(项目文件)包含在项目水平和信息用于建立一个项目或子项目。
MyRand.cpp
自定义的程序,需要自己在相应的函数编写代码完成函数功能.
unsigned
int
CMyRand::MyRand(unsigned
int
seed)
采用线性同余法,根据输入的种子数产生一个伪随机数,如果种子不变,则可以重复调用该函数产生一个伪随机序列
double
CMyRand::AverageRandom
(double
min,double
max)
产生一个在min~max范围内精度为4位小数的平均分布的随机数
double
CMyRand::NormalRandom(double
miu,double
sigma,double
min,double
max)
产生均值为miu,方差为sigma的正态分布的随机数
double
CMyRand::ExpRandom(double
lambda,double
min,double
max)
产生参数为lambda的指数分布的随机数
unsigned
int
CMyRand::PoisonRandom
(double
lambda,double
min,double
max)
产生参数为lambda的产生泊松分布的随机数
double
CMyRand::Ex(void)
计算任意分布的随机过程的均值。本函数在randomDlg.cpp的OnSelf()函数中调用
double*
CMyRand::Rx(double
lambda,int
points)
计算泊松过程的自相关序列
random.h
这是主要为应用程序头文件。它包括其他项目(包括Resource.h)和声明了特定的header
CRandomApp应用程序类。
random.cpp
这是主应用程序源文件,其中包含应用程序类CRandomApp。
random.rc
这是一个清单的所有Microsoft
Windows的资源程序使用。它包括图标,位图,指针存储
在RES目录。这个文件可以直接编辑在微软Visual
c++。
random.clw
这个文件包含ClassWizard用来编辑现有的信息类或添加新类。ClassWizard也使用这个文件来存储,所需的信息来创建和编辑对话框消息映射和数据地图和创建原型成员函数。
res
/
random.ico
这是一个图标文件,用作应用程序的图标。这andom.rc图标由主要包括资源文件。
res
/
random.rc2
这个文件包含资源被微软无法编辑Visual
c++。你不应该把所有资源可编辑的资源编辑器在这个文件中。
AppWizard创建一个对话框类:
randomDlg。randomDlg
h。cpp
-对话框
这些文件包含CRandomDlg类。这个类定义您的应用程序的行为的主要对话框。对话框的
模板是随机的。
Scope.cpp和Scope.h
:画图程序,不能修改
StdAfx.h,StdAfx.cpp
这些文件是用来构建一个预编译头文件(PCH)随机命名。名叫StdAfx.obj
pch和预编译类型文件。
2,模块之间的关系
注:以函数名代函数
MyRand
MyRandInit
参数赋初值给
产生伪随机数给
AverageRandom
产生均匀分布随机变量给
NormalRandom
PoisonRandom
ExpRandom
计算泊松过程的自相关序列
计算正态分布的随机过程的均值
Rx
Ex
3,功能函数
void
CMyRand::MyRandInit(void)
函数功能:定义参数的初始量
unsigned
int
CMyRand::MyRand(unsigned
int
seed)
函数功能:采用线性同余法,根据输入的种子数产生一个伪随机数,如果种子不变,则可以重复调用该函数产生一个伪随机序列
参数:
seed作为调用函数的输入种子,同一个伪随机数序列可采用同一个seed
实现思路:利用CMyRand类中定义的全局变量:S,K,N,Y。其中K和N为算法参数,S用于保存种子数,Y为产生的随机数
start
注意事项:Y的初值的计算
N
S
!=
seed
Y
S
=
seed
Y
=
(seed
K)
%
N;
Y
=
(Y
K)
%
N;
Y
==
0
Y
end
Y
=
rand()
double
CMyRand::AverageRandom
(double
min,double
max)
函数功能:产生一个在min~max范围内精度为4位小数的平均分布的随机数
参数:min和max代表该均匀随机变量的取值范围,精确到小数点后4位。该参数在randomDlg.cpp中OnAverage
()和OnAverageStat()函数中已经设置
start
minInteger=(min*10000)
maxInteger=(max*10000)
diffInteger=maxInteger-minInteger
resultInteger=randInteger%diffInteger
+
minInteger;
AverageRandom=resultInteger/10000.0
end
double
CMyRand::NormalRandom(double
miu,double
sigma,double
min,double
max)
函数功能:产生均值为miu,方差为sigma的正态分布的随机数
参数:
miu为均值,
sigma为方差,
min和max
为均匀分布随机变量的取值范围。
所有参数在randomDlg.cpp的OnNormal()和OnNormalStat()函数中设置。
实现思路:利用中心极限定理,通过多个独立的均匀随机变量之和构成正态随机变量
START
dResult
=
0
i=0
i=
F
Y
END
p
=
lambda*p/(i+1)
F
+=
p
i
++
double
CMyRand::Ex(void)
函数功能:计算任意分布的随机过程的均值,加均值计算代码
本函数在randomDlg.cpp的OnSelf()函数中调用
START
m=0
Ex=0.0
Return
Ex/1000
N
m=
F)
{
p
=
lambda*p/(i+1);
F
+=
p;
i
++;
}
dResult
=
i;
return
dResult;
}
/*函数功能,计算任意分布的随机过程的均值*/
double
CMyRand::Ex(void)
{
int
m;
double
Ex=0.0;
//添加均值计算代码
for
(m=0;
m<1000;
m++)
{
Ex
+=
NormalRandom(0,1.2,0,1);
}
return
Ex/1000;
}
/*函数功能,计算随机过程的自相关序列/
double*
CMyRand::Rx(double
lambda,int
points)
{
int
m,I=5;
doubleRx
=
(double*)malloc((2*points+1)*sizeof(double));
//添加自相关序列产生代码
//产生的自相关序列存入Rx中,Rx可当作数组使用
//不要在本函数中释放该数组!
for
(m=-points;
m<=points;
m++)
{
Rx[(m+points)]
=
I
I
exp(-2
lambda
abs(m));
}
return
Rx;
}
四.执行截图
均匀分布
均匀统计
正态分布
正态统计
指数分布
指数统计
泊松分布
泊松统计
均值(此时取NormalRandom(0,1.2,0,1))
自相关(此时取int
m,I=5;)
六.实验心得
通过本次实验,不仅培养了我们的动手能力,重新复习了c语言的内容,提供了学科交叉学习的机会,而且通过本次实验使我对于在课堂上学习的随机过程的知识有了更深的理解,体会到在实际运用中理论运用的变化,体会的到理论提供了很精确的结果,而在实际运用中为了提高效率会提供一个不够精确但很方便的方法,这也许就是理论和实践的一个差别课程。,