Laboratorium EEG/CSP: Różnice pomiędzy wersjami

Z Brain-wiki
Linia 870: Linia 870:
 
Wektor własny <math>\vec{p}_i</math> jest interpretowany jako filtr przestrzenny. Dzięki transformacie <math>P</math> sygnał zostaje przeniesiony do przestrzeni, dla której różnica wariancji dla poszczególnych klas jest największa. Zgodnie z równaniem 2.5 najbardziej różniące się od siebie kanały są skorelowane z największą wartością własną <math>k^{+}</math>.
 
Wektor własny <math>\vec{p}_i</math> jest interpretowany jako filtr przestrzenny. Dzięki transformacie <math>P</math> sygnał zostaje przeniesiony do przestrzeni, dla której różnica wariancji dla poszczególnych klas jest największa. Zgodnie z równaniem 2.5 najbardziej różniące się od siebie kanały są skorelowane z największą wartością własną <math>k^{+}</math>.
 
-->
 
-->
 +
<!--
 +
==Zastosowanie filtra CSP do detekcji potencjału P300==
 +
{{hidden begin|title=Eksperyment}}
 +
===Eksperyment===
 +
* Proszę zapoznać się z instrukcją: http://laboratorium-eeg.braintech.pl/rozdz10.html
 +
* Proszę wczytać i uruchomić (na sucho) demo Demos->EEG_P300wz
 +
* Wspólne omówienie konstrukcji i potencjalnych modyfikacji tego scenariusza
 +
 +
====Przygotowanie do badania:====
 +
* założyć czepek z elektrodami w systemie 10-20;
 +
* elektrody referencyjne: M1 i M2;
 +
* elektroda GND w pozycji AFz.
 +
 +
====Przygotowanie scenariuszy obci ====
 +
* w terminalu uruchomić <tt>obci srv</tt>;
 +
* w terminalu uruchomić <tt>obci_gui --preset brain2013</tt>;
 +
* w interfejsie GUI zapisujemy scenariusze do własnego katalogu np &bdquo;P300&rdquo;
 +
** &bdquo;P-Brain2013 Signal (with ID)&rdquo; jako np. &bdquo;Sygnal&rdquo;
 +
** &bdquo;P-Brain2013 Calibration p300&rdquo; jako &bdquo;kalibracjaP300&rdquo;
 +
** &bdquo;P-Brain 2013 p300&rdquo; jako &bdquo;Labirynt&rdquo;
 +
* w przeglądarce plików otwórz katalog ~/.obci/scenarios/P300. Powinien on zawierać pliki: Sygnal.ini, kalibracjaP300.ini, Labirynt.ini oraz katalogi  Sygnal_configs, kalibracjaP300_configs, Labirynt_configs.
 +
*  edytujemy parametry peerów.
 +
** z katalogu ~/.obci/scenarios/P300/Sygnal_configs kopiujemy plik amplifier.ini do katalogu ~/.obci/scenarios/P300 jako global_amplifier.ini. To pozwoli nam zmieniać ustawienia wzmacniacza dla wszystkich scenariuszy jednocześnie.
 +
** w naszych scenariuszach zapisanych w plikach Sygnal.ini, kalibracjaP300.ini, Labirynt.ini podmieniamy ścieżkę <tt>config =</tt> w sekcji <tt>[peers.amplifier]</tt> tak, aby pokazywała na ten skopiowany plik global_amplifier.ini
 +
** w tym pliku global_amplifier.ini podmieniamy linijki (tak aby były to listy faktycznie wykorzystywanych kanałów) z:
 +
*** <tt>active_channels</tt>
 +
*** <tt>channel_names</tt>
 +
** dodajemy też linijkę: <tt>sampling_rate = 256</tt>
 +
* wchodzimy po kolei do katalogów: Sygnal_configs, kalibracjaP300_configs, Labirynt_configs i odnajdujemy plik switch_backup.ini. W tym pliku ustawiamy parametr <tt>new_scenario</tt> na pusty. To spowoduje, że scenariusze te nie będą uruchamiać kolejnych scenariuszy po zakończeniu działania.
 +
** edytujemy plik ~/.obci/scenarios/P300/kalibracjaP300_configs/clasifier.ini
 +
*** zmieniamy linię
 +
::: <tt>ignore_channels = DriverSaw;AmpSaw;PO7;PO8</tt>
 +
