AS cwiczenia ICA: Różnice pomiędzy wersjami
m |
|||
(Nie pokazano 5 wersji utworzonych przez 2 użytkowników) | |||
Linia 1: | Linia 1: | ||
+ | [[Analiza_sygnałów_-_ćwiczenia]]/ICA | ||
+ | |||
+ | |||
==Analiza składowych niezależnych== | ==Analiza składowych niezależnych== | ||
+ | |||
+ | Ogólna zasada działania algorytmu analizy składowych niezależnych (''Independent Component Analysis'', ICA) została wprowadzona na [[Analiza_sygnałów_wielowymiarowych|wykładzie]]. | ||
+ | |||
+ | Przypomnienie: | ||
+ | Rozważmy problem “cocktail party”, w którym próbujemy rozdzielić mieszaninę sygnałów zarejestrowanych przez kilka odbiorników znajdujących się w różnych miejscach na poszczególne źródła. Określając macierz sygnałów źródłowych, której kolumny oznaczają wartości sygnałów dla wszystkich źródeł w kolejnych chwilach czasu, jako <math>s</math>, oraz macierz mieszanin, zawierającą kolejne próbki czasowe sygnałów zarejestrowanych przez odbiorniki, jako <math>x</math>, możemy zapisać powyższą sytuację: | ||
+ | |||
+ | :<math>x_i(t) = \sum_{j=1}^M{a_{ij} s_j(t)}</math>, | ||
+ | |||
+ | gdzie w dowolnym punkcie czasowym <math>t</math>, wartość <math>x_i(t)</math> jest linową kombinacją wartości sygnałów źródłowych, z pewnymi stałymi współczynnikami mieszania <math>a_{ij}</math>. Po zgrupowaniu współczynników mieszających w macierzy <math>\mathbf{A} = [a_{ij}] \in\mathbb{R}_{M \times M}</math> model ten można zapisać za pomocą równania: | ||
+ | |||
+ | :<math>\mathbf{x} = \mathbf{A} \mathbf{s}</math>. | ||
+ | |||
+ | Przy pomocy tego modelu musimy wyestymować zarówno <math>\mathbf{A}</math>, jak i <math>\mathbf{s}</math>, dlatego zakładamy, że komponenty <math>s_i</math> są statystycznie ''niezależne'' i mają rozkład ''niegaussowski''. Zakładamy również, że macierz <math>\mathbf{A}</math> jest kwadratowa. Dzięki temu, po wyestymowaniu macierzy <math>\mathbf{A}</math>, obliczamy jej odwrotność <math>\mathbf{A}^{-1} = \mathbf{W}</math> i otrzymujemy niezależne komponenty: | ||
+ | |||
+ | :<math>\mathbf{s} = \mathbf{W} \mathbf{x}</math>. | ||
===Ćwiczenie 1=== | ===Ćwiczenie 1=== | ||
Linia 27: | Linia 45: | ||
===Ćwiczenie 2=== | ===Ćwiczenie 2=== | ||
− | *Wczytaj do Svaroga 10-minutowy fragment [[Plik:EEG-resting.bin| zapisu spoczynkowego EEG]] zarejestrowanego, kiedy osoba badana miała oczy zamknięte. Przeprowadź analizę ICA. Co można powiedzieć o rozkładzie przestrzennym wybranych komponentów i ich zawartości spektralnej? | + | Wczytaj przy pomocy pythona sygnały [http://www.fuw.edu.pl/~prozanski/sounds.zip audio] x1, x2 i x3 zarejestrowane przez trzy odbiorniki. Użyj do tego modułu <tt>scipy.io.wavfile</tt>: |
+ | |||
+ | <source lang=python> | ||
+ | from scipy.io import wavfile | ||
+ | |||
+ | rate, x1 = wavfile.read('x1.wav') | ||
+ | </source> | ||
+ | |||
+ | Następnie przeprowadź dekompozycję ICA. Zapisz otrzymane komponenty do plików audio: | ||
+ | |||
+ | <source lang=python> | ||
+ | from scipy.io import wavfile | ||
+ | |||
+ | wavfile.write('ica_s1.wav', rate, ica_s1) | ||
+ | </source> | ||
+ | |||
+ | i porównaj z orginalnymi sygnałami źródłowymi. | ||
+ | |||
+ | <!-- | ||
+ | *Wczytaj do Svaroga 10-minutowy fragment [[Plik:EEG-resting.bin| zapisu spoczynkowego EEG]] zarejestrowanego, kiedy osoba badana miała oczy zamknięte. Przeprowadź analizę ICA. Co można powiedzieć o rozkładzie przestrzennym wybranych komponentów i ich zawartości spektralnej? --> | ||
+ | |||
+ | |||
+ | [[Analiza_sygnałów_-_ćwiczenia]]/ICA |
Aktualna wersja na dzień 09:26, 1 paź 2016
Analiza_sygnałów_-_ćwiczenia/ICA
Analiza składowych niezależnych
Ogólna zasada działania algorytmu analizy składowych niezależnych (Independent Component Analysis, ICA) została wprowadzona na wykładzie.
Przypomnienie: Rozważmy problem “cocktail party”, w którym próbujemy rozdzielić mieszaninę sygnałów zarejestrowanych przez kilka odbiorników znajdujących się w różnych miejscach na poszczególne źródła. Określając macierz sygnałów źródłowych, której kolumny oznaczają wartości sygnałów dla wszystkich źródeł w kolejnych chwilach czasu, jako [math]s[/math], oraz macierz mieszanin, zawierającą kolejne próbki czasowe sygnałów zarejestrowanych przez odbiorniki, jako [math]x[/math], możemy zapisać powyższą sytuację:
- [math]x_i(t) = \sum_{j=1}^M{a_{ij} s_j(t)}[/math],
gdzie w dowolnym punkcie czasowym [math]t[/math], wartość [math]x_i(t)[/math] jest linową kombinacją wartości sygnałów źródłowych, z pewnymi stałymi współczynnikami mieszania [math]a_{ij}[/math]. Po zgrupowaniu współczynników mieszających w macierzy [math]\mathbf{A} = [a_{ij}] \in\mathbb{R}_{M \times M}[/math] model ten można zapisać za pomocą równania:
- [math]\mathbf{x} = \mathbf{A} \mathbf{s}[/math].
Przy pomocy tego modelu musimy wyestymować zarówno [math]\mathbf{A}[/math], jak i [math]\mathbf{s}[/math], dlatego zakładamy, że komponenty [math]s_i[/math] są statystycznie niezależne i mają rozkład niegaussowski. Zakładamy również, że macierz [math]\mathbf{A}[/math] jest kwadratowa. Dzięki temu, po wyestymowaniu macierzy [math]\mathbf{A}[/math], obliczamy jej odwrotność [math]\mathbf{A}^{-1} = \mathbf{W}[/math] i otrzymujemy niezależne komponenty:
- [math]\mathbf{s} = \mathbf{W} \mathbf{x}[/math].
Ćwiczenie 1
- Wygeneruj 3-kanałowy sygnał źródłowy S będący superpozycją sinusa o częstości 5 Hz, prostokąta i piły z odpowiednimi współczynnikami, określanymi jako współczynniki mieszania:
A = np.array([[1, 1, 1], [2.0, 0.5, 1.0], [1.5, 1.5, 0.5]]).T
- Przeprowadź dekompozycję sygnału przy pomocy implementacji ICA w pakiecie scikit-learn. W tym celu należy zaimportować funkcję FastICA:
from sklearn.decomposition import FastICA
Dekompozycja ICA wygląda następująco:
ica = FastICA(n_components=3) # liczba komponentów równa jest liczbie kanałów
S_ = ica.fit_transform(X) # macierz zrekonstruowanych sygnałów źródłowych S; X jest macierzą mieszanin
A_ = ica.mixing_ # wyestymowana macierz mieszająca
- Następnie porównaj otrzymany wynik z wynikiem dekompozycji przeprowadzonej przy pomocy programu Svarog. W tym celu wyeksportuj sygnał do pliku binarnego, a następnie wybierz Tools -> Independent Component Analysis -> Compute ICA.
Ćwiczenie 2
Wczytaj przy pomocy pythona sygnały audio x1, x2 i x3 zarejestrowane przez trzy odbiorniki. Użyj do tego modułu scipy.io.wavfile:
from scipy.io import wavfile
rate, x1 = wavfile.read('x1.wav')
Następnie przeprowadź dekompozycję ICA. Zapisz otrzymane komponenty do plików audio:
from scipy.io import wavfile
wavfile.write('ica_s1.wav', rate, ica_s1)
i porównaj z orginalnymi sygnałami źródłowymi.