Je crée actuellement différents signaux à l'aide de Matlab, je les mélange en les multipliant par une matrice de mélange A, puis j'essaie de récupérer les signaux d'origine en utilisant FastICA .
Jusqu'à présent, les signaux récupérés sont vraiment mauvais par rapport aux signaux d'origine, ce qui n'était pas ce à quoi je m'attendais.
J'essaie de voir si je fais quelque chose de mal. Les signaux que je génère sont les suivants:
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
Une condition pour que l'ICA réussisse est qu'au plus un signal soit gaussien, et je l'ai observé dans ma génération de signal.
Cependant, une autre condition est que tous les signaux soient statistiquement indépendants.
Tout ce que je sais, c'est que cela signifie que, étant donné deux signaux A et B, connaître un signal ne donne aucune information par rapport à l'autre, c'est-à-dire: P (A | B) = P (A) où P est la probabilité .
Maintenant, ma question est la suivante: mes signaux sont-ils statistiquement indépendants? Existe-t-il un moyen de déterminer cela? Peut-être une propriété qui doit être observée?
Une autre chose que j'ai remarquée est que lorsque je calcule les valeurs propres de la matrice de covariance (calculées pour la matrice contenant les signaux mixtes), le spectre propre semble montrer qu'il n'y a qu'une seule composante principale (principale) . Qu'est-ce que cela signifie vraiment? Ne devrait-il pas y en avoir 5, car j'ai 5 signaux (supposés) indépendants?
Par exemple, lorsque vous utilisez la matrice de mélange suivante:
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
Les valeurs propres sont: 0.0000 0.0005 0.0022 0.0042 0.0345
(seulement 4!)
Lors de l' utilisation de la matrice d'identité de la matrice de mélange ( à savoir les signaux mixtes sont les mêmes que ceux d' origine), le eigenspectrum est: 0.0103 0.0199 0.0330 0.0811 0.1762
. Il y a encore une valeur beaucoup plus grande que les autres ..
Merci de votre aide.
Je m'excuse si les réponses à mes questions sont douloureusement évidentes, mais je suis vraiment nouveau dans les statistiques, l'ICA et Matlab. Merci encore.
ÉDITER
J'ai 500 échantillons de chaque signal, dans la plage [0,2, 100], par pas de 0,2, soit x = 0: 0,1: 100.
De plus, étant donné le modèle ICA: X = As + n (je n'ajoute aucun bruit pour le moment), je me réfère au spectre propre de la transposition de X, c'est-à-dire eig (cov (X ')).
MISE À JOUR
Comme suggéré (se référer aux commentaires), j'ai essayé FastICA sur seulement 2 signaux. Les résultats étaient assez bons (voir photo ci-dessous). La matrice de mélange utilisée était A = [0.75 0.25; 0.25 0.75]
. Cependant, le spectre eigens 0.1657 0.7732
n'a montré qu'une seule composante principale principale.
Ma question se résume donc à ce qui suit: Quelle fonction / équation / propriété puis-je utiliser pour vérifier si un certain nombre de vecteurs de signaux sont statistiquement indépendants?
la source
Réponses:
Les signaux 3 et 5 semblent être assez corrélés - ils partagent leur première harmonique. Si on me donnait deux mélanges de ceux-ci, je ne serais pas en mesure de les séparer, je serais tenté de mettre l'harmonique commune comme un signal et les harmoniques supérieures comme un deuxième signal. Et je me trompe! Cela pourrait expliquer la valeur propre manquante.
Les signaux 1 et 2 ne semblent pas indépendants non plus.
Un "contrôle de santé mentale" rapide et sale pour l'indépendance de deux séries consiste à faire un (x, y) tracé d'un signal par rapport à l'autre:
puis de faire le même tracé (x, y) avec un signal mélangé:
Si les deux tracés ont un aspect différent, vos signaux ne sont pas indépendants. Plus généralement, si le tracé (x, y) des données montre des "caractéristiques", des dissymétries, etc., c'est un mauvais présage.
Des tests d'indépendance appropriés (et ce sont les fonctions objectives utilisées dans la boucle d'optimisation ICA) incluent, par exemple, des informations mutuelles.
ICA récupère les signaux les plus indépendants dont un mélange linéaire produit vos données d'entrée . Il fonctionnera comme une méthode de séparation des signaux et ne récupérera les signaux d'origine que si ceux-ci étaient au maximum indépendants selon le critère d'optimisation utilisé dans votre implémentation ICA.
la source
Je ne suis pas un expert de l'ICA, mais je peux vous parler un peu de l'indépendance.
Comme certains des commentaires l'ont mentionné, l'indépendance statistique entre deux variables aléatoires peut être grossièrement interprétée comme «la quantité d'informations que l'observation d'une variable donne sur une autre».
Voici un code matlab qui générera deux signaux indépendants à partir d'une distribution conjointe construite, et deux à partir d'une distribution conjointe non indépendante, puis calculera les informations mutuelles des liaisons.
La fonction "computeMIplugin.m" est une fonction simple que j'ai écrite qui calcule les informations mutuelles en utilisant la formule de sommation ci-dessus.
Encore une fois, cela suppose que vous avez une bonne estimation de la distribution conjointe (ainsi que d'autres hypothèses), mais cela devrait être utile en règle générale.
la source
Comme mentionné ci-dessus, les signaux 3 et 5 semblent être assez corrélés et ont une période similaire.
Nous pouvons penser que deux signaux sont corrélés si nous pouvons décaler l'une des sources vers la gauche ou vers la droite et augmenter ou diminuer son amplitude afin qu'elle s'adapte au-dessus de l'autre source. Notez que nous ne modifions pas la fréquence de la source, nous effectuons simplement un décalage de phase et d'amplitude.
Dans le cas ci-dessus, nous pouvons déplacer la source 3 de sorte que ses pics coïncident avec la source 5. C'est le genre de chose qui gâchera l'extraction de la source lors de l'utilisation de l'ICA en raison de l'hypothèse d'indépendance.
Remarque : Une belle illustration du concept ci-dessus consiste à penser à deux ondes sinusoïdales. Ce sont tous deux complètement déterministes. S'ils ont tous les deux la même fréquence (même avec une phase différente) alors ils sont parfaitement corrélés et l'ICA ne pourra pas les séparer. Si au contraire ils ont des fréquences différentes (qui ne sont pas des multiples entiers les uns des autres), alors ils sont indépendants et peuvent être séparés.
Vous trouverez ci-dessous un code Matlab pour que vous puissiez le voir par vous-même
Notez que pour les ondes de même fréquence, ICA ne renvoie que les signaux d'entrée, mais pour différentes fréquences, il renvoie les sources d'origine.
la source
Rachel,
D'après mes recherches, j'ai jusqu'à présent pu trouver quelque chose appelé `` test Chi-Squared pour l'indépendance '', mais je ne sais pas comment cela fonctionne pour le moment, mais cela pourrait valoir le coup d'œil.
la source