2012-02-21 8 views
5

Attualmente sto creando diversi segnali usando Matlab, mescolandoli moltiplicandoli per una matrice di missaggio A, e quindi cercando di recuperare i segnali originali usando FastICA.ICA - Statistical Independence & Eigenvalues ​​of Covariance Matrix

Finora, i segnali recuperati sono davvero cattivi se confrontati con quelli originali, il che non era quello che mi aspettavo.

Sto cercando di capire se sto facendo qualcosa di sbagliato. I segnali Sto elettrogeni sono i seguenti: (. Le ampiezze sono nell'intervallo [0,1])

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 

Original Signals

Una condizione per ICA abbia successo è che al massimo un segnale è gaussiana e l'ho osservato nella generazione del segnale.

Tuttavia, un'altra condizione è che tutti i segnali sono statisticamente indipendenti.

Tutto quello che so è che questo significa che, dati due segnali A & B, conoscere un segnale non fornisce alcuna informazione rispetto all'altro, ovvero: P (A | B) = P (A) dove P è la probabilità.

Ora la mia domanda è questa: I miei segnali sono statisticamente indipendenti? C'è qualche modo per determinare questo? Forse alcune proprietà che devono essere osservate?

Un'altra cosa che ho notato è che quando ho calcolare gli autovalori della matrice di covarianza (calcolato per la matrice contenente i segnali misti), l'eigenspectrum sembra dimostrare che v'è una sola (principale) componente principale. Cosa significa veramente? Non dovrebbe esserci 5, dal momento che ho 5 (presumibilmente) segnali indipendenti?

Ad esempio, quando si utilizza la matrice seguente miscelazione:

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 

Gli autovalori sono: 0.0000 0.0005 0.0022 0.0042 0.0345 (! Soltanto 4)

Quando si utilizza la matrice identità come matrice di miscelazione (cioè i segnali misti sono lo stesso di quelli originali), l'eigenspectrum è: 0.0103 0.0199 0.0330 0.0811 0.1762. C'è ancora un valore molto più grande del resto ..

Grazie per il vostro aiuto.

Mi scuso se le risposte alle mie domande sono dolorosamente ovvie, ma sono davvero nuovo per le statistiche, ICA e Matlab. Grazie ancora.

EDIT - Ho 500 campioni di ciascun segnale, nell'intervallo [0,2, 100], in incrementi di 0,2, cioè x = 0:0.1:100.

EDIT - dato il modello ICA: X = Come + n (io non sono l'aggiunta di alcun rumore al momento), ma mi riferisco al eigenspectrum della trasposta di X, vale a dire eig(cov(X')).

risposta

0

Per trovare se i segnali sono reciprocamente indipendenti è possibile osservare le tecniche descritte here In generale due variabili casuali sono indipendenti se sono ortogonali.Ciò significa che: E {s1 * s2} = 0 Significa che l'aspettativa della variabile casuale s1 moltiplicata per la variabile casuale s2 è zero. Questa condizione di ortogonalità è estremamente importante in statistica e probabilità e si presenta ovunque. Sfortunatamente si applica a 2 variabili alla volta. Esistono tecniche multivariabili, ma nessuna delle quali mi sentirò a mio agio nel raccomandare. Un altro link che ho trovato è stato questo one, non sono sicuro di quale sia la tua applicazione, ma quella carta è molto ben eseguita.

Quando ho calcolare la matrice di covarianza ottengo:

cov(A) = 
0.0619 -0.0284 -0.0002 -0.0028 -0.0010 
-0.0284 0.0393 0.0049 0.0007 -0.0026 
-0.0002 0.0049 0.1259 0.0001 -0.0682 
-0.0028 0.0007 0.0001 0.0099 -0.0012 
-0.0010 -0.0026 -0.0682 -0.0012 0.0831 

Con autovettori, V e valori D:

[V,D] = eig(cov(A)) 

V = 

