Przeskocz do treści

Delta mi!

Zrób to sam

Interfejs mózg-komputer (2) - wykonanie doświadczenia

Wyobraź sobie, że siedzisz w swoim pokoju, zamierzasz zgasić światło, myślisz o tym i światło gaśnie – komputer odczytał Twoją myśl i światło wyłączył. Jest to bardziej realne, niż mogłoby się wydawać!

obrazek

Co prawda, zamiast jedynie myśleć o zgaszeniu światła, musisz się zrelaksować, mieć przyklejone do głowy kilka elektrod i dysponować odpowiednim sprzętem oraz oprogramowaniem do analizy sygnału. Przy odrobinie pracy, niewielkich nakładach finansowych i łucie szczęścia możesz coś takiego zrobić w domu! Ci, którzy czytali poprzednią część tego artykułu, zapewne już mają kilka pomysłów. Tutaj przekażemy garść informacji potrzebnych do rozpoczęcia samodzielnych prób złożenia interfejsu mózg-komputer.

Teoretyczne aspekty powstawania czynności bioelektrycznej mózgu omówiłyśmy w poprzednim artykule. Dla przypomnienia: EEG to zapis aktywności bioelektrycznej mózgu, nie przekazuje ono nam wszakże, co człowiek myśli, można z niego jedynie wywnioskować coś o sposobie pracy dużych grup neuronów – na przykład zbadać, które obszary mózgu intensywniej pracują. Wreszcie, w momencie zamknięcia oczu lub w stanie relaksu obserwujemy wzrost amplitudy w tzw. paśmie alfa, czyli w składowych sygnału o częstościach z przedziału, umownie, od 8 do 15 Hz. Posiadając tę wiedzę oraz trochę ogólnych informacji i umiejętności z dziedziny informatyki, matematyki i fizyki, mamy podstawy do złożenia prostego interfejsu mózg-komputer.

Wszystko zaczyna się od zebrania sygnału, a do tego potrzebujemy odpowiedniego sprzętu i oprogramowania. Skąd wziąć sprzęt? Musimy mieć na pewno wzmacniacz sygnału i elektrody. Jedna profesjonalna elektroda EEG to koszt około 70 zł, a potrzebujemy ich więcej. Jeśli chodzi o wzmacniacze EEG, ceny są jeszcze bardziej zaporowe – koszt prostego wzmacniacza o niskiej rozdzielczości i małej liczbie kanałów (rzędu kilku) to kilka tysięcy złotych. Na szczęście, już przed nami mnóstwo ludzi zapragnęło sterować swoim komputerem wyłącznie za pomocą myśli i nie miało dużo pieniędzy do wydania. W efekcie powstało trochę instruktaży, jak stosunkowo niskim kosztem przygotować odpowiednie urządzenia. Miejscem, gdzie należy szukać szczegółowych informacji na ten temat, jest witryna projektu Open EEG. Tutaj, z uwagi na brak miejsca, opiszemy dość ogólnie podstawowe kroki, które należy poczynić. W zależności od tego, jak „niskopoziomowo” chcemy do tego podejść, możemy wziąć schemat obwodu takiego wzmacniacza i samodzielnie go zlutować zgodnie z instrukcjami bądź też skorzystać z gotowego półproduktu. Jeśli chodzi o elektrody, porządne, samodzielne ich wykonanie jest niezmiernie trudne dla osoby początkującej, niemającej wcześniej styczności z techniką oklejania, a ta część jest dość kluczowa w procesie zbierania EEG. Dlatego też, aby nie mnożyć potencjalnych miejsc, w których popełniamy błąd, tworząc nasz własny interfejs mózg-komputer, polecamy zainwestować w trzy elektrody (to mniej więcej minimum potrzebne do zebrania sygnału) bądź spróbować skontaktować się z jakąś placówką badawczą lub szpitalem i spytać, czy nie mają zużytych elektrod, które mogliby odstąpić młodym pasjonatom nauki.

