Una BCI è un’interfaccia neurale basata su elettroencefalografia (EEG) in grado di far comunicare il sistema nervoso centrale con una periferica esterna.
L’interpretazione dell’attività elettrica dell’encefalo, registrata tramite elettrodi posizionati sullo scalpo, può permettere di controllare con la sola attività mentale vari tipi di dispositivi o interagire con un computer permettendo ad esempio di “sfogliare” le pagine web. Già oggi possiamo trovare sul mercato “consumer” numerosi kit BCI. Se le applicazioni multimediali e ludiche sono interessanti, lo sono ancor di più quelle in campo medicale. Un esempio è sicuramente quello che permetterebbe di ridare la capacità di comunicare ad un soggetto che ha perso totalmente l’uso della muscolatura, ma anche di ripristinare o correggere il controllo dei movimenti dopo traumi o malattie invalidanti gravi.
Figura 1. Dispositivo EEG “userfriendly”
Figura 2. Dispositivo EEG medicale
Le BCI si possono suddividere in due categorie principali: invasive e non invasive. Nel primo caso gli elettrodi vengono impiantati direttamente nel cervello del soggetto, mediante intervento chirurgico. Questo tipo di interfacce hanno come obiettivo quello di sostituire la funzionalità di parti del cervello danneggiate. Ad esempio ripristinare parte della capacità di visione da parte di una persona con cecità acquisita.
Figura 3. Il Sistema BCI
Le BCI non invasive, invece, hanno elettrodi che poggiano sullo scalpo del soggetto fornendo un segnale molto più debole rispetto alle prime, ma comunque utile. Il segnale registrato dagli elettrodi viene elaborato ed analizzato da un calcolatore elettronico, tramite il quale è possibile impartire “comandi” a dispositivi periferici. E’ questa tipologia di BCI la candidata a divenire una interfaccia universale fra l’uomo e i dispositivi tecnologici ed è quella che cercheremo di illustrare in questo articolo. Negli USA molti studi si sono orientati sulle BCI invasive, mentre in Europa si sta puntando molto sulla tipologia non invasiva.
Dobbiamo innanzi tutto sfatare dei miti, come sempre quando si assiste alla nascita di tecnologie che si propongono come “rivoluzionarie”. Spesso le BCI sono state definite come dispositivi in grado di “tradurre il pensiero umano”, considerazione che proietta una alone mitico attorno a questa nuova tecnologia, portando i più a pensare a una sorta di macchina in grado di “leggere il pensiero”. Ma le BCI non fanno questo.
Figura 4. Tracciato EEG
In realtà, osservando una registrazione EEG, notiamo innanzitutto la presenza di una importante componente di “rumore”, ossia di un disturbo di natura elettrica presente in ogni registrazione. Il rumore è di varia natura, ma la maggior parte di esso è prodotto dallo stesso cervello: almeno per il momento non siamo in grado di dare senso a questa attività elettrica “di fondo”. C’è inoltre da tener presente che con l’EEG non viene registrata l’attività elettrica complessiva di tutti i neuroni del cervello, ma solo di quelli della corteccia cerebrale, cioè di quelli che stanno “in superficie”. In altre parole, l’attività registrata è una risultante dei soli neuroni corticali, organizzati in colonne perpendicolari alla superficie, di cui costituiscono unità funzionali elementari. L’EEG ne registra i potenziali pre e postsinaptici.
Solitamente, del segnale elettroencefalografico vengono studiati i ritmi base: beta, alfa, theta, delta e gamma. Queste bande di frequenza vengono isolate e studiate tramite tecniche di analisi frequenziale. Ogni ritmo è riscontrabile in particolari stati psichici e il neurologo ricerca in questi ritmi le alterazioni rispetto ad una situazione di normalità. La BCI invece si concentrano sui cosiddetti “potenziali correlati ad eventi”. Un potenziale evento correlato (con acronimo ERP dall’inglese “Event-RelatedPotential”) è una risposta cerebrale misurabile che si forma direttamente come risultato di un processo cognitivo, pensiero o percezione che dir si voglia. Più formalmente, consistono in una “qualsiasi risposta elettrofisiologica a uno stimolo interno o esterno” e corrispondono ad ampiezze di tensione misurate in microvolt (mV) presenti nel tracciato.
Figura 5. ERP Event-RelatedPotential
Queste variazioni di tensione sono prodotte quando un grande gruppo di neuroni corticali “scarica” in modo sincrono. Così facendo, le tensioni, invece di annullarsi a vicenda, possono sommarsi e provocare una alterazione di tensione generale che può meglio emergere rispetto all'attività di sottofondo. Dal momento che l’EEG riflette la somma di molti processi cerebrali che avvengono in contemporanea, la risposta cerebrale ad un singolo stimolo o evento di interesse non è normalmente visibile nella registrazione di una singola misurazione. Per potere vedere la risposta cerebrale, lo sperimentatore deve ripetere molteplici stimolazioni.
Fra le diverse “componenti” dell’onda ERP, una delle più importanti ai nostri fini è quella che viene chiamata “P300”, in quanto si presenta a circa 300 ms dallo stimolo. La P300 (abbreviata anche con “P3”), è un’onda specifica elicitata da stimoli rilevanti infrequenti. È considerata un potenziale endogeno in quanto la sua presenza non si registra a seguito di un attributo fisico dello stimolo (forma, colore, ecc…) ma a causa della reazione di una persona allo stimolo.
In particolare, la P300 rifletterebbe un processo di valutazione e classificazione di uno stimolo. Solitamente è elicitata usando il c.d. “paradigma odd-ball”, nel quale target a bassa probabilità di presentazione vengono interposti a stimoli non-target ad alta probabilità. La P300 si presenta come una deflessione positiva (voltaggio negativo), con frequenza compresa fra 0.5 e 25 Hz, con latenza tra i 300 e i 600 ms. Solitamente tale deflessione è più rilevante nel lobo parietale. La sua presenza, topografia e latenza sono spesso usati come misura delle funzioni cerebrali in compiti di decisione.
Mentre i substrati neurali di questa componente rimangono ancora poco chiari, le sue caratteristiche la rendono più “visibile” rispetto ad altre componenti e dunque particolarmente adatta per le BCI. Una delle applicazioni che sfruttano queste componenti è la possibilità di comporre parole e frasi. Il primo sistema di questo tipo, denominato “Speller P300”, è stato ideato da L. A. Farwell e E. Donchin: si basa sul paradigma odd-ball ed è ancora oggi uno dei più utilizzati.
Il funzionamento del sistema si suddivide in due fasi principali: una fase di training e una fase di funzionamento.
1. Fase di “training”. Per prima cosa, il software deve essere “addestrato”. Cioè significa che il soggetto viene guidato a concentrarsi su lettere prestabilite in modo tale che il software possa “imparare” a riconoscere il tipo di risposta soggettiva.
2. Fase di funzionamento. Una volta che il software è stato “tarato”, la scelta del simbolo spetta all’utente. Come abbiamo detto, non è sufficiente effettuare una sola misurazione ERP, ma numerose, in base alle capacità di analisi, di estrapolazione dell’informazione del software e dalla risoluzione dell’hardware di acquisizione. Per questo motivo la digitazione di una parola richiede anche qualche minuto di concentrazione
Per ogni lettera sono necessarie più “illuminazioni”, ovvero più stimoli. Sfruttando la P300 che compare e viene rilevata mentre la persona dirige l’attenzione al simbolo scelto, questa è in grado di digitare una serie di lettere semplicemente concentrandosi su ciascuna, una per volta. La capacità di mantenere la concentrazione per molto tempo è il limite più evidente di un sistema di questo tipo. Tuttavia, lo stesso soggetto può migliorare la sua abilità ed efficienza con l’utilizzo. In un sistema speller che si basa sul suddetto paradigma, viene presentata su uno schermo di pc una matrice contente le lettere dell’alfabeto oltre a numeri in base decimale. La versione classica è munita di una matrice 6×6.
Figura 6. Matrice SpellerOdd Ball Classica
In questa matrice, righe e colonne vengono accese in modo intermittente. I parametri più classici del paradigma Odd-ball sono: una durata dello stimolo pari a 475 ms e pausa di 125 ms (ove la somma del tempo di durata e del tempo di pausa corrisponde al “tempo interstimolo”). Nella pratica, questi parametri si sono dimostrati influenti sulla performance e, a seconda del soggetto, è utile diminuirli o aumentarli. Il soggetto sottoposto deve mantenere l’attenzione su un simbolo in particolare. Molto spesso, per facilitarne la concentrazione, lo si istruisce a “contare” il numero di accensioni del simbolo di interesse. Durante questo compito viene registrata l’attività elettrica cerebrale. In corrispondenza al simbolo “target”, nel tracciato sarà presente una alterazione significativa di circa 10 microVolt con una latenza di circa 300/600 ms in prossimità della zona parietale ed occipitale del cranio.
Il rilevamento e la classificazione delle P300 all’interno del tracciato è un compito piuttosto complesso. E’ necessario isolare la componente attesa dal rumore di sottofondo, ripulirla dai disturbi e classificarla. In sintesi, dopo l’addestramento il software di analisi deve rispondere a una domanda per ogni porzione di tracciato analizzata: “Si tratta di una componente P300 oppure no?” Questo sulla base della conoscenza accumulata in precedenza. In caso di risposta affermativa, tramite la corrispondenza temporale, viene riportato il simbolo in questione.
L’analisi del tracciato EEG relativamente alla P300 può essere suddivisa nelle seguenti fasi:
1. Acquisizione
2. Pre-processing del segnale
3. Estrazione delle caratteristiche
4. Classificazione
5. Feedback utente
Figura 7. Analisi del tracciato (Schema a Blocchi)
L’acquisizione avviene tramite elettrodi posti sulla cute. Il numero di canali (numero di elettrodi) utilizzati è variabile. Esistono vari standard che ne specificano numero e posizionamento. Nel caso dello Speller P300, la posizione ottimale è quella che ricopre le aree occipitali e parietali (figura 11). Di conseguenza, per questa applicazione i canali utilizzati sono solo quelli di interesse e i rimanenti possono essere ignorati e non processati nell'analisi dei dati.
Figura 8. Elettrodi ideali per il rilevamento della P300
Comprende una vasta gamma di possibili operazioni di “pulizia”, ottimizzazione e correzione, con lo scopo di rimuovere nel limite del possibile i disturbi ed evidenziare l’informazione contenuta nel segnale. Per l’EEG sono due i principali approcci: l’analisi nel dominio della frequenza, tramite la trasformata di Fourier, o l’analisi delle componenti indipendenti, eseguite rispettivamente con i metodi numerici FFT e FastICA. L’applicazione di questi strumenti deve essere fatta con cautela dato che la frequenza delle P300 (1 – 25 Hz) molto spesso si sovrappone parzialmente o totalmente a quella del rumore e a quella di eventuali artefatti (vedi figura 13). Di conseguenza, un filtro passa-banda o passa-basso troppo restrittivo comporterebbe la perdita di dati preziosi.
Gli artefatti consistono in picchi di tensione provocati dal movimento delle sopracciglia, dei bulbi oculari, dal movimento della testa e dalla tensione della mascella. Gli artefatti oculari spesso possono essere rimossi con successo semplicemente sottraendo dai canali di interesse i valori di tensione registrati mediante appositi elettrodi posizionati vicino agli occhi (elettrooculogramma o “EOG”). Se questi elettrodi non sono disponibili, si eliminano i picchi di tensione più ampi di 20 – 50 microVolt. Tuttavia, se la loro rimozione costituisce un punto critico nell’applicazione, esistono vari algoritmi di “machine learning” che, più o meno bene, tentano la rimozione di questi dal tracciato. Gli artefatti in generale rimangono una delle criticità più importanti soprattutto per gli elettrodi frontali, molto sensibili ai movimenti oculari.
Figura 9. Artefatti Oculari
Verte a rilevare e localizzare le caratteristiche che ci interessano dal segnale. Nel caso dello Speller è utile individuare le P300 subito dopo l’istante in cui viene somministrato lo stimolo. Come mostrato in figura 16, queste componenti compaiono come alterazioni significative e sono solitamente composte da un picco positivo seguito da un minimo locale. La deflessione dovrebbe corrispondere, all’incirca, ad una variazione di ampiezza pari a 10 micorVolt. Dato che la P300 ha una latenza che può variare, di fatto, da 250 ms a non oltre i 500 ms, ad ogni presentazione di stimolo luminoso vengono raccolti 500 ms di registrazione post-stimolo. Questo per ciascuno canale. Il segnale viene così suddiviso in più parti: questi spezzoni sono detti “epoche”.
Figura 10. Processo di Epoching
Lo stesso stimolo deve essere presentato più volte, perciò nell’analisi avremo a disposizione altrettante misurazioni della componente. In tale contesto, una delle operazioni più importanti viene chiamata “averaging”, che consiste nel calcolare la media dei segnali raccolti nelle varie misurazioni a parità di stimolo. Essa sfrutta lo stesso principio su cui poggia il filtraggio ICA. È possibile assumere il segnale come la somma di due elementi: uno corrisponde alla componente P300, prodotta dall’attività sincronizzata dei neuroni, l’altro rappresenta il rumore di sottofondo di natura stocastica. Le P300 hanno una ampiezza di circa 10 microVolt. Molto spesso questa ampiezza è raggiunta anche dal rumore di sottofondo. E’ per questo motivo che non è sufficiente una sola misurazione. Tramite l’averaging, tutte le misurazioni vengono mediate fra loro. Dato che P300 e rumore non sono correlati, come risultato finale avremo un segnale mediato in cui la componente P300 tende a rimanere tale, mentre tutto il rumore tende ad annullarsi.
Figura 11. Averaging
Le seguenti due illustrazioni mostrano le misurazioni mediate che ho eseguito su me stesso durante la fase di training. Vengono riportate le misurazioni rispettivamente degli stimoli target (figura 12) e non target (figura 13).
Figura 12. media su 30 misurazioni epoca con P300. Aree parietali e occipitali dx e sx strazione
Figura 13.media su 30 misurazioni epoca senza P300. Aree parietali e occipitali dx e sx
I segnali sono campionati a 128 Hz. Pertanto il 36° campione rappresenta l’istante temporale a 300 ms dopo lo stimolo, ove questo si suppone posizionato a t = 0. In realtà questo è vero solo in linea teorica, mentre in pratica dobbiamo tenere conto di un certo costo computazionale che sposta il grafico leggermente più avanti rispetto all'istante t = 0. Per tutti gli stimoli target avremo epoche in cui ci aspetteremo di osservare la componente P300 con latenza compresa fra 250 ms e 500 ms.
Dà come risultato la divisione di ogni epoca in due gruppi: il primo con P300 presente, il secondo con P300 assente. Questa fase è particolarmente interessante dal punto di vista tecnico. Come abbiamo visto, la risposta cerebrale è soggettiva, diversa da persona a persona. Pertanto forma d’onda, latenza e ampiezza delle P300 risulta assolutamente variabile. Inoltre, a seconda del soggetto, le componenti possono comparire in modo più pronunciato nella regione parietale, occipitale oppure in entrambe le regioni. Tutto questo può inoltre variare a seconda del livello di stanchezza del soggetto. Va inoltre tenuto presente che nessun tecnica di programmazione convenzionale è a oggi in grado di produrre un algoritmo capace di eseguire la classificazione in modo totalmente soddisfacente. Classificatori in grado di portare a termine questo compito con sufficiente soddisfazione sono le SupportVector Machine (SVM) oppure le Reti Neurali Artificiali (RNA, o ANN dall’inglese ArtificialNeural Network), oppure il Fisher LDA o il Bayesian LDA.
Una applicazione interessante delle Reti Neurali Artificiali nel campo biomedico viene illustrata da Marco Mozzoni (direttore scientifico di IntegrationalMindLabs – NdR) in un recente volume in cui vengono messi in evidenza, con abbondanza di dati e di esempi, i vantaggi dell’utilizzo dei metodi di “analisi non lineare” nei fenomeni complessi, nel caso particolare della diagnosi precoce dell’Alzheimer – vera e propria sfida del XXI Secolo, secondo Lancet – di cui non abbiamo ancora individuato biomarcatori certi, ma soltanto “promettenti”. “Possiamo definire le RNA – spiega Mozzoni – come algoritmi per l’elaborazione di informazioni che permettono di ricostruire in modo particolarmente efficace le regole approssimative che mettono in relazione un certo insieme di dati ‘esplicativi’ per il problema (input), con un insieme di dati dei quali si richiede una corretta previsione o riproduzione (output) in condizioni di incompletezza informativa; in sostanza, l’uso è indicato in particolare quando la relazione tra input e output (cioè il contenuto della ‘scatola nera’) è molto complicato. Come dice bene Massimo Buscema del Semeion di Roma, siamo nel campo della Natural Computation, in cui una dinamica come l’apprendere ad apprendere è implicita nei modelli artificiali stessi, a differenza di quanto accade nella ClassicalComputation, che ha bisogno di regole inserite passo passo dall’esterno” (Mozzoni, 2010).
Il sistema BCI apprende appunto nella fase di “training”, in cui viene presentata all’input una serie di campioni di dati assieme alla corretta classificazione, fase corrispondente alla parte di funzionamento della BCI in cui l’utente è guidato nell’esercizio di concentrazione. Dai dati raccolti, il classificatore aggiusta, tramite algoritmi di addestramento, i propri coefficienti (nel caso delle reti neurali artificiali vengono modificati i “pesi sinaptici”), fino a convergere all’accettabilità del risultato. Questi classificatori sono più che interessanti data l’analogia che nasce con le reti neurali biologiche. È proprio a queste che esse si ispirano, simulando con buona approssimazione e maggiore velocità la capacità di apprendimento umano. Il tipo di risposta di questi classificatori non è un semplice “vero” o “falso” (P300 o non P300), ma una risposta in logica fuzzy, ossia in termini prbabilistici. Al termine della fase di addestramento, si esegue il “collaudo” del classificatore: se il collaudo dà esito positivo, ciò vuol dire che l’apprendimento è andato a buon fine esso e che il sistema è pronto per l’utilizzo.
Durante l’utilizzo, il sistema raccoglie le registrazioni per ogni canale in prossimità di ogni stimolo rappresentato, eseguendo le operazioni sopra descritte. Quando la P300 viene rilevata, lo stimolo in questione è quello su cui il soggetto si sta concentrando e la lettera corrispondente viene inviata allo schermo quale lettera scelta.
E’ così, in sostanza, che questo sistema permette la scrittura con l’ausilio della sola capacità di concentrazione mentale. Con il miglioramento della risoluzione dei vari hardware disponibili, questi sistemi sono destinati a perfezionarsi sempre più, promettendo sempre maggior precisione a fronte di una sempre minore necessità di concentrazione da parte dell’utilizzatore. Le BCI saranno sicuramente presenti nello scenario tecnologico del prossimo futuro, rappresentando anche una concreta possibilità di miglioramento delle condizioni di vita delle persone con gravi disabilità.
Prima di scrivere il codice in Matlab ci siamo voluti concentrare sull’analisi dei primi dataset forniti dall’Ing. Tramonte. Questa analisi è stata effettuata con EEGlab, cheè un toolbox interattivo di Matlab per processare EEG continui ed event-related.
Sono stati importati i seguenti file di calibrazione:
Calib_AAA.bin
Calib_AAA1.bin
Calib_AAA2.bin
Calib_AAA3.bin
Calib_ADH.bin
Calib_BEG.bin
Questi file di calibrazione indicano nell’ordine le lettere della matrice su cui si è focalizzata l’attenzione. E’ stata utilizzata una matrice 3x3 contenente le prime 9 lettere dell’alfabeto, quindi dalla A alla I. L’acquisizione è stata effettuata utilizzando il g.usbAmp a 256 hz. La registrazione è stata realizzata a 4 canali, riferiti ognuno ad un elettrodo ed in particolare: CZ, P3, P4, PZ. Il canale 5 contiene l’evento su cui si è focalizzata l’attenzione, da 1 a 9 per le lettere da A ad I. Il canale 6 contiene il tag degli eventi con valori da 0 a 6 che indicano le tre righe e le tre colonne della matrice che vengono illuminate. Il canale 7 è vuoto.
Su EEGlab abbiamo importato tutti i files di calibrazione con la funzione “import data usingEEGlabfunctions and plugins from ASCII/Float or Matlab array” dato che inizialmente i files venivano aperti con matlab, impostando la frequenza a 256 hz.
Successivamente abbiamo eliminato il canale 6 ed impostato esso come evento con la funzione “import event info from Matlab array or ASCII file”.
In seguito abbiamo eliminato i canali 5 e 6 rimasti che in questa fase di analisi non servivano col comando “select data” e selezionando soltanto i canali dall’1 al 4.
Per associare i 4 canali ai 4 elettrodi corretti abbiamo dovuto modificare il file dello standard BESA eliminando gli elettrodi che non ci interessavano e lasciando soltanto CZ, P3, P4 e PZ e poi abbiamo dovuto usare il comando “channellocations” per selezionare questo file modificato.
Questa procedura descritta sopra andava bene per i file di calibrazione dove le lettere su cui vi era posta attenzione erano tutte uguali come ad esempio il file “Calib_AAA.bin”, mentre per i file in cui le lettere erano diverse abbiamo dovuto suddividere inizialmente il file di calibrazione in tre, quindi, per esempio dal file “Calib_ADH.bin” abbiamo dovuto creare i files “Calib_A.bin”, “Calib_D.bin” e “Calib_h.bin”.
In seguito, ogni file di calibrazione è stato suddiviso negli eventi ERP e negli eventi NO-ERP col comando “extractepochs” selezionando ad esempio per la lettera A come ERP gli eventi 1 e 4, dato che la lettera A è data dall’incrocio tra 1 e 4 e come eventi NO-ERP i restanti ovvero 2, 3, 5, 6.
Figura 14. Gli ERP e NO ERP del dataset iniziale.
Infine abbiamo usato il comando “ Sum/Compare ERP’s” per effettuare una media di tutti gli eventi ERP e di tutti gli eventi NO-ERP e per metterli a confronto.
Figura 15. Media ERP e NO-ERP Elettrodo CZ
Figura 16. Media ERP e NO-ERP Elettrodo P3
Figura 17. Media ERP e NO-ERP Elettrodo P4
Figura 18. Media ERP e NO-ERP Elettrodo PZ.
Nella legenda dei grafici la parte Blu, chiamata AddAverage corrisponde agli eventi ERP mentre la parte rossa, chiamata Sub Average corrisponde agli eventi NO-ERP.
Analizzando questi grafici ci siamo resi conto che la risposta P300 avviene in media a 270 ms e misurandolo in dettaglio ci siamo resi conto che questo evento dura circa 30 ms.
Questa analisi iniziale ci ha permesso di comprendere a fondo il mondo della BCI ed è stato un ottimo punto di partenza per scrivere il codice che ci permette di discriminare gli eventi ERP.
Il nostro lavoro in Matlab è iniziato in seguito alle analisi fatte con EEGlab che ci hanno permesso di capire a fondo tutte le problematiche di questo argomento.
Il dataset di riferimento per questo lavoro è stato quello rilasciato dall’Ing. Tramonte il 30/06/17 e contenente:
Calib_ACF.bin
Calib_ACF_2.bin
Calib_DEF_1.bin
Calib_DEF_2.bin
Calib_DEF_3.bin
Calib_DEF_1.bin
Calib_GHI.bin
Calib_GHI_2.bin
Calib_GHI_3.bin
Dopo che abbiamo aperto ogni file in Matlab ci siamo concentrati sul canale 6 ed in particolare abbiamo preso una finestra di 154 campioni, che, dato che il segnale è a 256 Hz, corrisponde ad una finestra di 600 ms. Queste finestre sono state selezionate analizzando il canale 6 a partire dalla sequenza “0 ed un numero diverso da 0” e memorizzati gli indici di questi eventi.
Viene effettuata una media dei quattro elettrodi e poi programma poi verifica a quale lettera si riferisce il trial attraverso il canale 5 e richiama la funzione “TrialX” dove X è la lettera indicata nel canale 5.
Le funzioni “TrialX” suddividono gli eventi ERP dagli eventi NO-ERP per ogni singolo trial attraverso un controllo sulla lettera sulla quale si sta prestando attenzione, dato dal canale 5 e sugli eventi che sono illuminati, dati dal canale 6.Alla fine per ogni lettera di ogni trial avrò 2vettori 1x155, una per ogni evento ERP (riga e colonna), e 4 vettori 1x155, una per ogni evento NO-ERP.
Successivamente abbiamo applicato il coefficiente R2 di Pearson per stabilire quale sia il punto di differenza massima tra ERP e NO-ERP di una singola lettera. Abbiamo notato, analizzando tutti i file di trial, data una finestra di 155 campioni che la P300 si verifica mediamente tra 60 e 95 campioni, quindi, avendo scelto il punto di differenza massima tra evento ERP e NO-ERP prendiamo una finestra di 40 campioni, di cui 20 prima il picco massimo e 20 dopo il picco massimo.
Abbiamo ottenuto, analizzando tutti i file di Calib, una matrice di 144x40 perché per ogni lettera abbiamo 6 eventi per 3 lettere di ogni file di calib per 8 file di calib che è uguale a 144. 40 è l’intervallo temporale ristretto e passiamo questa matrice al “fisher_training” differenziando gli eventi ERP da quelli NO_ERP attraverso un vettore L0 che contiene 1 nelle righe dove sono presenti gli eventi ERP e 0 nelle righe dove sono presenti gli eventi NO_ERP. Questa funzione addestramento ci restituisce dei valori che vanno passati alla funzione “fisher_testing” insieme alla matrice F1, ottenuta dall’elaborazione del file di spell.
Nel file di Spell, selezioniamo le finestre, analizzando il canale 6 a partire dalla sequenza “0 ed un numero diverso da 0” e memorizziamo gli indici di questi eventi. Per ogni indice differenziamo i vari eventi in diversi vettori, effettuiamo la media e restituiamo una matrice che ha dimensione 6x155 che poi viene ristretta in una matrice 6x40 dato che sappiamo che la nostra P300 si verifica mediamente tra 60 e 95 campioni.
Il “fisher_testing” ci restituisce il vettore L che rappresenta gli eventi che sono stati selezionati nel file di spell. A seconda di quali elementi del vettore sono settati ad 1, selezioniamo la lettera corrispondente.
Ci siamo accorti che i risultati forniti dal “fisher_testing” non corrispondevano ai file di spell corretti infatti su 9 lettere riuscivamo a selezionarne solo 3 correttamente ed in particolare le lettere “G”, “H” e “I”.
Figura 19. Lettere selezionate correttamente con FLDA
Dato che i risultati non erano soddisfacenti abbiamo implementato il Bayesian LDA attraverso le funzioni “bayeslda”, “train” e “classify”. La funzione “bayeslda” definisce gli attributi degli oggetti che poi passiamo alla funzione “train” e alla funzione “classify”. La funzione “train” riceve in input la matrice 144x40, gli oggetti della funzione “bayeslda” e un vettore che contiene la distinzione tra gli eventi ERP e NO-ERP. Questa funzione di addestramento ci restituisce dei valori che vanno passati alla funzione “classify” che ci restituisce il vettore che rappresenta gli eventi che sono stati selezionati nel file di spell. A seconda di quali elementi del vettore sono settati ad 1, selezioniamo la lettera corrispondente.
I risultati ottenuti dalla funzione “classify” dell’algoritmo BLDA sono stati notevolmente migliori rispetto a quelli ottenuti con Fisher infatti nel BLDA abbiamo selezionato correttamente 7 lettere su 9 ed in particolare “A”, “C”, “D”, “E”, “F”, “G”, “I”, invertendo anche la “B” con la “H”, ritenendoci ampiamente soddisfatti per il lavoro svolto.
Figura 20. Lettere selezionate correttamente con BLDA