::: na
 +
::: <tt>ignore_channels = DriverSaw;AmpSaw;A1;A2</tt>
 +
::* oraz linię:
 +
::: <tt>montage_channels = PO7;PO8</tt>
 +
::: na
 +
::: <tt>montage_channels = A1;A2</tt>
 +
 +
====Przeprowadzenie badania:====
 +
# Uruchom scenariusz &bdquo;Sygnał&rdquo;.
 +
# Tworzy on w katalogu domowym plik o nazwie <tt>file_id_name</tt>.
 +
# Uruchamiamy Svaroga z terminala poleceniem <tt>svarog</tt>. W zakładce sygnały on-line odnajdujemy nazwę naszego scenariusza &bdquo;Sygnal&rdquo;. Podłączamy się do niego i poprawiamy ewentualnie źle kontaktujące elektrody.
 +
# Jak już jesteśmy zadowoleni z jakości sygnału to zatrzymujemy scenariusz &bdquo;Sygnal&rdquo; w obci.
 +
# W pliku <tt>file_id_name</tt>  znajduje się string, który stanowi rdzeń do tworzenia nazw plików, z których korzystają nasze scenariusze. Proszę zmienić ten string np. na: <tt>test1</tt>.
 +
# Uruchamiamy scenariusz &bdquo;kalibracjaP300&rdquo;. Badany będzie oglądał interfejs z trzema literami A B C migającymi w losowej kolejności. Zadaniem jest zliczanie mignięć litery B.
 +
# Po zakończeniu kalibracji uruchamiamy scenariusz &bdquo;Labirynt&rdquo;.
 +
# Danych z kalibracji potrzebować będziemy kilka zestawów.  Proszę powtórzyć kilkukrotnie scenariusz &bdquo;kalibracjaP300&rdquo;. Przed każdym uruchomieniem trzeba zmienić string w pliku <tt>file_id_name</tt> np. na <tt>test???</tt> gdzie <tt>???</tt> oznacza kolejne numery.
 
-->
 
-->
 +
{{hidden end}}

Wersja z 13:51, 13 kwi 2026

Laboratorium_EEG/BSS

Plan zajęć

Materiał realizowany jest w ciągu 3 tygodni (6 spotkań po ~2,5 h).

Sesja Temat Kluczowe sekcje na tej stronie
1 Wykład BSS + CSP; ćwiczenie symulacyjne Ślepa separacja źródeł, Common Spatial Pattern, Ćwiczenie symulacyjne
2 Dane P300: wczytanie, cięcie epok, wizualizacja ERP, implementacja CSP Analiza wstępna, Analiza CSP
3 Mapki topograficzne; separacja cech Analiza CSP (cd.), Wybór i separacja cech
4 cosSinCSP jako uogólnienie CSP; dane SSVEP Filtry przestrzenne dla SSVEP
5 Wykład ICA; komponenty alfa ICA jako filtr przestrzenny, Komponenty alfa
6 Artefakty (ICLabel/MARA); synteza CSP/cosSinCSP/ICA Identyfikacja artefaktów

Sesja 1: Ślepa separacja źródeł i CSP — wprowadzenie

Czas
~60 min wykład + ~90 min ćwiczenie symulacyjne

Zajęcia wprowadzają do problemu filtracji przestrzennej sygnałów EEG. Punktem wyjścia jest ogólny problem ślepej separacji źródeł (BSS), z którego CSP wyłania się jako szczególny przypadek dla dwóch warunków eksperymentalnych. Filtry przestrzenne omawiane na tych zajęciach stanowią fundament klasycznych metod BCI (P300, SSVEP, motor imagery) oraz są bezpośrednim odpowiednikiem warstw przestrzennych w sieciach neuronowych takich jak ShallowConvNet i EEGNet — do tej analogii wrócimy w sesji 6.

Slajdy do wykładu (PDF)

Zakres wykładu
  • model generatywny EEG: [math]x(t) = As(t)[/math], macierz kowariancji, idea diagonalizacji
  • BSS jako ogólny problem separacji źródeł
  • CSP jako szczególny przypadek: dwa warunki eksperymentalne, iloraz Rayleigha, uogólnione zagadnienie własne
  • interpretacja filtrów i topografii źródeł
Ćwiczenie symulacyjne

