我需要在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的probablility。

请注意,该gamma内置于一个计算伽玛功能中的值MATLAB函数。

我试图创建在下列方式生成:

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

正态高斯分布的值

修改 OK,道格指出我朝着正确的方向发展。我们需要创建一个或多或少可能被选中(我以为,那10 *性病是相当不错的),然后检查概率条件下的v值。结果 同样重要的是提请每个概率检查(在while循环)的新prob值。结果 所以,问题是的解决

请注意,这发生器允许您生成:点击 - 高斯噪声beta = 2 - Laplasian(脉冲)噪声beta = 1

有帮助吗?

解决方案

我想这和它工作得很好。请注意,我的随机阈值设置为最随机数有史以来,0.1(从有效的选择[0 1])。 PVAL必须极大比概率被接受。

>> 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,直到你赢了彩票,多次选择随机数!似乎有点像一个 BOGO排序

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top