Skąd wziąć oprogramowanie? Jeśli chodzi o komunikację z wymienionym powyżej sprzętem, też możemy do tego podejść na różnych poziomach samodzielnego zaangażowania. Dostępny jest firmware, który należy samodzielnie wgrać na mikrokontroler (dla tych, którzy się przestraszyli: jest to prosta czynność wymagająca użycia odpowiedniego urządzenia zwanego programatorem, dostępnego w sklepach elektronicznych, oraz odpowiedniego oprogramowania dostępnego w Internecie). Z zawartych w nim komentarzy można zaczerpnąć informacji na temat protokołu komunikacji. Można też podejrzeć gotowy program do interpretowania danych z tych płytek. Następnie przydałoby się obejrzeć dane, które zbieramy. Tu znów na stronie projektu Open EEG znajdziemy trochę ciekawych linków, można też próbować użyć oprogramowania projektu openBCI (tu szczególnie zachęcamy do kontaktowania się z autorkami tekstu, które chętnie pomogą w razie problemów).

Mamy sygnał, i co dalej? Załóżmy, że mamy już podłączony sprzęt. „Leci” z niego sygnał – math  razy na sekundę dostajemy próbkę – wartość sygnału w danej chwili ( math  to tzw. częstość próbkowania). Teraz z tych liczb musimy wydobyć interesujące nas informacje. Jak to się robi profesjonalnie? Wypada o tym wiedzieć, choć w praktyce uprościmy nasze postępowanie do tego stopnia, że wiedza taka nie będzie nam bardzo potrzebna.

Na wstępie trzeba mieć świadomość jak dalekie są liczby, które zebraliśmy, od reprezentowania czystej, rzeczywistej aktywności elektrycznej mózgu. Jak już wiemy z poprzedniego artykułu, sygnał, który zbieramy, zawiera różne zanieczyszczenia. Dobrze je odfiltrować przed przystąpieniem do dalszej analizy. Po pierwsze, na zapis aktywności elektrycznej mózgu nałoży się prąd płynący w sieci elektrycznej. Te zakłócenia powinny być równomiernie rozłożone na wszystkich elektrodach, więc zastosowanie specjalnego "montażu", na przykład odejmowanie od każdego kanału średniej pozostałych, czy też wartości z ustalonej elektrody, zwanej elektrodą odniesienia. Nie da się jednak, niestety, identycznie wykonać dwóch różnych części wzmacniacza, więc wzmocnienie na każdym kanale będzie trochę inne i składowe zanieczyszczeń będą występować z inną intensywnością. Im dokładniej wykonany wzmacniacz, tym łatwiej usunąć z niego to "50 Hz". Ponadto, aktywność mięśni, serca, gałek ocznych generuje dużo silniejsze potencjały elektryczne niż mózg. Momenty mrugnięcia okiem są więc wyraźnie zauważalne w sygnale EEG i utrudniają analizę. Są różne podejścia do radzenia sobie z nimi – można podczas pomiaru EEG zakładać elektrody również wokół oczu, i wycinać z sygnału EEG fragmenty odpowiada jące momentom mrugnięcia okiem. Można też wykorzystywać matematyczne metody, np. różnego rodzaju modelowanie, do redukcji tych tzw. artefaktów. Ponadto należy się upewnić, że sygnał próbkowaliśmy z wystarczającą dla naszych potrzeb częstością. Jeśli częstość próbkowania wynosi math to nawet jeśli w rzeczywistości nasz mózg generuje sygnały o częstości większej niż math nie zobaczymy ich w sygnale EEG. Ma to związek z tzw. zjawiskiem aliasingu. Jak mówi twierdzenie o próbkowaniu:

Twierdzenie. Sygnał ciągły math możemy odtworzyć z wektora jego wartości w dyskretnych chwilach czasu math jeśli nie było w nim częstości wyższych niż math

