随机信号实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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) {

相关文档
最新文档