数字信号的产生(9)-韦伯分布随机数

韦伯分布随机数的计算与《数字信号的产生(4)-指数分布随机数》中使用的方法一致,即:逆变换法

  1. 韦伯或威布尔(Weibull)分布:

图片

  1. 当 β = 1.0 时,波形随着m变化曲线,如下:

图片

  1. 生成方法

用逆变换法产生Weibull分布随机变量x,其具体方法如下:

图片

  1. 函数说明(weibull.h)(关于uinform函数,请查看这里
#include <math.h>
#include "uniform.h"

double weibull(double a, double b, long int *s);

/*
  a —— weibull的参数m
  b —— weibull分布的参数β
*/

double weibull(double a, double b, long int *s)
{
    double u,x;
    u=uniform(0.0,1.0,s);
    u=-log(u);
    x=b*pow(u,1.0/a);
    return(x);
}
  1. 主函数实现(main.c)
#include <stdio.h>
#include "weibull.h"

int main(void)
{
    int i,j;
    long int s;
    double x,m,beta;
    m=2.0;
    beta=1.0;
    s=13579;
    FILE *fp;   //存储最终计算值
    fp=fopen("data.dat","w");   //打开文本
    for(i=0;i<10;i++)
    {
        for(j=0;j<5;j++)
        {
            x=weibull(m,beta,&s);
            printf("%13.7f",x);
            fprintf(fp,"%.7lf\n",x);    //存储数值
        }
        printf("\n");
    }
    fclose(fp);    //关闭文本
    return 0;
}
  1. 执行结果

图片

  1. 使用软件QtiPlot,进行直方图分析,如下:

图片

下一篇:《数字信号的产生(10)-爱尔朗分布随机数》

评论 (0)

暂无评论,快来抢沙发吧!

发表评论