Está en la página 1de 9

Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

Práctica 2. Eliminación de artefactos y cálculo de


potenciales evocados con Fieldtrip.

1. OBJETIVOS:

En esta práctica vamos a aprender como leer y pre-procesar señales de EEG


usando Fieldtrip (FT), una herramienta muy popular desarrollada en Matlab para
procesado de EEG y MEG, siguiendo un ejemplo del tutorial de esta herramienta. El
primer paso es descargar la herramienta que junto a información relevante sobre la
misma puede descargarse en el siguiente enlace: Fieldtrip.

En particular vamos a utilizar un registro obtenido de un sistema EEG de


BrainProducts, si bien podría utilizarse cualquier otro formato soportado por FT, como
por ejemplo los que aquí se detallan. Nuestro objetivo principal será eliminar artefactos
de tipo EOG mediante varios métodos. Una vez eliminados los artefactos presentes en
la señal, extraemos los potenciales evocados en cada electrodo, como respuesta ante un
experimento basado en dos condiciones. La presente práctica es un tutorial de
preprocesado disponible en la web de FT.

2. INTRODUCCIÓN A FIELDTRIP:

En FT en la etapa de preprocesado se realiza la lectura de datos, la segmentación


de los mismos respecto a los eventos de interés (delimitación del experimento), el
filtrado (promediado temporal por ejemplo) y la re-referencia (obtención de señales
monopolares o bipolares). La función de alto nivel ft_preprocessing es la
encargada de hacer todo ese tipo de tareas mediante un comando de llamada a la misma
con las opciones de procesado adecuadas.

Para trabajar con bases de datos grandes, en las que podría suponer un problema
su simple lectura, FT identifica los segmentos interesantes, los lee del archivo de datos
y aplica filtros exclusivamente a estos segmentos. En el preprocesado se realizan
numerosas etapas que incluyen la identificación de los experimentos individuales
(trials), el filtrado y el rechazo de artefactos. Para identificar los experimentos se emplea
la señal de disparo que puede ser definida como:

 un canal de disparo específico


 personalizado por usuario escribiendo una función trial o experimento

En ambos casos se emplea la función de alto nivel ft_definetrial cuya


salida es un dato de tipo "struct": cfg.trl, que representa las partes relevantes del archivo
fuente de datos. Se representa como una matriz de partes relevantes que son
seleccionadas para posterior procesado. En cada fila de esta matriz tenemos un
segmento de interés: la primera columna es el punto de inicio de ese segmento (en
muestras) , la segunda el punto final del segmento (en muestras) y la tercera un offset
temporal (en muestras) de la primera muestra respecto al tiempo 0 del segmento.

Para esta práctica vamos a usar un ejemplo de una base de datos proporcionada
por FT y descargable aquí. En el experimento los sujetos emitían un juicio al
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

presentarse un sustantivo escrito en pantalla. Este juicio podía ser positivo/negativo o


animal/humano. Los sustantivos era animales positivos (cachorro "puppy"), negativos
(gusano "maggot"), humanos positivos (princesa "princess"), o negativos (asesino
"murderer"). Con cada palabra se emitía un juicio.

3. DESARROLLO:

Para usar la memoria de manera eficiente (especialmente relevante para registros


muy grandes), vamos a usar la estrategia de leer sólo los segmentos de interés. Por lo
tanto tenemos que definir primeramente cuáles son los segmentos de interés ("trials") y
posteriormente leerlos y procesarlos. Para ello vamos a usar en combinación con
ft_definetrial una función específica desarrollada para el ejemplo,
trialfun_affcog. Esta función lee los marcadores del registro de EEG e identifica
los trials que pertenecen a la condición 1 (juicio positivo-negativo) o a la condición 2
(animal-humano). Ejecute los siguientes comandos en Matlab para realizar la selección
de trials:

cfg = [];
cfg.trialfun = 'trialfun_affcog';
cfg.headerfile = 's04.vhdr';
cfg.datafile = 's04.eeg';
cfg = ft_definetrial(cfg);

Después de la llamada de ft_definetrial, la variable cfg almacena el nombre de la


base de datos, y la definición de los segmentos de interés que se emplean a posteriori.
La cuarta columna de cfg.trl es condición de cada trial (1=afectivo, 2=ontológico).

>> disp(cfg.trl)
ans =
52441 53041 -100 2
56740 57340 -100 1
61845 62445 -100 1
66383 66983 -100 2
70402 71002 -100 1
74747 75347 -100 1
...

Pre-procesado y Re-Referenciación: En este ejemplo de señal de BrainVision,


las señales son monopolares y están referenciadas respecto al mastoides izquierdo.
Queremos que las señales estén referenciadas respecto a ambos mastoides (derecho e
izquierdo) por lo que en la adquisición se incluye el derecho, electrodo 'RM' (número
32). Para ello llamamos a la función de preprocesado ft_preprocessing y asignamos
dos electrodos como referencia (la re-referenciación se realiza exactamente en el
subrutina ft_preproc_rereference), el existente (implícito REF) y el canal 'RM'.
Además realizamos otras operaciones básicas de preprocesado en lo que sigue:
% Opciones de corrección de la línea de base
cfg.demean = 'yes';
cfg.baselinewindow = [-0.2 0];

