27
Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE DATOS DE SEÑALES CARDIOLÓGICAS. RECURSOS DE PHYSIONET. ” DICTADO POR: DR. ING. JESÚS RUBÉN AZOR MONTOYA 2011

Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Embed Size (px)

Citation preview

Page 1: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Facultad de Ingeniería UNIVERSIDAD DE MENDOZA

Pasaje Descote7505500 Mendoza

República ArgentinaTeléfono 061-201872

CURSO

“EXPERIMENTACIÓN CON BASES DE DATOS DE SEÑALES CARDIOLÓGICAS. RECURSOS DE

PHYSIONET. ”

DICTADO POR: DR. ING. JESÚS RUBÉN AZOR MONTOYA

2011

Page 2: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Matrices MATLAB  trabaja  esencialmente  con  un  solo  tipo  de  objetos  – una matriz numérica rectangular con elementos que pueden ser complejos-  todas las variables representan matrices.  Las matrices  1-por-1  son  interpretadas  como  escalares  y  las matrices  con  sólo  una  fila  o  columna  son  interpretadas  como vectores.Las  matrices  pueden  ser  incorporadas  a  MATLAB  en  diversas formas:

•Ingresadas por una lista explícita de elementos.•Generadas por sentencias o funciones incorporadas (built-in).•Creadas en un archivo M.•Cargadas desde archivos de datos externos.

Page 3: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Ingresadas por una lista explícita de elementos.

Por ejemplo, una u otra de las sentencias

A = [1 2 3; 4 5 6; 7 8 9] Y

A = [ 1 2 3 4 5 6 7 8 9 ]

crean la matriz 3-por-3 y la asigna a la variable A. Inténtelo. Los elementos  dentro  de  una  fila  de  una  matriz  pueden  estar separados por comas así también como por un espacio.

Page 4: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Generadas por sentencias o funciones incorporadas (built-in).

Funciones  incorporadas  (built-in)  como   rand o magic, por citar algunas,  proveen  una  forma  fácil    de  crear  matrices  con  las cuales experimentar. El  comando  rand(n)  creará  una  matriz  n-por-n  con  elementos generados aleatoriamente con distribución uniforme entre 0 y 1, mientras que rand(m,n)  creará una matriz m-por-nComo segundo ejemplo, magic(n)  creará una matriz de enteros la cual es un cuadrado mágico (filas y columnas tienen la misma suma)

Page 5: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Creadas en un archivo M.

MATLAB  puede  ejecutar  una  secuencia  de  sentencias  almacenadas  sobre archivos de disco. Tales archivos son llamados “M-files” porque deben tener extensión “.m”. Hay dos clases de archivos M: script y function. Los  archivos  script  son  frecuentemente  usados  para  ingresar  datos  en  una gran matriz,  en  un  archivo  de  este  tipo  los  errores  pueden  ser  fácilmente editados. Si, por ejemplo, se ingresa en un archivo de disco data.m a través de  un  simple  editor  como  Notepad  (Block  de  notas)  con  la  siguiente estructura

A = [ 1 2 3 4 ; 5 6 7 8 ] 

Se obtiene

Page 6: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Cargadas desde archivos de datos externos

En ocasiones, los datos pueden estar presentes en archivos externos con distintas extensiones pero en formato ascii.Para  recuperarlos  desde  Matlab  en  forma  de  matriz  se  utiliza función load.A modo de ejemplo, cree desde el Bloc de Notas un archivo con  la siguiente estructura y denomínelo data.txt:

Recupere los datos en la matriz datos con la instrucción

Page 7: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Carga de una matriz a un archivos de datos externo

Esta es la operación inversa a la anterior. Aquí los datos están presentes  en  una  variable  interna  en  forma  de  matriz  y  se pretende  guardarla  en  un  archivo  externo  con  alguna extensión, pero en formato ascii.Para lograr esto desde Matlab, se utiliza función save.A modo de ejemplo, cree la siguiente matriz de datos:

Abriendo ahora el archivo creado (matriz.txt) con el Block de notas, se puede visualizar el contenido de la matriz

Page 8: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Para guardar todo el contenido del espacio de trabajo (workspace) se utiliza el comando save. Por ejemplo, 

save c:\datos\sesion

guarda  todo  el  contenido  del  espacio  de  trabajo  en  el  archivo sesion.mat (MATLAB añade automáticamente la extensión mat, de ahí que los archivos así generados se conozcan como archivos MAT). Es posible guardar sólo variables concretas especificando el nombre de las mismas después del nombre del archivo. Por ejemplo, save c:\datos\sesion x y z sólo guarda las variables x, y y z en el archivo sesion.mat. Por defecto los datos se almacenan en formato binario (no legible por nosotros), pero es posible hacerlo en  formato ASCII  (legible, como ya se ha visto) añadiendo el modificador -ascii al final de la instrucción. 

