Pregunta

Es necesario crear generador de ruido gaussiano generalizada en Matlab.

GGN es un v señal aleatoria de distribución siguiente:

v ~ GN(mi, alfa, beta) :

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

donde p es el probablility contado para el valor v.

Tenga en cuenta, que gamma se construye en función de Matlab que calcula el valor de función gamma .

Yo estaba tratando de crear el generador en modo siguiente:

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

Pero el bucle parece ser infinita, cosas equivocas.

Tenga en cuenta también, que para:
beta = 2 este generador de valores iguales a la distribución gaussiana normal con valor medio mi y alfa^2/2 desviación estándar

debe devolver

Editar OK, Doug me señaló en la dirección correcta. Tenemos que crear el valor v que está más o menos probable que se selecciona (asumí, que el 10 * std es bastante bueno) y luego comprobar el estado de probabilidad.
También es importante establecer un nuevo valor prob por cada cheque de probabilidad (en bucle while).
Así que el problema es SOLUCIONADO

Tenga en cuenta, que este generador permite generar:
- ruido gaussiano para beta = 2 - Laplasian (impulso) de ruido para beta = 1

¿Fue útil?

Solución

He intentado esto y funcionó bien. Tenga en cuenta que establecer el umbral de azar para el número más al azar nunca, 0,1 (una opción válida de [0 1]). pval debe ser grande que prob para ser aceptada.

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

A mi me parece que esto es simplemente una lotería difícil ganar cuando el umbral al azar es cercano a 1. Aviso los posibles números que van saliendo de pval.

No es un bucle infinito, al igual que usted está pidiendo MATLAB para elegir números al azar hasta que gane la lotería, varias veces! Parece un poco de una stupid sort

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top