Question

Je dois créer générateur de bruit gaussien dans Généralisée Matlab.

GGN est un signal aléatoire v de répartition suivante:

v ~ GN(mi, alfa, beta) :

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

où p est le probablility compté pour la valeur v.

Notez que gamma est construit en fonction Matlab qui calcule la valeur de fonction Gamma .

Je suis en train de créer le générateur comme suit:

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

Mais la boucle semble être infinie, somethings mal.

Notez également que pour:
beta = 2 ce générateur doit renvoyer des valeurs égales à la distribution gaussienne normale avec une valeur moyenne mi et alfa^2/2 écart-type

Modifier OK, Doug m'a orienté dans la bonne direction. Nous devons créer la valeur v qui est plus ou moins probable à sélectionner (je suppose que 10 * std est tout à fait bien), puis vérifier l'état de probabilité.
Il est également important d'établir une nouvelle valeur de prob pour chaque vérification de probabilité (en boucle while).
Le problème est RESOLU

Notez que ce générateur vous permet de générer:
- bruit gaussien pour beta = 2 - Laplasian (impulsion) bruit pour beta = 1

Était-ce utile?

La solution

J'ai essayé et il a bien fonctionné. Notez que je mets le seuil aléatoire au nombre le plus aléatoire jamais, 0,1 (un choix valable à partir de [0 1]). pval doit être grande que prob soit acceptée.

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

Il semble à moi comme cela est juste une loterie difficile à gagner lorsque le seuil aléatoire est proche de 1. Notez les numéros possibles qui viennent pour pval.

Il n'est pas boucle infinie, juste que vous demandez Matlab de choisir des nombres aléatoires jusqu'à ce que vous gagnez à la loterie, plusieurs fois! On dirait un peu tri stupide

scroll top