数字信号的产生(12)-伯努利+高斯分布随机数
admin 于 2017年09月16日 发表在 机器学习笔记
1. 伯努利-高斯分布
伯努利-高斯分布的随机变量x是伯努利分布的随机变量y与高斯分布随机变量z的乘积,即 x = y * z 。因此,伯努利-高斯分布的随机数可认为是:当伯努利序列中有1时,打开高斯随机函数发生器,并输出其对应的值。伯努利-高斯分布的均值为pu,方差为p,其中p是伯努利分布的参数,μ是高斯分布的均值。
2. 产生伯努利-高斯分布随机变量x的算法如下:
(1)产生伯努利分布的随机数y,即:y~BN(p)
(2)产生高斯分布的随机数z,即:z~N(μ,σ)
(3)计算 x = y * z
3. 函数说明(bg.h)(关于gauss函数,请查看这里)
#include "gauss.h" #include "uniform.h" double bg( double p, double mean, double sigma, long int *s); double bg( double p, double mean, double sigma, long int *s) { double u,x; u=uniform(0.0,1.0,s); if(u<=p) { x=gauss(mean,sigma,s); } else { x=0.0; } return(x); }
4. 主函数实现(main.c)
#include <stdio.h> #include "bg.h" int main(void) { int i,j; long int s; double p,x,mean,sigma; p=0.4; mean=0.0; sigma=1.0; s=12357; FILE *fp; //存储最终计算值 fp=fopen("data.dat","w"); //打开文本 for(i=0; i<10; i++) { for(j=0; j<5; j++) { x=bg(p,mean,sigma,&s); printf("%13.7f",x); fprintf(fp,"%.7f\n",x); //存储数值 } printf("\n"); } return 0; }
5. 执行结果
6. 使用软件QtiPlot,绘制输出波形