% Opciones de filtrado
cfg.lpfilter = 'yes';
cfg.lpfreq = 100;

% Re-referenciación
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

cfg.reref = 'yes';
cfg.implicitref = 'REF';
cfg.refchannel = {'RM' 'REF'};

data = ft_preprocessing(cfg);

Use la función ft_databrowser para visualizar los segmentos que se almacenan


en memoria:
cfg = []; % usa opciones por defecto
ft_databrowser(cfg, data);

También puede usar la misma función para visualizar toda la base de datos
continua almacenada en disco:
cfg = [];
cfg.dataset = 's04.vhdr';
ft_databrowser(cfg);

En el segundo paso de referenciación vamos a obtener la señal bipolar de EOG


que con el sistema actual de adquisición debemos procesar con llamada de funciones.
Otros sistemas de adquisición permiten registrar el EOG bipolar directamente. En el
sistema de adquisición BrainAmp todos los canales se miden respecto a una referencia
común. Para obtener el EOG horizontal calculamos la diferencia de potencial entre el
electrodo 57 y el 25 (mire la figura 1). Para el vertical usamos el 53 y el canal "LEOG”
situado debajo del ojo izquierdo del sujeto.

Figura 1. Localización de los electrodos de EOG

% Canal EOGV
cfg = [];
cfg.channel = {'53' 'LEOG'};
cfg.reref = 'yes';
cfg.implicitref = [];
cfg.refchannel = {'53'};
eogv = ft_preprocessing(cfg, data);

% mantenemos un canal y lo renombramos a eogv


cfg = [];
cfg.channel = 'LEOG';
eogv = ft_selectdata(cfg, eogv);
eogv.label = {'eogv'};

% Canal EOGH
cfg = [];
cfg.channel = {'57' '25'};
cfg.reref = 'yes';
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

cfg.implicitref = [];
cfg.refchannel = {'57'};
eogh = ft_preprocessing(cfg, data);

% mantenemos un canal y lo renombramos a eogh


cfg = [];
cfg.channel = '25';
eogh = ft_selectdata(cfg, eogh);
eogh.label = {'eogh'};

Descartamos los canales que hemos usado y añadimos los bipolares


anteriormente calculados EOGv y EOGh:

% Mantenemos los canales EEG 1-60


cfg = [];
cfg.channel = setdiff(1:60, [53, 57, 25]);
% Se pueden usar números o cadenas de caracteres para la selección
data = ft_selectdata(cfg, data);

% Agrega los canales EOGH y EOGV a los 60 seleccionados

cfg = [];
data = ft_appenddata(cfg, data, eogv, eogh);

Podemos comprobar los canales presentes en los datos mediante ft_databrowser:

