% dia1_vectores.m % Dia 1 - Una senal es un vector. % Recorre la sesion completa. Ejecuta seccion por seccion con Ctrl+Enter % (Cmd+Enter en Mac); no hace falta correr el archivo entero de una vez. % % Curso "MATLAB para potenciales evocados". %% Lo minimo de la Command Window clear; clc; 8 + 5 v = [2 8 3 9] mean(v) v(2) % el SEGUNDO elemento: en MATLAB los indices empiezan en 1 v(2:3) %% El punto y coma silencia la salida ruido = randn(1, 500000); % sin salida en pantalla size(ruido) % 1 fila, 500000 columnas %% De indices a segundos srate = 500; % frecuencia de muestreo, en Hz t = (0:499) / srate; % un segundo de tiempo, 500 muestras numel(t) % 500 muestras t(end) % 0.998 s - la ultima x = sin(2*pi*10*t); % un seno de 10 Hz figure; plot(t, x) xlabel('Tiempo (s)'), ylabel('Amplitud (\muV)') title('Un seno de 10 Hz') %% Indexado logico: la ventana de medicion vent = t >= 0.2 & t < 0.4; % una ventana de 200 ms sum(vent) % 100 muestras caen dentro mean(x(vent)) % amplitud media en esa ventana % Eso es lo que hace ERPLAB cuando le pides "amplitud media entre 300 y 500 ms". %% Dos dimensiones: canales por tiempo datos = zeros(4, numel(t)); % 4 canales x 500 muestras for ch = 1:4 datos(ch,:) = ch * sin(2*pi*10*t); end size(datos) % 4 500 size(datos, 1) % 4 -> numero de canales datos(3, :); % todo el canal 3 datos(:, 100) % los 4 canales en la muestra 100 mean(datos, 2) % promedio en el tiempo, un valor por canal % Escribe SIEMPRE la dimension. Sin ella, mean() promedia por columnas: size(mean(datos)) % 1 500 <- promedia los canales entre si size(mean(datos, 2)) % 4 1 <- promedia el tiempo de cada canal %% El punto: elemento a elemento vs. matricial a = [1 2 3]; b = [4 5 6]; a .* b % 4 10 18 <- elemento a elemento a * b' % 32 <- producto punto (b' es b transpuesto) % a * b % ERROR: Inner matrix dimensions must agree %% Correccion de linea base, a mano t = (-100:399) / srate; % epoca tipica de ERP; enteros / srate: t(101) es 0 exacto sig = 8 * exp(-((t - 0.400).^2) / (2*0.080^2)); % un pico en 400 ms base = t < 0; % el periodo pre-estimulo sig_corr = sig - mean(sig(base)); % restar su media mean(sig(base)) % antes: distinto de cero mean(sig_corr(base)) % despues: cero (o 1e-16, que es cero) figure; plot(t, sig, t, sig_corr) legend('sin corregir', 'con linea base corregida') xlabel('Tiempo (s)'), ylabel('Amplitud (\muV)')