質問

私は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">ボゴソートする

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top