Generador de ruido gaussiano generalizada en Matlab
-
19-09-2019 - |
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
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
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