【问题标题】:Generalized Gaussian Noise generator in matlabmatlab中的广义高斯噪声发生器
【发布时间】:2009-12-14 19:56:59
【问题描述】:

我需要在 Matlab 中创建广义高斯噪声发生器。

GGN 是一个随机信号v,分布如下:

v ~ GN(mi, alfa, beta) :

p(v; mi, alfa, beta) = (beta/(2*alfa*gamma(1/beta))) * exp(-(abs(v - mi)/alfa).^beta )

其中 p 是计算值 v 的概率。

请注意,gamma 是内置于 Matlab 函数中的,用于计算 Gamma function 的值。

我试图通过以下方式创建生成器:

function gn = GN(dim1, dim2, mi, alfa, beta)
gn = zeros(dim1, dim2);
for i=1:dim1
    for j=1:dim2
        v = mi + 10*(alfa^2)* rand(1) - 5*(alfa^2);
        prob = rand(1);
        while(p(v, mi, alfa, beta) < prob)
            v = mi + 10*alfa* rand(1) - 5*alfa;
            prob = rand(1);
        end
        gn(i,j) = v;
    end
end

function pval = p(v, mi, alfa, beta)
pval = (beta/(2*alfa*gamma(1/beta))) * exp(-(abs(v - mi)/alfa).^beta );

但循环似乎是无限的,有些不对劲。

还要注意,对于:
beta = 2,此生成器应返回等于正态高斯分布的值,平均值为mi,标准差为alfa^2/2

编辑 好的,Doug 为我指出了正确的方向。我们需要创建或多或少可能被选中的v 值(我假设 10* 标准非常好),然后检查概率条件。
为每个概率检查(在 while 循环中)绘制一个新的 prob 值也很重要。
所以问题是解决了

请注意,此生成器允许您生成:
- beta = 2 的高斯噪声 - beta = 1 的拉普拉斯(脉冲)噪声

【问题讨论】:

  • 您传递给GN 的哪些值会导致它无限循环?
  • 如果这有帮助,请接受答案。谢谢!道格

标签: matlab gaussian noise-generator


【解决方案1】:

我试过了,效果很好。请注意,我将随机阈值设置为有史以来最大的随机数 0.1(从 [0 1] 中进行的有效选择)。 pval 必须大于 prob 才能被接受。

>> GN(2,2,1,1,2)

prob =

    0.1000


pval =

    0.4738


prob =

    0.1000


pval =

    0.2674


prob =

    0.1000


pval =

    0.4885


prob =

    0.1000


pval =

    0.5473


ans =

    0.5821    0.1358
    0.6204    0.8254

在我看来,当随机阈值接近 1 时,这只是一场很难中奖的彩票。注意 pval 可能出现的数字。

这不是无限循环,只是您要求 MATLAB 选择随机数,直到您多次中奖!好像有点像Bogosort

【讨论】:

  • 感谢 Doug,您为我指明了正确的方向。解决方案是 - 在测试概率之前 - 创建或多或少可能被选中的随机值。谢谢!
猜你喜欢
  • 2016-08-17
  • 2014-09-23
  • 2016-02-07
  • 2013-10-14
  • 2015-02-04
  • 1970-01-01
  • 2014-08-26
  • 2011-12-08
  • 2012-12-18
相关资源
最近更新 更多