Attualmente sto creando segnali diversi usando Matlab, mescolandoli moltiplicandoli per una matrice di missaggio A, e quindi cercando di recuperare i segnali originali usando FastICA .
Finora, i segnali recuperati sono davvero cattivi rispetto a quelli originali, che non era quello che mi aspettavo.
Sto cercando di vedere se sto facendo qualcosa di sbagliato. I segnali che sto generando sono i seguenti:
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 condizione affinché l'ICA abbia successo è che al massimo un segnale è gaussiano e l'ho osservato nella mia generazione del segnale.
Tuttavia, un'altra condizione è che tutti i segnali siano statisticamente indipendenti.
Tutto quello che so è che ciò significa che, dati due segnali A e 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'è un modo per determinarlo? Forse qualche proprietà che deve essere osservata?
Un'altra cosa che ho notato è che quando calcolo gli autovalori della matrice di covarianza (calcolata per la matrice contenente i segnali misti), l'eigenspectrum sembra mostrare che esiste un solo componente principale (principale) . Cosa significa veramente? Non dovrebbero esserci 5, dato che ho 5 (presumibilmente) segnali indipendenti?
Ad esempio, quando si utilizza la seguente matrice di 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
(solo 4!)
Quando si utilizza la matrice identità come matrice di miscelazione (cioè i segnali misti sono uguali a quelli originali), il eigenspectrum è: 0.0103 0.0199 0.0330 0.0811 0.1762
. C'è ancora un valore molto più grande del resto ..
Grazie per l'aiuto.
Mi scuso se le risposte alle mie domande sono dolorosamente ovvie, ma sono davvero nuovo alle statistiche, ICA e Matlab. Grazie ancora.
MODIFICARE
Ho 500 campioni di ciascun segnale, nell'intervallo [0,2, 100], con incrementi di 0,2, ovvero x = 0: 0,1: 100.
Inoltre, dato il modello ICA: X = As + n (al momento non sto aggiungendo alcun rumore), mi riferisco all'eigenspectrum del trasposizione di X, cioè eig (cov (X ')).
AGGIORNARE
Come suggerito (fare riferimento ai commenti), ho provato FastICA su solo 2 segnali. I risultati sono stati abbastanza buoni (vedi foto sotto). La matrice di miscelazione utilizzata era A = [0.75 0.25; 0.25 0.75]
. Tuttavia, l'eigenspectrum 0.1657 0.7732
mostrava ancora solo un componente principale principale.
La mia domanda si riduce quindi a quanto segue: Quale funzione / equazione / proprietà posso usare per verificare se un numero di vettori di segnale sono statisticamente indipendenti?