随机信号实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
随机过程实验报告
通信1206班 U201213696 马建强
一、实验内容
1、了解随机模拟的基本方法,掌握随机数的概念及其产生方法;
2、掌握伪随机数的产生算法以及伪随机数发生器的特点;
3、掌握一般随机数的产生方法;
4、掌握平稳随机过程的数字特征的求解方法。
二、实验步骤
1、利用线性同余法产生在(min,max)上精度为4位小数的平均分布的随机数;
2、编程实现在min 到max 范围内产生服从正态分布的随机数;
3、编程产生服从指数分布的随机数;
4、编程产生服从泊松分布的随机数;
5、计算任意给定分布的随机过程的均值;
6、计算泊松过程的自相关序列。
三、实验代码与结果
1、均匀分布
/*
函数功能,采用线性同余法,根据输入的种子数产生一个伪随机数.
如果种子不变,则将可以重复调用产生一个伪随机序列。
利用CMyRand类中定义的全局变量:S, K, N, Y。
其中K和N为算法参数,S用于保存种子数,Y为产生的随机数
*/
unsigned int CMyRand::MyRand(unsigned int seed)
{
//添加伪随机数产生代码
if(S != seed)
{
S = seed;
Y = (seed * K) % N;
}
else
{
Y = (Y * K) % N;
if(Y == 0)
Y = rand();
}
return Y;
}
/*函数功能,产生一个在min~max范围内精度为4位小数的平均分布的随机数*/
double CMyRand::AverageRandom(double min,double max)
{
int minInteger = (int)(min*10000);
int maxInteger = (int)(max*10000);
int randInteger = MyRand(seed);
int diffInteger = maxInteger - minInteger;
int resultInteger = randInteger % diffInteger + minInteger;
return resultInteger/10000.0;
}
图一、均匀分布
图二、均匀统计
2、正态分布
/*函数功能,在min 到max 范围内产生正态分布的随机数
miu,最大概率密度处的随机变量,即产生的随机数中,概率最大的那个
sigma
*/
double CMyRand::NormalRandom(double miu, double sigma, double min, double max)
{
double dResult;
dResult = 0;
//添加正态分布随机变量产生代码
for(int i=0;i<12;i++)
dResult += AverageRandom(min,max);
dResult = (dResult-6)/(max-min);
dResult = dResult*sigma + miu;
return dResult;
}
图三、正态分布
图四、正态统计
3、指数分布
/*函数功能,产生指数分布的随机数
*/
double CMyRand::ExpRandom(double lambda, double min, double max)
{
double dResult = 0.0;
//添加指数分布随机变量产生代码
while(dResult < 0.01)
{
dResult = AverageRandom(min,max);
}
dResult = -1.0*log(dResult) / lambda;
return dResult;
}
图五、指数分布
图六、指数统计
4、泊松分布
/*函数功能,产生泊松分布的随机数
*/
unsigned int CMyRand::PoisonRandom(double lambda, double min, double max)
{
unsigned int dResult = 0;
//添加泊松分布随机变量产生代码
double u = AverageRandom(min,max);
int i = 0;
double p = exp(-1*lambda);
double F = p;
while(u >= F)
{
p = lambda*p/(i+1);
F += p;
i ++;
}
dResult = i;
return dResult;
}
图七、泊松分布
图八、泊松统计
5、均值
/*函数功能,计算任意分布的随机过程的均值
*/
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;
//return Ex;
}
图九、均值
6、自相关序列
/*函数功能,计算随机过程的自相关序列
*/
double* CMyRand::Rx(double lambda, int points) {