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 * STDは非常に良好であることを、仮定)、その後、確率状態をチェックしているv
値を作成する必要があります。
(whileループ内)各確率検査の新しいprob
値を描画することも重要である。
だから、問題は、 の
注:
- beta = 2
のためのガウス雑音
- Laplasian(インパルス)beta = 1
のノイズ
解決
私はこれを試してみましたが、それがうまく働きました。 ([0 1]からの有効な選択肢)0.1、私がこれまでで最も乱数のランダムなしきい値を設定することに注意してください。 PROBが受け入れられるよりも、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を求めているだけのことを、無限ループではありません! href="http://en.wikipedia.org/wiki/Bogosort" rel="nofollow noreferrer">ボゴソートする
所属していません StackOverflow