Frage

ich brauche Generalized Gaussian Noise Generator in Matlab zu erstellen.

GGN ist ein Zufallssignal v von folgenden Verteilung:

v ~ GN(mi, alfa, beta) :

p(v; mi, alfa, beta) = (beta/(2*alfa*gamma(1/beta))) * exp(-(abs(v - mi)/alfa).^beta )

Wo p die probablility für Wert v gezählt.

Beachten Sie, dass gamma in Matlab-Funktion eingebaut, die den Wert von Gamma-Funktion berechnet.

Ich habe versucht, den Generator in folgenden Weise zu erstellen:

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 );

Aber die Schleife scheint unendlich zu sein, irgendwas falsch.

Beachten Sie auch, dass für:
beta = 2 diesen Generator sollte Werte gleich normale Gaußsche Verteilung mit Mittelwert und Standardabweichung mi alfa^2/2 zurückkehren

Bearbeiten OK, Doug wies mich in die richtige Richtung. Wir müssen den v Wert schaffen, die mehr oder weniger wahrscheinlich ausgewählt werden (ich davon ausgegangen, dass 10 * std recht gut ist) und dann überprüfen Sie die Wahrscheinlichkeit erhalten.
Es ist auch wichtig, einen neuen prob Wert für jede Wahrscheinlichkeitsprüfung (in while-Schleife) zu zeichnen.
Das Problem ist also GELöST

Beachten Sie, dass dieser Generator ermöglicht es Ihnen, zu generieren:
- Gaußsche Rauschen für beta = 2 - Laplasian (Impuls) Lärm für beta = 1

War es hilfreich?

Lösung

Ich habe versucht, und es hat gut funktioniert. Beachten Sie, dass ich die Zufallsschwelle die Zufallszahl je 0,1 (eine gültige Wahl von [0 1]) gesetzt. pval muss groß sein, als prob in Kauf genommen werden.

>> 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

Es scheint mir, wie dies nur eine harte Lotterie zu gewinnen, wenn die Zufallsschwelle nahe 1. Beachten Sie die möglichen Zahlen, die für pval kommen.

Es ist nicht Endlosschleife, nur, dass Sie MATLAB fragen Zufallszahl zu wählen, bis Sie im Lotto gewinnen, mehrmals! Es scheint ein bisschen ein Bogosort

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top