Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1. OBJETIVOS:
2. INTRODUCCIÓN A FIELDTRIP:
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:
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
3. DESARROLLO:
cfg = [];
cfg.trialfun = 'trialfun_affcog';
cfg.headerfile = 's04.vhdr';
cfg.datafile = 's04.eeg';
cfg = ft_definetrial(cfg);
>> 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
...
% 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);
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);
% Canal EOGV
cfg = [];
cfg.channel = {'53' 'LEOG'};
cfg.reref = 'yes';
cfg.implicitref = [];
cfg.refchannel = {'53'};
eogv = ft_preprocessing(cfg, data);
% 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);
cfg = [];
data = ft_appenddata(cfg, data, eogv, eogh);
disp(data.label')
Columns 1 through 12
...
Columns 57 through 59
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.
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).
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.
cfg = [];
cfg.method = 'summary';
cfg.layout = lay; % necesario para representación 2D
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);
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
...
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.
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