Inaczej, jeśli w sygnale powstającym w mózgu wystąpią składowe o częstościach wyższych, niż połowa częstości próbkowania, to rozpoznamy je mylnie jako jakąś inną częstość. Najprostszy przykład: naszym sygnałem jest funkcja o okresie 1/128 sekundy. Próbkujemy sygnał 128 razy na sekundę. za każdym razem dostaniemy tę samą wartość, zatem będziemy widzieć sygnał płaski. Aby zapobiec aliasingowi, wzmacniacze mają wbudowany analogowy filtr dolnoprzepustowy. Ma to znaczenie np. w przypadku badania specyficznych zaburzeń, gdy spodziewamy się zobaczyć częstości rzędu nawet 1000 Hz – nie możemy wtedy robić badań wzmacniaczem, który nie obsługuje częstości próbkowania co najmniej 2000 Hz. Tak samo, jeśli chcielibyśmy zobaczyć odpowiedź SSVEP na częstość 33 Hz – nie wystarczy nam próbkowanie 64 Hz.

Po wstępnej obróbce sygnału, to, co mamy, to wciąż wartości w określonych chwilach czasu. Dużo liczb, które w tej postaci niewiele nam mówią. Potrzebny jest nam inny sposób reprezentacji sygnału – związany ze zjawi- skami, które spodziewamy się zaobserwować. Ponieważ spodziewamy się zaobserwować zmiany w określonych pasmach częstości, jednym z pierwszych pomysłów jest zbadanie, jakie częstości występują w sygnale I z jaką amplitudą. Można dokonać tego np. za pomocą transformaty Fouriera.

display-math

Weźmy próbkowanie 128 Hz. Z jednej sekundy sygnału mamy 128 próbek. Interesują nas na przykład zmiany, które zachodzą tylko w trzech pasmach (przedziałach) częstości. Wystarczy przejść z dziedziny czasu, do dziedziny częstości (co daje nam właśnie transformata Fouriera), i badać wartości funkcji math w odpowiednim przedziale częstości. Zysk z tego dwojaki – zredukowaliśmy liczbę danych do analizy – mamy już tylko kilka punktów, zamiast 128, oraz obecne wartości przekazują już jakąś informację ściśle związanąz rzeczywistością.

Na podstawie „cech”, które wybraliśmy do opisu sygnału, chcemy odgadywać jakie zjawisko zaszło. Cechy zmieniają swoją wartość, gdy w mózgu zachodzą określone procesy. I tak np. spadek wartości energii w pewnym paśmie częstości na pewnych elektrodach prawej półkuli może odpowiadać wyobrażaniu ruchu lewą ręką, spadek wartości energii na odpowiednich elektrodach lewej półkuli (lateralizacja!) może odpowiadać wyobrażeniu ruchu prawą ręką itd. Chcemy zbudować klasyfikator, który świeżo otrzymaną wartość cechy przypisze do odpowiedniego zbioru, powiązanego z określonym zjawiskiem, mówiąc nam w ten sposób co właśnie się stało. Ponieważ u każdego pacjenta dane zjawiska przejawiają swoją obecnośćą w trochę inny sposób, to zmiany mogą być widoczne na innych elektrodach, w innych przedziałach częstości, z różnym opóźnieniem – należy zatem najpierw przeprowadzić sesję treningową, w której klasyfikator nauczy się jak wyglądają cechy u danego pacjenta. Na przykład, każemy pacjentowi wyobrażać sobie ruch prawą ręką – klasyfikator dopasuje swoje parametry, wiedząc co robi w danym momencie pacjent. Wspominałyśmy w szczególności, że będziemy się opierać na zmianach w paśmie alfa. Ale przecież u każdego występuje ono w trochę innym zakresie częstości. Dlatego podczas sesji treningowej komputer powinien poznać ten zakres.

