Random 如何计算具有多峰分布的随机值?

Random 如何计算具有多峰分布的随机值?,random,vhdl,normal-distribution,Random,Vhdl,Normal Distribution,我想用由N正态分布组成的多峰分布计算一个随机值 我有一个数组,其中N元素为正态分布参数(标准偏差,平均值) 我的语言(VHDL)和库允许我计算以下基本分布: -均匀分布[-1.0;1.0] -正态分布(Box-Muller变换) -泊松分布 如何计算随机值,使直方图看起来像重叠的正态分布 类型和助手: type T_NORMAL_DIST_PARAM is record StdDev : REAL; Mean : REAL; end record; type T_J

我想用由
N
正态分布组成的多峰分布计算一个随机值

我有一个数组,其中
N
元素为正态分布参数(标准偏差,平均值)

我的语言(VHDL)和库允许我计算以下基本分布: -均匀分布[-1.0;1.0] -正态分布(Box-Muller变换) -泊松分布

如何计算随机值,使直方图看起来像重叠的正态分布

类型和助手:

type T_NORMAL_DIST_PARAM is record
    StdDev : REAL;
    Mean   : REAL;
  end record;
  type T_JITTER_DIST is array(NATURAL range <>) of T_NORMAL_DIST_PARAM;
  constant JitterDistribution : T_JITTER_DIST := (
    0 => (0.2, -0.4),
    1 => (0.2,  0.4)
  );
它用于:

procedure genClock(signal Clock : out STD_LOGIC; Period : TIME) is
  constant TimeHigh : TIME := Period / 2;
  constant TimeLow : TIME := Period - TimeHigh;
  variable rand : REAL;
begin
  initializeSeed(Seed);
  while (not isStopped) loop
    getMultiModalDistributedRandomNumber(Seed, rand, JitterDistribution);
    Clock <= '1';
    wait for TimeHigh + (Period * rand);
    Clock <= '0';
    wait for TimeLow;
  end loop;
end procedure;
程序genClock(信号时钟:输出标准逻辑;周期:时间)为
恒定时间上限:时间:=周期/2;
常数TimeLow:TIME:=时段-时间上限;
变量rand:REAL;
开始
初始化(种子);
while(非isStopped)循环
getMultiModalDistributedRandomNumber(种子、随机、抖动分布);

时钟使用均匀分布生成一个整数,并使用该整数选择N个参数集中用于生成正态分布的参数。该解决方案很简单:)。正如@pjs所说,使用曲线下的面积计算高斯的相对权重,使用U(0,1)从特定高斯的权重指数中采样,然后调用正态分布。简单…@Paepbels是基于0或1的VHDL数组?它们可以基于任何位置:),但大多数数组都是基于0的,除了字符串,它是基于1的。我将随机值缩放到10倍N,然后使用mod N。这将减少边界处的舍入效果。测得的柱状图与预期一致。我想我明天可以发布完整的代码片段。
procedure genClock(signal Clock : out STD_LOGIC; Period : TIME) is
  constant TimeHigh : TIME := Period / 2;
  constant TimeLow : TIME := Period - TimeHigh;
  variable rand : REAL;
begin
  initializeSeed(Seed);
  while (not isStopped) loop
    getMultiModalDistributedRandomNumber(Seed, rand, JitterDistribution);
    Clock <= '1';
    wait for TimeHigh + (Period * rand);
    Clock <= '0';
    wait for TimeLow;
  end loop;
end procedure;