BRAINBALL, VISUALISERING AV HJÄRNAKTIVITETEN Brainball, visualisation of brain activity Markus Pettersson EL1807, Examensarbete, 15 hp Högskoleingenjörsprogrammet i Elektronik och datorteknik Medicinsk teknik, 180 hp Vt 2018
Sammanfattning Hos Medicinsk Teknik, Forskning och Utveckling på Norrlands Universitetssjukhus finns ett befintligt brainball-bord som de vill använda i samband med mässor och demonstrationer. Som komplement till det fysiska bordet vill de visa en grafisk representation av de hjärnvågor som används i spelet för att spelare och eventuell publik lättare ska förstå vad som händer. Ett program som ger en grafisk representation av hjärnvågorna som används i ett Brainball-spel har tagits fram i programmeringsspråket Python med hjälp av biblioteket matplot. Det färdiga programmet har en enkel och överskådlig layout med tre grafer som visar de två spelarnas hjärnvågor och deras uträknade avslappning i jämförelse med varandra. Graferna tar in och visar värden i realtid med en rullande x-axel med ca 20 bilder per sekund. Programmet körs på en Raspberry Pi 3 och på grund av datorns låga prestanda är funktioner som frekvensfiltrering och animation något begränsad. Programmet uppfyller sin huvudsakliga uppgift men det finns en del förbättringar att göra när det gäller dess prestanda. I
Abstract Medical Technology, Research and Development department at University Hospital of Umeå has an existing brainball-table that they want to use at fairs and demonstrations. As a complement to the physical table they want to show a graphical representation of the brainwaves that are used in the game, in order to make it easier for players and any audience to follow along. A program showing the graphical representation of the brainwaves used in the Brainball-game has been developed using the programming language Python with help of the library matplot. The finished program has a simple layout with three graphs, showing the two players brainwaves and their calculated relaxation in comparision with eachother. The brainwaves are sampled and shown in the graphs in real time with a scrolling x-axis with approximately 20 frames per second. Everything is run on a Raspberry Pi 3 computer and because of it s low performance some functions such as frequency filtration and animation is somewhat limited. II
Förord Den här rapporten är för ett examensarbete på utbildningen Högskoleingenjör inom Elektronik och Datorteknik med inriktningen Medicinsk Teknik vid. Examensarbetet är på 15 hp och har utförts av Markus Pettersson under våren 2018 hos Medicinsk Teknik, Forskning och Utveckling på Norrlands Universitetssjukhus. Stort tack till Urban Edström som har varit handledare under examensarbetet. III
Innehåll Sammanfattning Abstract Förord Innehållsförteckning I II III IV 1 Inledning 1 1.1 Kravspecifikation för projektet........................ 1 1.2 Tidsplanering.................................. 1 2 Teori 2 2.1 Biopotentialer.................................. 2 2.2 EEG....................................... 2 2.3 Avslappning................................... 3 3 Genomförande 3 3.1 Val av Grafikbibliotek............................. 3 3.2 Grafer och Animation............................. 4 3.3 Datainsamling och Databehandling...................... 5 3.3.1 Datainsamling............................. 5 3.3.2 Digital Filtrering av EEG-signalen.................. 5 3.3.3 RMS................................... 5 3.4 Test med Prototyp............................... 6 4 Resultat 7 4.1 Grafiskt interface................................ 7 5 Diskussion 9 5.1 Prestanda och förbättringar.......................... 10 5.2 Vidareutveckling................................ 11 5.3 Slutsats..................................... 11 Referenser 12 IV
1 Inledning Brainball är ett spel där två personer tävlar mot varandra att styra en boll över ett bord till motståndarens sida med sina hjärnvågor. Högre avslappning än motståndaren gör att bollen åker framåt. Brainball skapades 1999 och har ställts ut runt om i världen i allt från konst och designutställningar till medicinska mässor.[1][2] Medicinsk Teknik, Forskning och Utveckling har en prototyp av Brainball som de vill använda i samband med mässor, demonstrationer och undervisning. För att ge spelarna och en eventuell publik bättre uppfattning av vad som mäts vill man utveckla en grafisk representation av de hjärnvågor som används i spelet (alfa- och betavågor). Syftet med arbetet är att att lättförståeligt och grafiskt presentera för spelarna och publiken de hjärnvågor som mäts under spelets gång, samt spelarnas beräknade avslappning. Den grafiska representationen blir en komplettering till det fysiska bordet och det blir då enklare att följa vad som händer under spelet och varför det blir som det blir. Målet är att programmet ska bestå av tre grafer med enkel layout. Två av graferna ska visa spelarnas alfavågor och totala hjärnvågor (alfavågor+betavågor) och en tredje graf ska visa båda spelarnas beräknade avslappning i jämförelse med varandra. Förutom den grafiska representationen av hjärnaktiviteten så ska lämpligt opensource grafikbibliotek väljas för uppgiften. 1.1 Kravspecifikation för projektet Programmet som ger den grafiska representationen ska fungera på Linux med valfritt programmeringsspråk och bör helst gå att köra på en Raspberry Pi med HDMI utgång. Kraven för projektet går att se i tabell 1. Prioritet 1 är krav som måste uppfyllas när projektet är färdigt. Prioritet 2 och 3 görs i mån av tid. Tabell 1 Tabell över kraven som finns för projektet. Krav nr Kravtext för krav Prioritet Nr 1 Visa hjärnaktiviteten för varje spelare i varsin ruta 1 Nr 2 Jämföra båda spelarnas avslappning i en gemensam ruta 1 Nr 3 Programmet ska vara autostartande 2 Nr 4 Kommunikation mellan Brainball-bordet och mjukvaran ska ske via SPI 2 Nr 5 Hålla poängställningen mellan spelarna på skärmen 3 1.2 Tidsplanering Under förstudien av projektet togs en tidsplanering fram. Tiden för projektet låg på 15 hp vilket motsvarar ungefär 400 timmars arbete. Arbetet delades upp i olika arbetsuppgifter som går att se i figur 1 nedan. Siffrorna i rutorna motsvarar antalet timmar för 1
den arbetsuppgiften för den veckan. Figur 1 Figur över den tidplan som använts under projektet. 2 Teori 2.1 Biopotentialer Biopotential är den spänningsskillnad som uppstår mellan olika celler, vävnader eller organismer[3]. Spänningskillnaden uppstår när hjärnan skickar ut signaler till exempelvis muskler eller hjärtat för att få dem att arbeta. Biopotentialen går att mäta på bland annat muskler (EMG), hjärtat (EKG) och hjärnan (EEG) med hjälp av elektroder. I Brainball-spelet så kopplar två spelare som tävlar mot varandra upp sig mot spelet med tre elektroder fäst på pannan. Dessa tre elektroder kan då mäta hjärnbarkens elektriska aktivitet som kallas EEG. EEG-signalen innehåller olika vågformer där frekvenserna bestämmer vilken typ av vågform det är; alfa, beta, theta eller delta [4]. Dessa olika vågformer går att använda för att se hur avslappnad en person är. Vid vaket tillstånd och hög aktivitet såsom tänkande, upprymdhet eller aktiv koncentration ökar beta vågorna. Vid vaket, avslappnat tillstånd ökar alfavågorna och vid sovande tillstånd eller djup meditation ökar theta vågorna. Vid djup sömn ökar delta vågorna [4][5]. Det blir därför mest intressant att se hur spelarnas alfa- och betavågor ökar och förhåller sig till varandra för att få fram ett avslappningsvärde. Högre andel alfavågor innebär högre avslappning[6]. 2.2 EEG När EEG:et samlas in från spelarna så innehåller det alla typer av hjärnvågor. I hårdvaran så filtreras därför alla vågor som inte är alfa och beta bort då det är endast dessa två som är intressanta. Alfa- och betavågorna ligger mellan ca 8-13 Hz respektive 13-39 Hz[4]. Efter att ointressanta hjärnvågor har filtrerats bort så bör ett RMS värde tas fram för alfa- plus betavågorna (totala hjärnaktiviteten) samt endast för alfavågorna. RMS står för Root Mean Square och är medelvärdet av en serie mätvärden i kvadrat som sedan tagits roten ur på. Detta ger ett medelvärde som aldrig blir negativt om mätserien innehåller både negativa och positiva värden. Dessutom blir medelvärdet aldrig noll om 2
lika mycket negativa värden som positiva värden finns, exempelvis en sinuskurva, utan ett representativt positivt värde fås. 2.3 Avslappning Som tidigare nämnt så innebär alfavågor avslappning och betavågor innebär aktivitet så som tänkande eller aktiv koncentration [4][5]. Därför beräknas avslappningen enligt RMS(alfa)/RMS(alfa+beta) som ger ut hur stor andel av den totala hjärnaktiviteten som är avslappning i procent. Detta innebär att spelarna som har mest andel alfavågor är mest avslappnad och därför vinner. 3 Genomförande Programmet är skrivet i Python eftersom det är ett väldigt enkelt, men samtidigt kraftfullt programmeringsspråk. Till Python finns många utomstående bibliotek som gör det möjligt att programmera en stor variation av olika program med alla möjliga funktioner. Syntaxen är naturlig och lätt att skriva/förstå. Dessutom finns det ett stort antal användare av Python så mycket hjälp finns att tillgå online. Python fungerar även väldigt bra ihop med Raspberry Pi datorer. All utveckling sker på en Macbook Pro och överförs till en Raspberry Pi 3 via Google Drive när programmet är färdigt eller behöver testas. Raspberryn kopplar upp sig till internet med sitt inbyggda wifi eller via ethernet kabel. För att få fram den information som är nödvändig så har diverse forum använts så som stackoverflow och w3schools[7][8]. Dessa har oftast väldigt många användare och i stort sett alla problem man kan tänka sig finns på dessa forum med lösningar från användare. Även mycket kod och funktioner finns färdiga på dessa forum. Från forumen har kod hämtats för att sedan ändras[9], anpassas och utvecklas mer för att passa och fungera för detta projekts uppgift. Förutom forum så har grafikbibliotekens dokumentation varit till stor hjälp[10]. I dokumentationen förklaras färdiga funktioner hur de ska användas och hur dem är uppbyggda. 3.1 Val av Grafikbibliotek Kravet för det grafikbibliotek som ska väljas är följande: -Köra 3 grafer samtidigt -Plotta graferna i realtid -Två kurvor i samma graf -Rullande X-axel -Enkel och lättförståelig layout 3
Projektbeskrivningen nämner fem olika grafikbibliotek som kan vara intressant för uppgiften. Dessa är Qt, GTK+, wxwidgets,.net och Mono. De är alla crossplatform och opensource vilket innebär att de går att köra på flera plattformar (MacOS, Linux och Windows m.m.) samt att de alla är gratis att använda. Det finns ingen tydlig skillnad mellan biblioteken angående vilket som lämpar sig bäst till uppgiften, utan de klarar av att göra ungefär samma sak men på olika sätt. Inget av biblioteken är skrivna för Python utan de är skrivna för C, C++ eller C#. De går ändå alla att köra med Python genom så kallad binding. Binding gör att ett bibliotek skrivet för ett språk går att köra i ett annat språk, till exempel ett C++ bibliotek i Python. Mono och.net valdes bort eftersom dessa är väldigt Windows baserade och för att köras på Linux eller MacOS krävs en del omvägar för att få allt att fungera och många av dess funktioner bygger på verktyg inbyggda i Windows. Av de resterande biblioteken var Qt och wxwidgets mest uppskattade online och det var ungefär 50/50 om vilket som är bäst. wxwidgets kändes något enklare att arbeta med så därför valdes detta bibliotek. wxwidgets är skrivet för C++ men det finns en binding för Python som heter wxpython. Efter att ha påbörjat arbetet visar det sig snabbt att wxpython mer är anpassat för att skapa ett GUI (Graphic User Interface) än att rita grafer. Det blir tydligt efter att ha stött på problem i koden att matplotlib är det bibliotek som är bäst för att skapa enklare grafer i Python. Matplotlib är ett matematiskt bibliotek som innehåller funktioner som kan hantera grafer med en enkel layout. Därför användes matplotlib biblioteket istället för wxpython/wxwidgets. 3.2 Grafer och Animation Graferna i programmet skapas via matplotlib och där går det även att ställa in grafernas position och storlek i några förvalda lägen. Graferna placerades med avslappningen ovanför spelarnas två grafer med hjärnaktivitet. För att få fram kurvor i varje graf så sätts x och y värden in i variabler för varje linje. Därefter ritades först varje kurva ut med Canvas.draw(), en funktion i matplotlib. Det denna gör är att rita ut hela arrayen med data om och om igen. Ett problem som detta ger är att varje kurva ritas om varje gång ett nytt värde kommer in vilket gör ritningen av kurvorna väldigt prestandakrävande och seg. Varje kurva innehåller 200 mätpunkter och totalt finns det 6 kurvor. Alltså måste 1200 mätpunkter ritas ut varje gång ett nytt värde samlas in. Därför används animation med blitting istället för Canvas.draw(). Animation fyller graferna med nya värden med ett visst intervall och resultatet blir ungefär som med Canvas.draw(). Men med animation går det att använda blitting. Blitting innebär att pixlarna i programmet sparas undan och istället för att rita om kurvorna för varje nytt värde som kommer in så används tidigare pixlar och flyttas efter. Detta gör att programmet går mycket smidigare än innan då inte hela kurvorna måste ritas om vid varje nytt värde, 6 mätpunkter ritas istället för 1200 vid varje nytt värde. Intervallet med 4
vilket programmet lägger in nya värden i kurvorna och ritar ut dem är på 50 ms, vilket motsvarar 20 gånger per sekund. Det gick även att förbättra graferna ännu mer genom att ändra programmets backend. Backend är det som ligger bakom animationen av graferna och bestämmer på vilket sätt dessa ska ritas. En backend som ökade prestandan märkvärt var PyQt5:s backend som heter Qt5Agg. För tillfället stödjer inte matplotlib någon backend som använder sig utav datorn grafikkort. 3.3 Datainsamling och Databehandling 3.3.1 Datainsamling Som nämnt i teorin så har de hjärnvågor som används i Brainball en frekvens mellan 8-39 Hz[4]. Enligt nyquist teoremet måste därför insamlingsfrekvensen vara minst 78 Hz (39*2). Hårdvarufiltret för bordet har en övre gräns på ca 45 Hz och för att vara på den säkra sidan har därför programmet en insamlingsfrekvens på ca 100 Hz. För att insamlingen verkligen ska ske 100 gånger per sekund så använder sig koden av interrupt. Detta är en timer som varje gång den räknat till önskad tid, i detta program ca 10 ms, avbryter koden och kör en bestämd funktion. I denna funktion körs datainsamling från Brainball-bordet via SPI, signalen sparas, signalens alfavågor filtreras fram, RMS körs på alfavågorna och totala signalen för båda spelarna och slutligen så beräknas avslappningen. Avslappningen beräknas enligt formeln: RMS(alfa)/RMS(alfa+beta). De värden som ska ritas i graferna sparas i globala variabler och används senare i koden när inte ett interrupt har skett. 3.3.2 Digital Filtrering av EEG-signalen När signalen från EEG:et har samlats in av Raspberryn består den av både alfa- och betavågor. För att urskilja alfavågorna ifrån den totala signalen används ett digitalt filter. Filtret är ett bandpass-filter av första ordningen och båda spelarnas signaler filtreras. Anledningen till att filtret är av så låg ordning beror på prestandan av Raspberryn. Vid för hög ordning av filtret blir programmet för långsamt och påverkar animationen av graferna och gör denna hackig. Det är även därför endast alfavågorna filtreras och inte betavågorna. Filtret för alfavågorna sätts från 8-13 Hz då detta enligt teorin är alfavågornas frekvenser. 3.3.3 RMS Eftersom programmet samlar in värden med ca 100 Hz men endast skriver ut dessa med ca 20 Hz så är det intressant att ta fram ett medelvärde för alla värden som samlas in. Medelvärdet kan då presenteras med 20 Hz men man får fortfarande med alla värden 5
som samlats in. Den insamlade signalen kan dock vara både positiv och negativ och för att inte medelvärdet ska bli 0 i något läge används RMS. RMS tar fram medelvärdet av en array med alla dess värden i kvadrat. Genom att ta värdena i kvadrat och sedan roten ur dessa så tas negativa värden bort och man får fram ett medelvärde som aldrig blir felaktigt 0. RMS görs på den totala hjärnaktiviteten (alfa+beta) samt bara alfavågorna och är det som presenteras i spelarnas två grafer. När RMS tas på arrayen så sker det varje gång 10 nya värden har samlats in. Alltså skiftas 10 värden in för varje RMS och på så vis tas inte RMS vid varje nytt värde och prestanda kan sparas. 3.4 Test med Prototyp När allting var färdigt gjordes ett test med EEG. Två hårdvarufilter kopplas in till Raspberryn via dess SPI pinnar, en för varje spelare. Sedan kopplas tre elektroder från filtret till pannan på varje spelare. Jord-elektroden placeras mitt på pannan och de andra två elektroderna ungefär vid varje tinning. Se figur 2 nedan: Figur 2 Figur över uppkopplingen av prototypen. Under testet så blundar ena spelaren till och från, detta ska då ge högre avslappning än den som tittar eftersom synen kräver en hel del aktiv koncentration från hjärnan. 6
4 Resultat Det färdiga programmet ritar ut tre grafer i realtid med två kurvor vardera. Figur 3 och 4 visar spelarnas totala hjärnvågor (alfa- plus betavågor) i en kurva och spelarens alfavågor i den andra kurvan. Figur 5 visar spelarnas beräknade avslappning. På en Raspberry Pi 3 körs två datainsamlingar varje 10 millisekund och animationen sker varje 50 millisekund. Programmet startas på Raspberryn genom antingen valfri utvecklingsmiljö eller genom kommandoprompten efter att den gjorts körbar (executable). 4.1 Grafiskt interface Figur 3 Det färdiga programmet med simulerade, slumpmässiga mätvärden för totala aktiviteten. Spelarnas alfavågor är filtrerade till 8-13 Hz och båda signalerna är beräknade RMS-värden. Y-skalan är samma för båda spelarna. Avslappningen är beräknad med RMS(alfa)/RMS(total). 7
Figur 4 Programmet där båda spelarna har insamlade värden från en EKG-simulator. Testet görs för att se om RMS beräkningen fungerar. Samma värden samlas in i båda kurvorna med en kort fördröjning. 8
Figur 5 Programmet där båda spelarna har insamlade värden från elektroder uppkopplade enligt figur 2 via Raspberryns SPI. Här körs programmet på det sätt som är tänkt med EEG mätning. Alfavågorna är filtrerad till 8-13 Hz och RMS har tagits på totala aktiviteten och hjärnvågorna. Avslappningen har beräknats enligt RMS(alfa)/RMS(alfa+beta). 5 Diskussion Det färdiga programmet har en layout som är enkel att följa där spelarnas hjärnaktivitet och avslappning kan jämföras med varandra. Graferna uppdateras i realtid med rullande x-axel och har en uppdateringfrekvens på ca 20 FPS. Programmet fungerar på en Raspberry Pi 3 med vissa funktioner begränsade, framförallt filtrering. Utseendemässigt så finns det en vit statusbar längst ner i programmet. Denna skulle helst tas bort men som det verkar så är den inbyggd i programmets backend (Qt5Agg) vilket gör det svårt att ta bort den. Även vissa färger i programmet skulle kunna ändras så de blir mer lättläst, framförallt den blå kurvan och den blå texten. 9
I figurerna från resultatet går det och se att alfavågorna alltid är mindre än totala aktiviteten. Detta är precis som det ska då alfavågorna alltid måste vara mindre eftersom totala aktiviteten innehåller både alfa- och betavågor. Det går även att se hur spelaren med högst andel alfavågor alltid vinner. I figur 3 har spelare 1 tydligt högre andel alfavågor än spelare 2 och man ser även att det är spelare 1 som vinner då denna har högst avslappning. I figur 4 går det och se att RMS beräkningarna fungerar som dem ska. Eftersom signalen in är ett EKG så hade kurvorna sett ut som ett vanligt EKG utan RMS. Men på grund av RMS beräkningarna får kurvan ett annat utseende. Det går ändå att se tydliga och snabba förändringar i kurvorna som kommer ifrån EKG:ets utseende. Då EKG innehåller högre frekvenser än de som filtreras så ser total- och alfakurvan likadan ut men med olika nivåer. 5.1 Prestanda och förbättringar Då programmet körs på en Raspberry Pi 3 blir programmet väldigt begränsat av Raspberryns prestanda. Detta gör att framförallt filtreringen måste begränsas i programmet, men även animationen och datainsamlingsfrekvensen påverkas. Datainsamlingen i programmet har fått högst prioritet eftersom det är viktigt att få med all nödvändig data ifrån spelarna. Datainsamlingen sker med 100 Hz vilket är tillräckligt då de intressanta frekvenserna ligger mellan 8-39 Hz. Detta gör dock att animationen och filtreringen blir sämre då även dem är prestandakrävande. Filtreringen i programmet fick begränsas till endast alfavågorna samt att filtret endast var av första ordningen. Vid högre filterordning eller fler filtreringar blev direkt hela programmet sämre och det syntes tydligt i animationen av kurvorna att programmet blivit långsammare. Det skulle vara bättre och snyggare att även filtrera betavågorna och med högre filterordning hade mer exakta värden kommit fram. Animationen ligger för tillfället på ca 20 FPS vilket är okej för dessa grafer. Det hade dock varit snyggare med högre uppdateringshastighet men med Raspberryns prestanda fick detta duga. Trots att animationen är något seg så finns ändå all data där eftersom att insamlingsfrekvensen är tillräckligt hög. För att förbättra hela programmet och få allt att fungera smidigare finns det i alla fall ett par lösningar. Den första lösningen är helt enkelt att använda en dator med högre prestanda än en Raspberry Pi. Det går att använda sig av liknande enkretsdatorer som Raspberry Pi som har högre prestanda. Dessa har dessutom i vissa fall precis samma pin-layout som Raspberry Pi så funktionen fungerar på samma sätt och dessa datorers prestanda skulle kunna vara tillräckliga för programmet. Några exempel på sådana datorer är Asus Tinker Board, Libre Computer Board och Orange Pi. En annan lösning hade varit att köra hela programmet med datorns grafikkort istället för processorn. Genom att använda OpenGL så är det grafikkortet som sköter hela program- 10
met vilket är kraftfullare än processorn att utföra grafiska operationer. Med OpenGL går det att göra avancerade 3D beräkningar med relativt låga prestandakrav och detta hade varit mer än tillräckligt för att göra tre enkla grafer i 2D. Genom att använda datorns grafikkort skulle mest troligast Raspberryn:s prestanda vara tillräcklig. 5.2 Vidareutveckling På grund av tidsbrist så kunde ingen poängställning i programmet tas fram. Därför kan ingen av spelarna i nuläget vinna vilket gör att programmet fortsätter i all oändlighet. Skulle en poängställning tas fram så bör den vara synkroniserad med Brainball-bordet så hårdvaran visar samma som mjukvaran. Alternativt så skulle mjukvaran även kunna styra en digital boll i det program som utvecklats under detta projekt. En annan vidareutveckling skulle vara att få programmet att starta av sig själv då Raspberry Pi:en startas. Det krävs då ingen mus och/eller tangentbord då spelet ska startas och det blir lättare att få igång hela Brainball-spelet. Autostart ställs in i Linux operativsystemet. 5.3 Slutsats Det färdiga programmet uppfyller sitt huvudsakliga syfte att på ett enkelt sätt visa de hjärnvågor som används av brainball-spelet samt att visa spelarnas beräknade avslappning. Genom att använda detta program tillsammans med bordet så ser spelarna och publiken inte bara en boll som rör sig över ett bord utan ser även varför det blir som det blir. Programmet kan samtidigt förbättras i sin prestanda för att kunna rita ut graferna med högre antal bilder per sekund vilket skulle få programmet (och möjligen brainballspelet) att se bättre ut. 11
Referenser [1] RISE Interactive : Projektsida för Brainball https://www.tii.se/projects/ brainball Senast åtkomst: 2018-09-09 [2] Sara Illstedt Hjelm : The Making of Brainball, 2003. http://citeseerx.ist.psu. edu/viewdoc/download?doi=10.1.1.4.7568&rep=rep1&type=pdf Senast åtkomst: 2018-09-09 [3] McGraw-Hill Concise Encyclopedia of Bioscience : Biopotentials and ionic currents, 2002. http://encyclopedia2.thefreedictionary.com/biopotentials+and+ ionic+currents Senast åtkomst: 2018-05-24 [4] Roy Sucholeiki : Normal EEG Waveforms, 2017. https://emedicine.medscape. com/article/1139332-overview Senast åtkomst: 2018-05-16 [5] Cheryl K : Stress & Brain Waves, 2009. http://americannutritionassociation. org/node/257 Senast åtkomst: 2018-05-16 [6] Ning-Han Liu, Cheng-Yu Chiang and Hsuan-Chin Chu : Recognizing the Degree of Human Attention Using EEG Signals from Mobile Sensors, 2013. https://www.ncbi. nlm.nih.gov/pmc/articles/pmc3812603/ Senast åtkomst: 2018-05-16 [7] Stackoverflow. Forum för programmerare https://stackoverflow.com/ Senast åtkomst: 2018-09-09 [8] w3schools. Handledning för diverse programmeringsspråk https://www.w3schools. com/ Senast åtkomst: 2018-09-09 [9] Norbert Feurle : Kod som programmet bygger på https://hardsoftlucid. wordpress.com/various-stuff/realtime-plotting/ Senast åtkomst: 2018-09-09 [10] Matplotlib dokumentation https://matplotlib.org/contents.html Senast åtkomst: 2018-09-09 12