Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 Matlab中的广义高斯噪声发生器

我需要在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 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,Doug向我指出了正确的方向。我们需要创建一个或多或少可能被选择的v值(我假设10 * std很好),然后检查概率条件。
为每个概率检查(在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选择随机数,直到您多次中奖为止!似乎有点像Bogosort



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 01:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.