Ztraceni Objektova analyza - NEUROINFORMATICS-GROUP-FAV-KIV-ZCU/guess_the_number GitHub Wiki
###Tým: Ztraceni
###Členové:
Šéf - Jitka Fürbacherová, E-mail - [email protected]
Člen - Anežka Jáchymová, E-mail - [email protected]
Člen - Jan Vampol, E-mail - [email protected]
Člen - Michal Veverka, E-mail - [email protected]
Verze: 1.0
###Obsah
2. Kontext a architektura systému
3. Typy informací zpracovávané systémem
5. Přiřazení tříd/modulů programátorům
Tento dokument popisuje návrh softwarového systému, který je cílem našeho projektu. Jedná se o doplnění funkčnosti do programu Hádání čísel, který nám poskytl zadavatel projektu. V dokumentu je popsán základní účel programu a našeho zadání, možné případy užití programu, návrh implementace a připojení našeho řešení do celého systému.
Program Hádání čísel je jednoduchá aplikace pro demonstraci rozhraní mozek-počítač (BCI). Testovaná osoba sedí ve zvukotěsné komoře, kde je jí snímán elektroencefalografický (EEG) signál. Osoba si myslí číslo v rozmezí 1 – 9 a na monitoru se tato čísla zobrazují v náhodném pořadí. Úkolem aplikace je uhodnout myšlené číslo z naměřeného EEG signálu.
Naším úkolem je implementace algoritmů pro zlepšení detekce a odstranění artefaktů z EEG signálu za účelem možného zvýšení přesnosti odhadu myšleného čísla a integrace algoritmů do aplikace Hádání čísel. Posledním úkolem je testování aplikace na reálných offline a online datech a sjednocení těchto dat.
Celý projekt je vyvíjen zaměstnanci a studenty katedry informatiky Západočeské univerzity pro akademické účely. Žádná část projektu tedy nemá komerční charakter.
artefakt - naměřený EEG signál nepocházející z mozkové aktivity (způsobený fyzickou aktivitou např. mrkáním, nebo technickou příčinou)
EEG signál - elektrická aktivita centrálního nervového systému
epocha - část EEG signálu v pevně daném okolí stimulu
marker - označuje dobu, ve které byl vyslán stimul
Program Hádání čísel je vyvíjen především pro akademické účely. Jeho úkolem je zpracování EEG dat a uhodnutí myšleného čísla. Na následujícím obrázku jsou vidět možné případy užití programu (obr. 1):
Obrázek 1. Use case diagram programu Hádání čísel
Jelikož celý náš projekt bude součástí programu Hádání čísel, popisuje tato část objektového návrhu právě program, dodaný zadavatelem projektu. Celý program obsahuje následující balíky a podbalíky:
Obsahuje třídu s konstantami a hlavní třídu s metodou main()
.
Obsahuje matematické algoritmy nutné pro prácí se signálem a klasifikátory.
Obsahuje jednotlivé klasifikátory. Každý klasifikátor má vlastní třídu.
Obsahuje třídy pro testování a správnou konfiguraci klasifikátorů.
Zde se nachází třídy, které spravují práci s daty a k tomu využívají třídy z balíku icp.online.tcpip.
Obsahuje pouze dvě pomocné třídy pro komunikaci s observery.
Zde se nachází třídy zajišťující grafické uživatelské rozhraní programu.
Obsahuje třídy pro příjem a práci s online daty. Pro jejich příjem je použita třída Socket
.
Obsahuje entitní třídy pro reprezentaci online dat. Více v sekci 3.2 Online data.
Zjednodušený UML diagram tříd je vidět na následujícím obrázku (obr. 2):
Obrázek 2. UML diagram tříd programu Hádání čísel (v diagramu chybí z důvodu nepřehlednosti některé třídy)
Zadavatel výslovně vyžaduje Javu JDK 1.6. Toto omezení je dáno tím, že program Hádání čísel musí běžet na počítači v laboratoři, na kterém je nainstalován JRE 1.6. Dalším požadavkem je psaní javadoc komentářů v anglickém jazyce a dodržování základních programovacích syntaktických konvencí jako je například odsazování a volení vhodného pojmenování pro proměnné.
Program využívá data naměřená pomocí programu VisionRecorder. Jeho manuál můžete nalézt zde [1].
Pro vývoj celého projektu je vyžadován verzovací systém Git.
Program pracuje pouze se vstupními soubory, žádné výstupní soubory generovány nejsou. Vstupní soubory mají dvě formy v závislosti na použitých vstupních datech, jelikož program umožňuje práci s offline i online daty.
Při práci s offline daty jsou EEG data uložena ve třech souborech: hlavičkový soubor s příponou .vhdr
, soubor s markery s příponou .vmrk
a soubor s EEG daty s příponou .eeg
.
Hlavičkový soubor je ASCII soubor formátu Windows INI. Popisuje daný EEG signál, jak byl měřen a jakým způsobem je uložen. Soubor obsahuje klíčová slova a k nim přiřazené hodnoty. Tento soubor může vypadat následovně:
Brain Vision Data Exchange Header File Version 1.0
; Data created by the Vision Recorder
[Common Infos]
Codepage=UTF-8
DataFile=blastnice_20141023_21.eeg
MarkerFile=blastnice_20141023_21.vmrk
DataFormat=BINARY
; Data orientation: MULTIPLEXED=ch1,pt1, ch2,pt1 ...
DataOrientation=MULTIPLEXED
NumberOfChannels=3
; Sampling interval in microseconds
SamplingInterval=1000
[Binary Infos]
BinaryFormat=IEEE_FLOAT_32
[Channel Infos]
; Each entry: Ch<Channel number>=<Name>,<Reference channel name>,
; <Resolution in "Unit">,<Unit>, Future extensions..
; Fields are delimited by commas, some fields might be omitted (empty).
; Commas in channel names are coded as "\1".
Ch1=Fz,,0.0488281,µV
Ch2=Cz,,0.0488281,µV
Ch3=Pz,,0.0488281,µV
[Comment]
A m p l i f i e r S e t u p
============================
Number of channels: 3
Sampling Rate [Hz]: 1000
Sampling Interval [µS]: 1000
# Name Phys. Chn. Resolution / Unit Low Cutoff [s] High Cutoff [Hz] Notch [Hz] Gradient
Offset
1 Fz 14 0.0488281 µV DC 0 Off
2 Cz 15 0.0488281 µV DC 0 Off
3 Pz 16 0.0488281 µV DC 0 Off
# Low Cutoff [s] High Cutoff [Hz] Notch [Hz]
1 Off 45 Off
2 Off 45 Off
3 Off 45 Off
Data / Ref / Gnd Electrodes Selected Impedance Measurement Range: 0 - 5 kOhm
Impedance [kOhm] at 12:07:50 :
Fz: 0
Cz: 0
Pz: 1
Ref: 1
Gnd: 1
První řádka identifikuje hlavičkový soubor a je povinná. Další řádky obsahují jednotlivá klíčová slova a k nim přiřazené hodnoty.
Soubor s markery obsahuje informace o jednotlivých markerech a má stejnou podobu jako hlavičkový soubor. Může vypadat například takto:
Brain Vision Data Exchange Marker File, Version 1.0
[Common Infos]
Codepage=UTF-8
DataFile=blastnice_20141023_21.eeg
[Marker Infos]
; Each entry: Mk<Marker number>=<Type>,<Description>,<Position in data points>,
; <Size in data points>, <Channel number (0 = marker is related to all channels)>
; Fields are delimited by commas, some fields might be omitted (empty).
; Commas in type or description text are coded as "\1".
Mk1=New Segment,,1,1,0,20141023120813809292
Mk2=Stimulus,S 8,9877,0,0
Mk3=Stimulus,S 7,11390,0,0
Mk4=Stimulus,S 9,12903,0,0
Mk5=Stimulus,S 8,14416,0,0
Mk6=Stimulus,S 7,15929,0,0
Mk7=Stimulus,S 3,17443,0,0
Mk8=Stimulus,S 3,18956,0,0
Mk9=Stimulus,S 7,20469,0,0
Mk10=Stimulus,S 8,21982,0,0
Program Hádání čísel dokáže vyhodnocovat i online data přijímaná z programu VisionRecorder pomocí vzdáleného přístupu (Remote data access - RDA). Tato data jsou předávána pomocí TCP/IP. Je možné použít data 16-bitová (port 51234) nebo 32-bitová (port 51244), podle použitého portu. Náš program využívá data 32-bitová. VisionRecorder posílá jednotlivé datové bloky s EEG daty, přičemž každý takový blok obsahuje zprávu RDA_MessageHeader a jeden ze 4 dalších typů zpráv. RDA_MessageHeader obsahuje následující hodnoty:
uid - 128-bitová konstanta, označující začátek bloku
nSize - délka bloku
nType - typ zprávy
Existují čtyři různé typy zpráv.
Odeslána na začátku vysílání. Kromě RDA_MessageHeader podává ještě další informace o příchozích datech:
nChannels - počet kanálů
dSamplingInterval - sběrný interval v µS
dResolution - pole obsahující sensitivitu jednotlivých kanálů v µV
sChannelNames - jména kanálů jako jeden řetězec, jednotlivá jména jsou oddělena pomocí null
Tato zpráva je vyslána pouze při použití portu 51234 pro 16-bitová data. Program Hádání čísel však k připojení používá port 51244 a 32-bitová data, která budou popsána dále.
Zpráva RDA_MessageStop se zkládá pouze z RDA_MessageHeader a oznamuje ukončení vysílání.
Tato zpráva přenáší samotná EEG data, v tomto případě 32-bitová a markery (RDA_Marker). Tato zpráva obsahuje následující hodnoty:
nBlock - obsahuje číslo tohoto bloku od začátku vysílání
nPoints_ - udává počet dat v tomto bloku
nMarkers - udává počet markerů v tomto bloku
fData[] - samotná EEG data v 32-bitovém IEEE floating point formátu. Počet hodnot odpovídá násobku nPoints * RDA_MessageStart.nChannels
Tato zpráva dále obsahuje pole markerů typu RDA_Marker. Tento objekt obsahuje následující informace:
nSize - velikost markeru v bytech
nPosition - relativní pozice markeru v bloku dat
nPoints - počet bodů pokrytých tímto markerem
nChannel - číslo kanálu, ke kterému tento marker patří
sTypeDesc - typ a popis markeru jako text zakončený null
Více se můžete dozvědět v manuálu k programu VisionRecorder [1].
-IArtifactDetection
-AmplitudeArtifactDet
-GradientArtifactDet
-CorrelationArtifactDet
-FrequenceFilter
Rozhraní, které implementují třídy pro detekci artefaktů. Detekce artefaktů probíhá před klasifikací. Každá třída implementující toto rozhraní má metodu pro detekci artefaktu v poli hodnot.
-public double[] detectArtifact(double[][] epoch)
Třída detekce artefaktů pomocí amplitudové metody. Tato metoda hledá artefakty na základě nadměrné výchylky amplitudy. Maximální výchylka se zadá v kontruktoru třídy. Implementuje rozhraní IArtifactDetection.
-public AmplitudeArtifactDet() - defaultní konstruktor
-public AmplitudeArtifactDet(double maxDiff) - parametrizovaný konst.
Třída pro detekci artefaktů pomocí gradientní metody. Při té dochází k průměrování několika po sobě jdoucích záznamů. Implementuje rozhraní IArtifactDetection.
-public GradientArtifactDet() - defaultní konstruktor
-public GradientArtifactDet(int count) - parametrizovaný konst.
Třída pro detekci artefaktů pomocí metody korelace. Při této metodě se vygeneruje gaussova křivka a zadá se maximální možná výchylka od této křivky. Následně se projdou všechny hodnoty zda splňují zadanou podmínku. Implementuje rozhraní IArtifactDetection.
-public CorrelationArtifactDet() - defaultní kontruktor -public CorrelationArtifactDet(double maxDiff) - parametrizovaný konst.
Třída pro vytváření filtrů na základě zadané frekvence. Umožňuje nastavení pro filtrování pomocí horní propusti, dolní propusti, nebo pásmové propusti. Implementuje rozhraní IFilter.
-public FrequenceFilter(int freq)
-public double getOutputSample(double inputSample)
Jan Vampol - IArtifactDetection, AmplitudeArtifactDet, FrequenceFilter
Michal Veverka - GradientArtifactDet, CorrelationArtifactDet