lucasbaldezzari / bcihack2

0 stars 0 forks source link

EEG para clasificar #13

Closed lucasbaldezzari closed 1 year ago

lucasbaldezzari commented 1 year ago

Dado que debemos clasificar un trozo de EEG con una duración igual a la usada en el entrenamiento de clasificadores, debemos armar el dato antes de pasarle al clasificador.

Se propone armar la matriz de EEG que alimentará al clasificador con trozos de EEG de menor duración.

El EEG que alimenta el clasificador debe ser de [1 x n_channels x N_samples]. Por lo tanto, para intentar clasificaciones "online" lo que se hace es ir armando el EEG con trozos de n_samples (donde n<N) y al mismo tiempo se descartan las n_samples previas dentro del EEG original, así se va actualizando el EEG a clasificar.

Por ejemplo, si durante la sesión de entrenamiento la duración del cue era de 4 segundos se podría, durante la sesión de feedback/calibración, tomar trozos de 1 segundo e ir armando un feature vector de la siguiente forma,

# dataToClasify posee [n_channels x N_samples] y se forma antes de entrar en la fase de "cue" del trial.
# con una cantidad de muestras equivalente a la duración del cue
# Este trozo de código ejemplo se ejecutaría en la fase de clasificación (self.__trialPhase = -1)
# dentro de feedbackThread() u onlineTrhead()

t = 0.3 #trozo de eeg para actualizar y clasificar
sample_rate = 250. #frecuencia de muestreo
samples = int(t*sample_rate)

newData = eeglogger.getData(t) #obtenemos el trozo de EEG

dataToClasify = np.concatenate((dataToClasify [:, samples:], newData), axis = 1)

Como puede verse, por cada iteración se obtiene un nuevo dato de EEG de 0.3 segundos, se descartan de dataToClasify las primeras samples y luego se agrega al final las nuevas samples.

Si todo sale ok. El clasificador mejorará la clasificación de la clase correspondiente a medida que dataToClasify vaya formandose con los patrones cerebrales correspondientes a la clase que se espera clasificar.

lucasbaldezzari commented 1 year ago

Responsable @lucasbaldezzari