在MATLAB广义高斯噪声发生器
-
19-09-2019 - |
题
我需要在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排序
不隶属于 StackOverflow