Archivos binarios (.mat)

Page 9: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Se define una matriz numérica asignada a una variable M:

Archivos binarios (Ejemplos)

Page 10: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Dada una matriz  numérica  asignada  a  una  variable M,  de m  filas  y n columnas,  se pueden definir submatrices tales como:

Seccionamiento de una matriz

Page 11: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Los  vectores  son  casos  particulares  de  matrices  (una  sola columna o una sola fila).Ejemplo:

>> i=1:3; % Se define un rango de valores para el índice i

v(i)=i.^2 % Se crea el vector fila v cuyos elementos son i2.v =

1 4 9

El punto posterior a la  i  indica que cada elemento del “vector”  i se debe elevar al cuadrado. De  otro  modo  (de  no  tener  el  punto)  intentaría  elevar  dicho “vector”  al  cuadrado,  lo  que  no  sería  posible  ya  que  las dimensiones del mismo son 1 x 3.

Creación de vectores

Page 12: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Se  hará mención  a  dos  herramientas  que  permitirán  trabajar más eficientemente con Matlab.La  primera  es  la  alternativa  de  dejar  una  "traza"  documental mediante el  software Word de  las operaciones  realizadas  con Matlab.Para ello se ejecuta el comando notebookUna  vez  ejecutado  el mismo,  se  abre  una  hoja  de Word  que permite  actuar  interactivamente  con  Matlab.  Esto  es,  se escribe en el Procesador de Texto (Word) una sentencia válida de  Matlab  y  accionando  las  teclas  ctrl+enter  se  ejecuta  la sentencia apareciendo el resultado en Word.De este modo se puede componer un documento "vivo" desde el procesador que “trace” todas las acciones realizadas.

Funciones de graficación en MATLAB

Page 13: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

La segunda alternativa es la creación de una función, para usarla posteriormente por su nombre. Hay dos opciones, pudiéndose elegir cualquiera de ellas sin mengua en su acción.Una de ellas, como la sentencia que se muestra debajo, crea una función llamada sqr que encuentra el cuadrado de un número. Cuando se llama esa función, MATLAB asigna el valor que se pasa en la variable x, y luego usa  x en la ecuación x.^2:

>> sqr = @(x) x.^2;

Para ejecutar la función sqr escriba, por ejemplo

>> a = sqr(5)a = 25

Funciones de graficación en MATLAB

Page 14: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Ezplot Función graficadora de fácil uso.ezplot(fun) grafica la expresión fun(x) sobre el dominio default -2 < x < 2.