Zob. Ćwiczenie symulacyjne w sekcji CSP poniżej.


Ćwiczenie symulacyjne

Sesja 2: CSP dla P300 — dane realne

Czas
~150 min (jedno spotkanie)

Studenci pracują z danymi kalibracyjnymi z eksperymentu P300. Celem sesji jest przejście pełnego pipeline'u: od surowych danych do odtworzonych źródeł CSP.

Zakres
  • wczytanie danych kalibracyjnych, identyfikacja znaczników T i NT
  • cięcie epok (−200 do +800 ms), usuwanie trendu liniowego
  • montaż względem połączonych uszu
  • wizualizacja ERP w układzie topograficznym
  • obliczenie macierzy kowariancji RT i RNT, normalizacja przez ślad
  • rozwiązanie uogólnionego zagadnienia własnego: [W, Lambda] = eig(R_T, R_NT)
  • odtworzenie sygnałów źródłowych: S = W'*EEG
  • przegląd estymowanych źródeł w dwóch warunkach
Materiały

Zob. Analiza wstępna i Analiza CSP poniżej.

Analiza wstępna

Poszczególne etapy analizy proszę kodować w osobnych funkcjach. Funkcje te powinny być wywoływane z nadrzędnego skryptu, który powinien umożliwic wykoanie całości analiz.

  • Wczytać dane kalibracyjne do Matlaba i pociąć je na realizacje typu T — „target” (związane z wystąpieniami litery „B”) i NT — „non-target” (pozostałe litery) o długości −200 do +800 ms wokół triggerów. Dla każdej realizacji odjąć trend liniowy.
  • Sygnał zmontować wzgl. „połączonych uszu” i wyświetlić średnie przebiegi dla warunku T i NT w układzie topograficznym — można wykorzystać w tym celu poniższy fragment kodu.

Poniżej zaprezentowany jest przykładowy skrypt do cięcia danych wokół znaczników. Działa on z plikami zawartymi w archiwum:

Plik:KalibracjaP300.tar.gz

Korzysta z funkcji pomocniczych dostępnych w dystrybucji obci w katalogu

/usr/share/openbci/analysis/matlab_obci_signal_processing

Openbci można pobrać z https://github.com/BrainTech/openbci

ZADANIE: Analiza CSP

Przegląd badań o P300: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2715154/

Link do Read menager [1]

  • Wykonać analizę CSP wzmacniającą potencjał P300.
  • Zaprezentować średnią ze wszystkich kanałów źródłowych z warunku target (jeden kolor) i non-target (inny kolor) w subplotach ułożonych w prostokątnej siatce. Zaobserwować dla którego kanału średnie różnią się najbardziej. Czy jest związek tego kanału z wartościami własnymi?
  • Dla kanału najbardziej różnicującego wykonać mapki topograficzne (do wykonania tych mapek wykorzystać funkcję topoplot z pakietu eeglab) wektorów odpowiadających:
    • filtrowi przestrzennemu
    • rzutu topograficznego źródła na elektrody.

Filtry przestrzenne dla SSEP

ICA jako filtr przestrzenny

ZADANIE: Identyfikacja artefaktów

Proszę pobrać dane:

Pochodzą one z eksperymentu w którym osoba badana czytała słowa o różnych właściwościach wzbudzania emocji.

  • wczytaj je do eeglaba
  • wczytaj lokalizację kanałów z pliku Arousal-10-20-Cap.locs
  • obejrzyj przebiegi czasowe
  • odrzuć kanał z diodą (21) i z GSR (20)
  • zrób dekompozycję ICA
  • obejrzyj topografię komponentów
  • zidentyfikuj komponenty odpowiadające mruganiu i aktywności mięśniowej.
UWAGA
Aktualnie do wykrywania komponentów artefaktowych warto posłużyć się wtyczkami do eeglaba dostępnymi przez stronę:

https://sccn.ucsd.edu/eeglab/plugin_uploader/plugin_list_all.php

  • ICLabel
  • MARA

W raporcie:

  • zaprezentuj fragmenty sygnału zawierającego artefakty oczne i mięśniowe przed i po zastosowaniu czyszczenia poprzez usuwanie komponentów zdominowanych przez artefakty.
  • zaprezentuj topografię i przebiegi czasowe komponentów zidentyfikowanych jako artefakty oczne i mięśniowe.