disp(data.label')
Columns 1 through 12

'1' '2' '3' '4' '5' '6' '7' '8' '9'


'10' '11' '12'

...

Columns 57 through 59

'60' 'eogv' 'eogh'

Distribución de canales: Para representación topográfica y análisis de los


canales es necesario conocer su situación en la cabeza. En EEG la distribución no es fija
y depende del sistema de adquisición. En el experimento tenemos una distribución
equidistante 64-electrodos (ActiCap, BrainVision) como muestra la figura:
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

Figura 2. Localización de los electrodos en el sujeto

Las posiciones no se almacenan en los datos sino que se usa un archivo de


distribución (layout) que en este caso es un archivo ".mat", que contiene las posiciones
de los canales en 2-D. FT suministra un conjunto de configuraciones para sistemas de
BrainVision en el directorio .../fieldtrip/template/layout. Adicionalmente se pueden
hacer layouts (mire ft_prepare_layout). En este ejemplo disponemos ya de uno en los
datos:

cfg = [];
cfg.channel = data.label;
cfg.layout = 'mpi_customized_acticap64';
cfg.feedback = 'yes';
lay = ft_prepare_layout(cfg);
disp(lay)

lay =
pos: [59x2 double]
label: {59x1 cell}
width: [59x1 double]
height: [59x1 double]
mask: {[72x2 double]}
outline: {[123x2 double]}

El layout debe contener las mismas etiquetas de los canales que se definen en los
datos.

4. EXTRACCIÓN DE ARTEFACTOS DE EOG:

Un paso importante en el preprocesado de EEG es la detección y rechazo de


artefactos. en FT existen varias aproximaciones para su detección incluyendo métodos
automáticos para realizar tal tarea. En esta práctica vamos a usar la función
ft_rejectvisual para visualizarlos y rechazar los segmentos o canales que los
contengan. Usaremos dos modos de operación, el modo canal en el que se muestran
todos a la vez pudiendo pasar segmento a segmentos y, a continuación, el modo
resumen.
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

Modo Canal: Se lanza con esta secuencia de definición de parámetros por


defecto y el comando de rechazo visual de artefactos:

cfg = [];
cfg.method = 'channel';
ft_rejectvisual(cfg, data)

Después de esos comando surge una ventana en la que se pueden ver todos los
segmentos por canal. Vaya al canal EOG vertical ('veog', número 61) y compruebe que
los segmentos 22, 42, 126, 136 y 150 contienen parpadeos (fuente de interferencia en el
EEG). Se pueden eliminar esos segmentos mediante un clic sobre ellos. Los cambios
que se haga a data no se guardarán en esa variable sino en la variable por defecto "ans"
de salida (si quiere una variable específica llame la función con parámetro de salida).

Figura 3. Representación del Canal EOG y sus múltiples segmentos

Sitúese en el canal '43' (del mismo nombre) y compruebe como los segmentos 138 a
149 son un poco ruidosos, lo que hace indicar que el electrodo en este segmento de
tiempo detectó erróneamente la señal. Los canales de alrededor también se vieron
afectados por este artefacto transitorio relacionado con el movimiento de los mismos
durante la adquisición. Una alternativa para la eliminación de estos artefactos podría ser
el uso de funciones como ft_componentanalysis and ft_rejectcomponent.

Modo Resumen: Los datos pueden representarse en modo resumen mediante el


uso de una métrica o estadístico que tenga en cuenta en cada canal y segmento la
variabilidad de la señal (por ejemplo la varianza). Cierre la ventana anterior y y llame al
modo Resumen con variable de salida “data_clean”:

cfg = [];
cfg.method = 'summary';
cfg.layout = lay; % necesario para representación 2D
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

cfg.channels = [1:60]; % sólo mostramos los canales EEG


data_clean = ft_rejectvisual(cfg, data);

Figura 4. Modo Resumen para rechazo de artefacto visual.

En el recuadro de arriba se muestra la varianza de la señal en cada segmento y


canal. Los gráficos son interactivos, esto es, se pueden eliminar segmentos
seleccionando con el ratón. Al eliminar aparecen en la sección "rejected trials" y se
pueden recuperar escribiendo el segmento específico en la caja “Toggle trial”. Se puede
representar un segmento específico (caja “Plot trial”) que se muestra abajo,
topológicamente en el layout (el de mayor varianza es el segmento 90) y la deriva del
canal 48 de este segmento, seleccionando con el ratón el canal en el topoplot..

Este rechazo es un poco arbitrario, FT dispone de métodos automático


cuantitativos. Como ejercicio elimine los 8 segmentos de mayor varianza (números 22,
42, 89, 90, 92, 126, 136 y 150). Compruebe que los segmentos que incluían parpadeos
están entre estos (análisis con modo canal). Para salvar el análisis pulso el botón “Quit”.
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

en la variable "data_clean" se guardan los datos para análisis posterior. Después de este
rechazo represente los segmentos de EEG que nos quedan para análisis:

cfg = [];
cfg.viewmode = 'vertical';
ft_databrowser(cfg, data_clean);

4. EXTRACCIÓN DE ARTEFACTOS DE EOG:

Ahora vamos a computar los ERP's para las dos condiciones: juicio positivo-
negativo y juicio humano-animal. Para cada segmento, se asignó una condición
anteriormente mediante el campo cfg.trialfun y la función de preprocesado, que quedó
almacenada en data_clean.trialinfo.
disp(data_clean.trialinfo)

Columns 1 through 19
2 1 1 2 1 1 2 1 1 2 1 1 1 2 1 1 2 2 2

...

Columns 172 through 184


2 1 1 2 2 2 1 2 1 1 1 1 2

FT automáticamente tiene en cuenta sólo los segmentos de interés: el campo


data_clean.trialinfo contiene condiciones para 184 segmentos mientras que el no
procesado (data.trialinfo) contiene 192 segmentos. Seleccionamos cada condición y
extra sus ERP's mediante la función ft_timelockanalysis.

% usamos ft_timelockanalysis para computar los ERPs


cfg = [];
cfg.trials = find(data_clean.trialinfo==1);
task1 = ft_timelockanalysis(cfg, data_clean);

cfg = [];
cfg.trials = find(data_clean.trialinfo==2);
task2 = ft_timelockanalysis(cfg, data_clean);

cfg = [];
cfg.layout = lay;
cfg.interactive = 'yes';
ft_multiplotER(cfg, task1, task2)

Note, que usamos el layout para representar los resultados. con la opción
cfg.interactive = 'yes' podemos seleccionar canales y hacer zoom sobre ellos. El
siguiente código permite obtener la diferencia entre los ERPs en ambas condiciones.

difference = task1; % copiamos una estrutura


difference.avg = task1.avg - task2.avg; % computamos la diferencia

cfg = [];
cfg.layout = 'mpi_customized_acticap64.mat';
cfg.interactive = 'yes';
ft_multiplotER(cfg, difference)
Procesamiento de Señales Biomédicas - Grado Ingeniería Electrónica Industrial

Figura 5. Potenciales evocados en las dos condiciones.

También podría gustarte