-0.0871 0.5534 0.0268 -0.8279 0.0063 
-0.0592 0.8264 -0.0007 0.5584 -0.0415 
-0.0166 -0.0352 0.5914 -0.0087 -0.8054 
-0.9937 -0.0973 -0.0400 0.0382 -0.0050 
-0.0343 0.0033 0.8050 0.0364 0.5912 
D = 
0.0097   0   0   0   0 
    0 0.0200   0   0   0 
    0   0 0.0330   0   0 
    0   0   0 0.0812   0 
    0   0   0   0 0.1762 

Ecco il mio codice:

x = transpose(0.2:0.2:100); 
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(length(x), 1); % gaussian 
s5 = (sawtooth(x, 0.75)+ 1) * 0.5; % sawtooth 
A = [s1 s2 s3 s4 s5]; 
cov(A) 
[V,D] = eig(cov(A)) 

fatemi sapere se Posso aiutare di più, o se ho frainteso.

EDIT propriamente denominato autovalori e vettori, utilizzato 0,2 intervallo di campionamento codice aggiunto.

+0

Ho usato x = 0.2: 0.2: 100 (Ho appena aggiunto questo dettaglio alla mia domanda originale - grazie per averlo indicato.) Come sei arrivato a quella matrice di covarianza? La matrice di covarianza per la matrice di missaggio A che ho postato nella domanda è diversa. Inoltre, l'uso di eig (cov (A)) fornisce gli autovalori, non gli autovettori, della matrice. A parte questo, non mi riferivo agli autovalori della matrice di covarianza di A, ma agli autovalori della matrice di covarianza dei segnali misti. Aggiungerò questo alla mia domanda per renderla più chiara. – Rachel

+0

Oh e grazie per il link, ma puoi spiegarci meglio? Come ho detto, sono un principiante delle statistiche. Mi piacerebbe sapere se esiste un metodo generale utilizzato per verificare se un numero di segnali è statisticamente indipendente o meno. – Rachel

+0

Grazie per il tuo commento, tuttavia, non mi ha davvero portato da nessuna parte. Il mio problema non era quello di calcolare gli autovalori, ma più del perché gli autovalori sono quello che sono .. Si può vedere che uno degli autovalori è relativamente grande.Penserei che per i segnali statisticamente indipendenti, gli autovalori sarebbero più o meno uguali, e mi piacerebbe sapere se questo è vero. Inoltre, non ho ancora trovato un modo concreto per verificare se i miei segnali sono indipendenti o meno. – Rachel

1

I segnali sono correlati (non indipendenti). A prima vista, il dente di sega e il seno sono lo stesso periodo. Dimmi il valore di uno ti dirò il valore dell'altro, perfetta correlazione.

Se si modifica il periodo di uno di essi che li renderà più indipendenti.

Anche S1 e S2 sono un po 'correlati.

Per quanto riguarda gli autovalori, innanzitutto i segnali non sono indipendenti (vedere sopra).

In secondo luogo, anche la matrice di filtro A non è ben condizionata, diffondendo ulteriormente gli autovalori.

Anche se si dovesse pipe in cinque completamente indipendente (IID, bla bla) segnala la covarianza sarebbe:

E[ A y y' A' ] = E[ A I A' ] = A A' 

Gli autovalori di che sono:

eig(A*A') 
ans = 

    0.000167972216475 
    0.025688510850262 
    0.035666735304024 
    0.148813869149738 
    1.042451912479502 

Quindi sei davvero filtrando/squiggendo tutti i segnali su una funzione/grado di libertà su una base e naturalmente saranno difficili da recuperare, qualunque metodo tu usi.

+0

Grazie per il tuo commento @Nate. Ho alcune domande, se non ti dispiace. Prima di tutto, cosa intendi con "cinque segnali completamente indipendenti (iid, yada yada)". Come faresti a sapere se i segnali sono effettivamente indipendenti? E cosa c'è (iid, yada, yada)? – Rachel