W stosunku do profesjonalnej analizy sygnału EEG zastosujemy następujące uproszczenia. Po pierwsze, zadowolimy się surowym sygnałem, nic nie będziemy odfiltrowywać. Po drugie, opiszemy sygnał przy użyciu transformaty Fouriera, a wydobywaną cechą będzie suma energii w częstościach z pasma alfa. Wreszcie, zastosujemy klasyfikację na podstawie ręcznie wybranego progu, który cecha ma przekraczać. Efekt powyższych kroków najzwięźlej opisuje poniższy kawałek kodu w Pythonie:

def decision(data, sampling rate, min alfa, max alfa, border): 
    d = abs(numpy.fft.rfft(data)) 
    d[0] = 0 
    s = 0 
    for x in range(min alfa * sampling rate, max alfa * sampling rate): 
         s += d[x] 
     if s > border: # Relaks! 
     return 1 
return 0

Możemy już teraz podać przepis na wykonanie interfejsu mózg-komputer.

Będą nam potrzebne dwie płytki PCB zgodne ze schematami (np. takie jak na tej stronie), programator ISP, kabel PCB board-to-board connector, kabel szeregowy (ponieważ będzie trzeba przymocować jedną jego końcówkę do płytki cyfrowej, a drugą podłączyć do komputera, polecamy dwa kable – w jednym uciąć jedną końcówkę i zostawić końcówkę żeńską szeregową, drugi szeregowy do podłączenia tamtego do komputera – może być z dwiema męskimi końcówkami szeregowymi lub z męską końcówką szeregową i wejściem do portu USB, w zależności od tego, jakie porty ma nasz komputer), bateryjka 9 V, komputer, najlepiej z systemem operacyjnym Linux, 3 elektrody EEG, pasta przewodząca, np. TEN20, gaziki, spirytus rektyfikowany lub salicylowy, torebka landrynek, roztwór soli fizjologicznej oraz woltomierz.

Elektrody należy przygotować w zależności od tego, jaki mają wtyk, tak aby dało się je podłączyć do pinów wystających z płytki. Włożyć elektrody do roztworu soli fizjologicznej i pozostawić, aby moczyły się podczas dalszych przygotowań. Płytkę analogową i cyfrową należy połączyć kablem PCB board-to-board connector. Kablem szeregowym podłączyć płytkę cyfrową do komputera. Wgrać na mikrokontroler na płytce cyfrowej firmware, używając programatora oraz przeznaczonego do tego oprogramowania, np. PonyProg. Zaaplikować elektrody na głowę – zaczynając od elektrody odpowiadającej za uziemienie. Przetrzeć głowę spirytusem w miejscu, gdzie będzie naklejona elektroda, nabrać na główkę elektrody (do wklęsłej części) znaczącą ilość pasty przewodzącej i nakleić na głowę. Pasta ma właściwości klejące, powinno być jej na tyle dużo, aby elektroda trzymała się dobrze na głowie. Elektrody polecamy przykleić w następujących pozycjach według uniwersalnego systemu oklejania, zwanego 10-20 (w Wikipedii można znaleźć linki do grafik przedstawiających pozycje elektrod w tym systemie): uziemienie – Fz, kanały – O1, O2. Zmierzyć opory na stykach elektrod ze skórą, przykładając jedną pałeczkę woltomierza do końcówki elektrody GND (uziemienie), a drugą do końcówki innej elektrody. Opory powinny mieć wartość kilku kiloomów, w przypadku wartości przewyższających 10 kiloomów należy dokładniej przetrzeć skórę spirytusem, użyć więcej pasty przewodzącej i ponownie zaaplikować elektrodę. Podłączyć elektrody do odpowiednich pinów na płytce analogowej (kanał1, kanał2 oraz uziemienie). Podłączyć do płytki cyfrowej zasilanie z bateryjki 9 V. Uruchomić oprogramowanie do zbierania sygnału, wyświetlić sygnał. Zadowoleni z sukcesu możemy zjeść landrynki.