>> ezplot('sin(x)’)

Funciones de graficación en MATLAB

Page 15: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

>> ezplot('x^2',[-2,2])

Funciones de graficación en MATLAB

>> ezplot('(x^2)/4+(y^2)/9-1',[-3,3],[-3,3])

Page 16: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

  PLOT(X,Y)  grafica el  vector  Y  versus  el  vector X.  si  X o  Y  es una matriz, entonces el vector es graficado versus las filas o columnas de la matriz,  lo que se alinea.   >> x=[1 2 3 4];y=[2 4 8 16;1 2 3 4];>> plot(x,y)

Funciones de graficación en MATLAB

Page 17: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Se pueden obtener varios tipos de líneas, símbolos y colores con  PLOT(X,Y,S) donde S es una cadena de caracteres hecha desde un elemento desde las siguientes 3 columnas: b blue . point - solid g green o circle : dotted r red x x-mark -. dashdot c cyan + plus -- dashed m magenta * star (none) no line y yellow s square k black d diamond w white v triangle (down) ^ triangle (up) < triangle (left) > triangle (right) p pentagram h hexagram

Funciones de graficación en MATLAB

Page 18: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Funciones de graficación en MATLAB

X=[1 2 3 4];Y=[2 4 8 16];plot(X,Y,'b+:')

Grafica una línea de puntos (:) azul (b) con un signo más (+) en cada punto dato

Page 19: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Existen además otras funciones orientadas a añadir títulos al gráfico, a cada uno de los ejes, a dibujar una cuadrícula auxiliar, a introducir texto, etc. Estas funciones son las siguientes:

•title('título') añade un título al dibujo•xlabel('tal') añade una etiqueta al eje de abscisas. Con xlabel off desaparece•ylabel('cual') añade una etiqueta al eje de ordenadas. Con ylabel off desaparece•text(x,y,'texto') introduce 'texto' en el lugar especificado por las coordenadas x e y. Si x e y son vectores, el texto se repite por cada par de elementos. Si texto es también un vector de cadenas de texto de la misma dimensión, cada elemento se escribe en las coordenadas correspondientes•gtext('texto')  introduce texto con ayuda del ratón: el cursor cambia de forma y se espera un clic para introducir el texto en esa posición•legend() define rótulos para las distintas líneas o ejes utilizados en la figura. Para más detalle, consultar el Help•grid activa la inclusión de una cuadrícula en el dibujo. Con grid off desaparece la cuadrícula

Funciones de graficación en MATLAB

Page 20: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

 donde m y n son el número de subdivisiones en filas y columnas, e i es la subdivisión que se convierte en activa. Las subdivisiones se numeran consecutivamente empezando por las de la primera fila, siguiendo por las de la segunda, etc. 

COMANDO SUBPLOT

Una ventana gráfica se puede dividir en m particiones horizontales y n verticales, con el objeto de representar múltiples gráficos en ella. Cada una de estas subventanas tiene sus propios ejes, aunque otras propiedades son comunes a toda la figura. La forma general de este comando es:

subplot(m,n,i)

Page 21: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

 Sean las siguientes en Matlab

>> x=0:0.01:pi;>> y=sin(x); z=cos(x); w=exp(-x*.1).*y; v=y.*z;subplot(2,2,1), plot(x,y)subplot(2,2,2), plot(x,z)subplot(2,2,3), plot(x,w)subplot(2,2,4), plot(x,v)

COMANDO SUBPLOT

Page 22: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Otras funciones gráficas

bar() crea diagramas de barrasbarh() diagramas de barras horizontalesbar3() diagramas de barras con aspecto 3-Dbar3h() diagramas de barras horizontales con aspecto 3-Dpie() gráficos con forma de “tarta”pie3() gráficos con forma de “tarta” y aspecto 3-Darea() similar plot(), pero rellenando en ordenadas de 0 a ystairs() función análoga a bar() sin líneas internaserrorbar() representa sobre una gráfica –mediante barras– valores de erroreshist() dibuja histogramas de un vectorrose() histograma de ángulos (en radianes)

Page 23: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

El  archivo que  contiene  los datos está en el disco  rígido C en  la carpeta  llamada  “datos”,  con  el  nombre  “dat10.txt”  y  ha  sido obtenido desde el recurso ubicado en www.physionet.org.

>> load c:\datos\dat10.txt

En la variable dat10 quedan almacenados los valores contenidos en el archivo.Para conocer la dimensión del arreglo, se tipea:

>> size(dat10)ans = 17101 3

Lo que implica que dat10 tiene 17101 filas y 3 columnas.  La primera columna indica el instante en que se toma la muestra y las otras dos, las tensiones de dos derivaciones del ECG.

Graficación desde un archivo ascii

Page 24: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

A partir de estos datos,  se puede graficar    la  salida de  la primera graficación (contra el tiempo) de la siguiente manera: 

>> x=dat10(:,1); % lee la columna 1 (en seg) y la guarda en x>> y=dat10(:,2); % lee la columna 2 (en mV) y la guarda en y>> plot(x(1:1000),y(1:1000))

Graficación desde un archivo ascii

Page 25: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

La  Transformada  de  Fourier  de  una  señal  permite  analizar  sus  composición frecuencial.  Considerando  la  señal  anterior  (y),  se  ejecutan  las  siguientes instrucciones:

>> H=abs(fft(y-mean(y))); % Trans. De Fourier en valor absoluto>> plot(H(1:5000))

Transformada de Fourier de una señal

Page 26: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

Como  se  puede  observar  en  el  gráfico  anterior,  en  el  eje  de  abscisas  se representan los índices de cada muestra. Para que quede en frecuencia (Hz) es necesario  conocer con qué tasa de muestreo ha sido adquirida la señal.Esto es posible hacerlo desde la primera columna observando el tiempo entre muestra y muestra.

>> Fs=1/(x(3601)-x(1))*3600 % análisis de 3600 muestrasFs = 360

Dado que la expresión de la Transformada Discreta de Fourier está dada por:

Transformada de Fourier de una señal

Donde N es la longitud de la señal y Fs la frecuencia de muestreo (la recíproca del tiempo de muestreo T).

Page 27: Facultad de Ingeniería UNIVERSIDAD DE MENDOZA Pasaje Descote750 5500 Mendoza República Argentina Teléfono 061-201872 CURSO EXPERIMENTACIÓN CON BASES DE

En base a lo expuesto, modificando la escala horizontal del gráfico se logra que las abscisas se expresen en Hz.

>> i=1:5000;plot(i*Fs/length(y),H(i))

Transformada de Fourier de una señal