matlab高斯随机过程_随机变量生成算法——通过Rayleigh变量(或均匀分布变量)转换为高斯随机变量...

ffda6a79c049f5ae9e1e6b54d03e699c.png

算法介绍

由随机过程的理论知两个相互独立的高斯随机变量的均方根是Rayleigh分布的随机变量。

首先,由高斯随机变量的定义可得其概率密度为:

7597199758d44d6e9482f04e49a7beef.png

此时,令

4cecb54ad691d2611d9258c618e44755.png

即进行如下所示的的坐标变换(即极坐标变换):

b61dde997607192ed90679570d2082db.png

由该坐标变换可将原概率密度变换为:

8417e6b06b82864cfc4ca3743c44fc94.png

若设R是Rayleigh随机变量,Θ是(0,2pi)均匀分布随机变量。

那么由如下关系式:

b3aa776a619b46a8fa4519da12e6e3aa.png

25ab57a00f87eaaee9275d2834abd89a.png

最后可得两个相互独立的高斯随机变量的表达式为:

52449237bd482f8f6b0a723690bf6509.png

此时称X为同相分量,Y为正交分量。


下面将以生成方差为1的高斯变量(即标准正态分布)为例

1、计算过程

由上述公式可得高斯随机变量由两个不相关的均匀分布随机变量的表达式:

25da2a1699a8ba497cbf2f3ce88d8ea5.png

或者转化为Rayleigh分布表示形式:

6546805cb6a7e085e0154139d076d310.png

其中,

equation?tex=u_%7B1%7D%2Cu_%7B2%7D 要求是不相关的均匀分布随机变量,
equation?tex=r%3D%5Csqrt%7B-2%5Csigma%5E%7B2%7Dln%28u_%7B1%7D%29%7D

关于如何产生均匀分布随机变量以及如何使用均匀分布随机变量产生Rayleigh分布随机变量,诸位可以参照我之前的几篇文章,这里不做赘述。

白龙鱼服:随机变量生成算法入门——Wichmann-Hill算法​zhuanlan.zhihu.com
762f7916a2b93e6f7b47099281a9cae5.png
白龙鱼服:随机变量生成算法——逆变换法​zhuanlan.zhihu.com
60eb2e74fdb272e5b71f666cb5d29970.png

2、C++代码实现

#include<bits/stdc++.h>
#define PI 3.1415926535897932
{
    float re[10001],g[10001];
    for(int i=0;i<10000;i++)
    {
        /*这里代码打不动了,均匀分布直接用随机种子发生器了*/
        re[i+1]=sqrt(-2*log(rand()/(RAND_MAX+1.0)));
        g[i+1]=re[i+1]*sin(2*PI*(rand()/(RAND_MAX+1.0)));//正交分量
        /*g[i+1]=re[i+1]*cos(2*PI*(rand()/(RAND_MAX+1.0)));//同相分量*/
    }
    FILE *fp;
    fp=fopen("/*输入自定义路径*/","w");
    for(int i=1;i<=10000;i++)
    {
        fprintf(fp,"%f ",g[i]);
    }
    fclose(fp);
    return 0;
}

3、使用matlab画直方图

u=[…(从C++程序生成文件中导入数据)]
histogram(u)

4、生成直方图预览

0f4b4032c535c9f42f5b928f75a9dc26.png
同相分量

ac5da13ef4cb00508f6f671c51fdffe5.png
正交分量
相关资源:随机过程 MATLAB
已标记关键词 清除标记
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页