Actualmente estoy creando diferentes señales usando Matlab, mezclándolas multiplicándolas por una matriz de mezcla A, y luego tratando de recuperar las señales originales usando FastICA .
Hasta ahora, las señales recuperadas son realmente malas en comparación con las originales, que no era lo que esperaba.
Estoy tratando de ver si estoy haciendo algo mal. Las señales que estoy generando son las siguientes:
s1 = (-x.^2 + 100*x + 500) / 3000; % quadratic
s2 = exp(-x / 10); % -ve exponential
s3 = (sin(x)+ 1) * 0.5; % sine
s4 = 0.5 + 0.1 * randn(size(x, 2), 1); % gaussian
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth
Una condición para que ICA tenga éxito es que, como máximo, una señal es gaussiana, y he observado esto en mi generación de señal.
Sin embargo, otra condición es que todas las señales son estadísticamente independientes.
Todo lo que sé es que esto significa que, dadas dos señales A y B, conocer una señal no proporciona ninguna información con respecto a la otra, es decir: P (A | B) = P (A) donde P es la probabilidad .
Ahora mi pregunta es esta: ¿son mis señales estadísticamente independientes? ¿Hay alguna forma de determinar esto? Quizás alguna propiedad que debe ser observada?
Otra cosa que he notado es que cuando calculo los valores propios de la matriz de covarianza (calculada para la matriz que contiene las señales mixtas), el espectro propio parece mostrar que solo hay un componente principal (principal) . ¿Qué significa esto realmente? ¿No debería haber 5, ya que tengo 5 (supuestamente) señales independientes?
Por ejemplo, cuando se usa la siguiente matriz de mezcla:
A =
0.2000 0.4267 0.2133 0.1067 0.0533
0.2909 0.2000 0.2909 0.1455 0.0727
0.1333 0.2667 0.2000 0.2667 0.1333
0.0727 0.1455 0.2909 0.2000 0.2909
0.0533 0.1067 0.2133 0.4267 0.2000
Los valores propios son: 0.0000 0.0005 0.0022 0.0042 0.0345
(¡solo 4!)
Cuando se utiliza la matriz de identidad como la matriz de mezcla (es decir, las señales mixtas son los mismos que los originales), el eigenspectrum es: 0.0103 0.0199 0.0330 0.0811 0.1762
. Todavía hay un valor mucho más grande que el resto.
Gracias por tu ayuda.
Pido disculpas si las respuestas a mis preguntas son dolorosamente obvias, pero realmente soy nuevo en estadísticas, ICA y Matlab. Gracias de nuevo.
EDITAR
Tengo 500 muestras de cada señal, en el rango [0.2, 100], en pasos de 0.2, es decir, x = 0: 0.1: 100.
Además, dado el modelo ICA: X = As + n (no estoy agregando ningún ruido en este momento), me estoy refiriendo al espectro propio de la transposición de X, es decir, eig (cov (X ')).
ACTUALIZAR
Como se sugiere (consulte los comentarios), probé FastICA con solo 2 señales. Los resultados fueron bastante buenos (ver foto abajo). La matriz de mezcla utilizada fue A = [0.75 0.25; 0.25 0.75]
. Sin embargo, el espectro propio 0.1657 0.7732
todavía mostraba solo un componente principal principal.
Por lo tanto, mi pregunta se reduce a lo siguiente: ¿Qué función / ecuación / propiedad puedo usar para verificar si varios vectores de señal son estadísticamente independientes?