Matlabで一般化ガウスノイズジェネレーターを作成する必要があります。
v
GGNは、次の分布のランダム信号です。
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関数に組み込まれていることに注意してください。
私は次の方法でジェネレーターを作成しようとしていました:
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、ダグは私を正しい方向に向けました。v
多かれ少なかれ選択される可能性が高い値を作成し(10 * stdが非常に良いと仮定しました)、確率条件を確認する必要があります。(whileループで)確率チェックごと
に新しい値を描画することも重要です。
だから問題は解決しましたprob
このジェネレータを使用すると、次のものを生成できることに注意してください。-
ガウスノイズの場合beta = 2
-ラプラシアン(インパルス)ノイズの場合beta = 1