BrunoProg64 Blog

Archive for 5 mayo 2010

Proyecto de Tesis de ECG – Parte 1.5

Posted by brunoprog64 en mayo 5, 2010

Saludos de nuevos a mis lectores. Esta parte sigue de la Parte 1, anteriormente publicada y se llama “1.5” porque he de corregir ciertas cosas que no quedaron clara en la misma.

Primero, sobre lo de la presión y que sube y baja en respuesta a emociones. Existe en Medicina el caso de Hipertensión de la Bata Blanca, que es un caso pasajero de hipertensión cuando un paciente está ante su médico, por ansiedad. La existencia del síndrome confirma parcialmente mi teoría de que la subida de tensión es provocada por razones emocionales. Sin embargo no he encontrado nada que diga exactamente que la ansiedad sube la tensión y el miedo la reduce. Es dependiente de cada persona… por lo que me corrijo de los párrafos del primer artículo. No necesariamente la tensión sube o baja de acuerdo a ansiedad y miedo. Y dado que no pienso hacer el medidor de tensión en mi monitor ECG de momento, lo retiro de mi proyecto oficial.

De nuevo, estos post no son necesariamente lo que diré ante los jurados, porque quiero acercar a mis lectores al tema de hacer una Tesis, sin ser tan formales, que a mi parecer es el grave problema que padecen los centros de enseñanza. Pero volvamos al tema, no nos desviemos.

He decidido complicarme un poco la vida… y he vuelto con una novedad. Recuerdan que dije en el otro post que aVF, aVL y aVR, son derivaciones que se pueden calcular ya que el Triángulo de Einthoven cumple las Leyes de Kirchhoff. Einthoven promulgó una Ley, llamada la Ley de Einthoven, que nos dice que la suma de las Derivaciones I y III da igual a la Derivación II. Si esto no fuera así, los electrodos están mal colocados. Normalmente los ECGs comerciales calculan la Derivación II como es normal, pero ya hemos dicho que nuestro gran problema en mi caso es que sólo disponemos de una entrada de audio con dos canales. Pues sólo usaremos dos derivaciones: I y III y calcularemos la II por la Ley de Einthoven. La denoto mejor:

II Derivacion = I Derivacion + III Derivación

Naturalmente podemos despejar la ecuación para obtener la I o la III Derivación, de modo que tengamos que poner el menor número de electrodos posibles. Dirán algunos que esto disminuye la exactitud del ECG… es cierto. No es lo mismo una Derivación sacada por matemáticas, que la Derivación sacada por sensores. Pero… no todo es lo que parece. Más adelante lo explicaré.

Volviendo a Einthoven… él no es el descubridor de las derivaciones aVR, aVL, aVF. Su descubridor es Frank Norman Wilson. En realidad, estas derivaciones se ubican en las mismas posiciones que las Derivaciones I, II y III, sólo que Wilson analizó la Ley de Einthoven y vio que combinando dos polos negativos, realzaba la actividad eléctrica que no se nota en las Derivaciones I, II y III.

Fórmulas de ECG de Wilson

Fórmulas de ECG de Wilson

¡¡Esto es fantástico!! En serio… lo es… significa que nuevamente usando las Leyes de Kirchhoff podemos obtener más derivaciones, en este caso la aVR, aVL y la aVF. ¿Y eso que quiere decir? Que si bien necesitamos 4 a 6 electrodos para recoger la señal… en la teoría nos basta con sólo 2 señales. I y II o I y III. Luego de acuerdo a la Ley de Einthoven y a las Fórmulas de Wilson, podemos obtener la derivación que falta. Luego podemos usar esa derivación faltante, para calcular las 3 extras. El resultado es que nuestro equipo es más fácil de conducir y sólo hace falta un cable de micrófono para introducir la señal. El resto es cosa de matemáticas.

De nuevo, me dirá alguno que no es lo mismo calcularlas que estimarlas. Insisto con que mi Proyecto de Tesis no se trata de construir un ECG 100% fiable que pase todas las pruebas que se exigen a estos equipos, sino que se trata de construir un equipo capaz de ayudar al especialista y que al ser más software que Hardware, pueda ser utilizado en cualquier PC con una tarjeta de sonido. Con eso a mí me basta. Dejémosle los ECG precisos al milímetro a Philips, a Siemens y demás fabricantes de equipo biomédico.

Naturalmente, no estoy considerando las derivaciones V1, V2, V3, V4, V5 y V6. No las consideraremos de momento. No hasta que tenga más literatura sobre ECG que pueda leer. De nuevo agradezco a Google Books.

Seguimos entonces. Como ya hemos dicho, tenemos que demostrar que efectivamente hacer lo que dice la teoría sea verdad… podamos derivar 6 derivaciones de sólo 2. Entonces, tenemos que buscar algún ECG hecho y derecho con todas sus derivaciones, tomar dos y tratar de crear las demás desde ellas. Esto parece un trabajo para… PhysioBank, una gran colección de base de datos de señales biomédicas para investigación y desarrollo de Software Libre.

Usaremos la base de datos llamada PTB Diagnostic DataBase, una base de datos de ECGs de 12 derivaciones, cortesía del Physikalisch-Technische Bundesanstalt (PTB) (Instituto Nacional de Metrología Alemán) y del Dr. Michael Oeff de la Clínica Universitaria Benjamín Franklin, en Berlín. Nos descargamos la versión en .mat o .csv de un paciente usando la interfaz de ATM de PhysioBank. El archivo debe incluir información de las 12 derivaciones y de dos detalles más, que no nos interesan a nosotros de momento.

Ejemplo de ECG de la PTB Database

Ejemplo de ECG de la PTB Database

De cualquier modo, usando la interfaz ATM de PhysioBank podemos ver las señales y separarlas. De esa interfaz podremos bajar un máximo de 10 segundos de datos de ECG. Si queremos más, bajaremos el archivo .dat que corresponden a esa lectura, pero de momento sólo queremos demostrar algo, así que no es realmente necesario. Con los 10 segundos bastan.

¿Y ahora con qué analizamos el .mat que nos acabamos de bajar? Esto es un trabajo… para Matlab. También podemos usar GNU Octave, pero en la Universidad, lo que tengo más a la mano es Matlab. Es una pena que la Universidad use más software propietario, aunque reconozco que Matlab es una herramienta muy, pero muy poderosa.

¿Qué es una señal? Para la máquina es un conjunto de valores expresados en un arreglo a lo largo del tiempo. Para los cables, naturalmente es un flujo de electrones que siguen cierto patrón. Pero quedémonos con la aproximación de un arreglo. ¿Qué podemos hacer con un arregl0? Sumarlo, restarlo, dividirlo, multiplicarlo, etc. Son números… podemos hacer todo cuanto queramos. Por ejemplo, aplicar la Ley de Einthoven y las Fórmulas de Wilson.

¿Y cómo sabemos si está bien? ¿Cómo sabemos si la señal reconstruida es equivalente a las que captó el equipo de ECG? Porque si no se parecen en nada, es mejor no usarlas, ya que podríamos hacerle problema al experto en vez de ayudalro. Para eso, es hora de buscar los libros de la Escuela Pre Universitaria y recordar un concepto… Desviación Estándar.

¿Y qué es la Desviación Estándar? Es básicamente la distancia promedio que hay entre todos los valores de un grupo de datos con su media aritmética. El asunto es que la Desviación Estándar se usa como medida de incertidumbre. Si tenemos dos grupo de datos y su desviación estándar es muy similar, podemos decir que estos datos son lo más cercanos posibles. Una diferencia entre la desviación estándar de dos grupos de datos que sea demasiado grande nos hará ver que esos valores son muy distintos y no pueden ser equivalentes ni similares. El plan es comparar los grupos de datos generados por algoritmos y los originales del ECG de ejemplo para ver si hay grandes diferencias en su desviación estándar. Si las hay… sabremos que esto de derivar todas las derivaciones es una mala idea.

(Actualización 02 – 06 – 2010: Lamentablemente la Desviación Estándar no es la mejor forma de ver si dos señales son muy similares. Mis asesores me recomendaron algo más exacto como la Prueba T Student, ya que la Desviación Estándar puede identificar como “similares” datos muy abismales si su diferencia entre sus propios elementos  similar.)

Bueno, primero nos bajamos el archivo .mat de uno de los ejemplos de la PTB Database. En mi caso, he bajado el archivo que dice ‘ptbdb/patient001/s0010_re.mat’. Pueden ubicarlo en la interfaz de ATM, ya que PhysioBank no permite el enlace directo.

Bueno, según el sitio de la PTB Database, estos son los detalles técnicos que hay que conocer:

  • 15 canales de datos (12 del ECG y los otros tres de ECG adicional, pero referente a V1, V2, V3, V4 y V6)
  • Frecuencia de muestreo de 1 Khz  (1000 Hz), lo que indica una sensibilidad de 0.001 segundos.
  • Resolución de 16 bits.

Bueno, el orden de las derivaciones en el archivo es: I, II, III, aVR, aVL, aVF, V1, V2, V3, V4, V5, V6, VX, VY y VZ. Los últimos 3 corresponden a algo llamado “Frank Leads ECG”, pero no he encontrado nada especial, así que supongo que serán derivaciones experimentales. No las consideraremos en nuestro trabajo al igual que de momento las 6 derivaciones V1, V2, V3, V4, V5 y V6.

Entonces en Matlab, cargamos el archivo .mat usando la sentencia ‘load‘. Dado que este no es un curso de Matlab, les copio y pego el código que use:

%%cargamos el archivo ecg_raw.mat
load 'ecg_raw.mat'
ecg_raw = val;
clear val;

%el archivo tiene las derivaciones en orden: i, ii, iii, avr, avl, avf,
%v1, v2, v3, v4, v5, v6

der1 = ecg_raw(1,:);
der2 = ecg_raw(2,:);
der3 = ecg_raw(3,:);

%ya tenemos las tres derivaciones, comprobamos si el ECG esta en orden....

der2_tmp = der1 + der3;

if (abs(std(der2) - std(der2_tmp)) < 1.0) %%Si el error es mas de 1.0 es que no coinciden
  disp('El ECG se conecto sin errores')
else
  disp('El ECG tiene errores')
end

disp(['Dev Est II: ', num2str(std(der2))]);
disp(['Dev Est IIa: ', num2str(std(der2_tmp))])
efact = std(der2) - std(der2_tmp);
efact = abs(efact);

%% efact * std(der2) / 100 -> porcentaje error
perr = (efact * std(der2)) / 100;
disp(['Porcentaje de error:', num2str(perr), '%']);

Bueno, hasta aquí hemos recogido en variables las derivaciones I, II y III. Acto seguido hemos calculado la Derivacion II usando la Ley de Einthoven y hemos calculado la derivación estándar de la Derivación II original y la Derivación II algorítmica. Acto seguido, tomo la derivación estándar de ambas y las resto, la Derivación II contra la II algoritmica. Luego, saco un porcentaje de ese numero con respecto a la Desviación Estándar de la Derivación II original. En mi caso, el resultado mostrado es el siguiente:

El ECG se conecto sin errores
Dev Est II: 255.6288
Dev Est IIa: 255.6361
Porcentaje de error:0.018641%

Tenemos un porcentaje de error de 0.018641% con respecto a la Derivación II original. Es decir… el error no es nisiquiera del 1%. Es suficiente para nuestros propósitos. Si queremos verlo, sencillamente escribiremos: ‘plot(der2)’ y luego ‘plot(der2_tmp)’, para ver la Derivación II original y algorítmica. Se deberían notar igual.

(Actualización 02 – 06 – 2010: La Desviación Estándar no es la forma correcta de hacer esta medición. Se usa la Prueba T Student. Colgaré otro post a la brevedad con las correcciones del caso)

Ya hemos visto que la Ley de Einthoven se cumple. Ahora, vamos por las derivaciones auxiliares: aVR, aVF y aVL. Pero antes, verán que hay un condicional que dice que el ECG se conectó sin errores. Es que la Ley de Einthoven se usa para autodiagnóstico. El equipo de ECG puede decirnos si los electrodos están bien colocados si se cumple. Así que es posible que al final, leamos las 3 derivaciones, porque si no, no podremos saber si las tomas se han colocado como debe de ser. Este requerimiento dependerá de mi asesor de Tesis, no de mí.

Ahora sí, veamos las otras derivaciones:

avr_a = ((der1 + der2) / 2) * -1;
avf_a = der2 - (der1 / 2);
avl_a = der1 - (der2 / 2);
%calculamos la deriv. estandar y comprobamos contra las oficiales
avr = ecg_raw(4,:);
avl = ecg_raw(5,:);
avf = ecg_raw(6,:);
disp(['Dev Est aVR: ', num2str(std(avr))]);
disp(['Dev Est aVRa: ', num2str(std(avr_a))])
disp(['Dev Est aVL: ', num2str(std(avl))]);
disp(['Dev Est aVLa: ', num2str(std(avl_a))])
disp(['Dev Est aVF: ', num2str(std(avf))]);
disp(['Dev Est aVFa: ', num2str(std(avf_a))])

Aqui no hay nada que decir, salvo que calculamos las derivaciones aVR, aVF y aVL. Y mostramos la derivación estándar de cada una, tanto la original que viene con el ECG y la algorítmica. En mi caso, esto es lo que muestra el Matlab:

Dev Est aVR: 185.701
Dev Est aVRa: 185.7917
Dev Est aVL: 306.3242
Dev Est aVLa: 306.3249
Dev Est aVF: 293.1127
Dev Est aVFa: 293.1097

Decir que la ‘a’ minúscula al final de las derivaciones indica que es la calculada algorítmicamente. Como podemos ver, la diferencia entre desviaciones estándar es por centésimas. Es decir, el error es menor del 1%. Suficiente para propósitos académicos. Para propósitos médicos cre0 que no se hace tan a la ligera. Otra cosa que deberé debatir con mi asesor… pero de momento, estamos bien, matemáticamente hablando, claro.

Naturalmente, para los fans de GNU Octave esto se puede hacer en Octave igual. Lamentablemente la Universidad tiene Matlab y esto lo hago en horas de clases. Así que futuros artículos seguirán con Matlab. Cuando encuentre un tiempo tal vez lo pase a Scilab, Octave o Python inclusive. De momento por tiempo, a mi me importa prototipar enseguida, y Matlab hace muy buen trabajo en estos casos.

Finalmente decir que no soy perfecto y que mi formación matemática no es la mejor de todas, así que si cometo un error o algo, me gustaría que me lo digan para corregirme. Este Proyecto de Tesis es para todos los lectores y tengo la intención de hacerlo público, incluído el software. Pero para eso, necesito su apoyo y su feedback para corregir alguno que otro error. Seguiremos aquí después de que exponga el primer avance de Tesis I.

Anuncios

Posted in Opinion, Papers, Personal, Programacion, Tesis | Comentarios desactivados en Proyecto de Tesis de ECG – Parte 1.5

Proyecto de Tesis de ECG – Parte 1

Posted by brunoprog64 en mayo 4, 2010

Ante todo, de nuevo me disculpo a mis lectores por la inactividad. Cada vez me es más difícil poder escribir en el blog, por tiempo y responsabilidades.

Habíamos dicho que andaba buscando un tema de tesis. Después de recibir una noticia con respecto a un conocido que viene de intercambio con un tema innovador, no me quiero quedar atrás y me ratifico escogiendo el Proyecto de ECG como mi tema de tesis. Esta serie de post van a tratar de como voy desarrollando este proyecto. De ahí a que he creado una nueva categoría: Tesis.

Antes de seguir y dado que esto es como el diario de mi tesis, expliquemos porqué escogí un tema así. Después de todo hay temas más facilones… o más interesantes. Expliquémosnos.

Dos indicadores a mi parecer, muy importantes, en los procesos de ánimo son tanto el corazón y el cerebro. El pulso y la presión arterial se vuelven indicadores de múltiples estados anímicos. Así pues, el pulso nos subirá si nos asustamos o nos emocionamos, pero creo que cuando tenemos miedo nos baja la presión y cuando nos emocionamos nos sube. En el cerebro debe haber un aumento de ciertas ondas del estado cerebral, pero desconozco detalles exactos.  Es decir… con un monitoreo constante de las señales del corazón podemos tener una idea de nuestro estado de ánimo… esto es útil para videojuegos o sistemas de enseñanza.

De cualquier modo, un dispositivo de monitoreo ambulatorio sería muy deseable en estos casos. De todos modos, estos dispositivos son caros, así que es difícil acceder a ellos. ¿Porqué entonces no diseñamos uno? ¿Acaso un ECG puede ser tan complicado? Pues este post del blog SWHarden nos muestra que un ECG no es tan caro ni difícil como imaginamos.

Actualmente mi proyecto está en etapa de recopilar datos, así que salvo un documento inútil que voy a enlazar más adelante, hoy hablaremos de teoría. Agradesco al blog SW Harden por algunas cosas, pero en especial al libro “Understanding Electrocardiography” y a su edición de bolsillo (Mi universidad sólo tiene la de bolsillo) de Mary Boudreau Conover, porque explican el tema eléctrico de manera accesible a un profano como yo.

Monitor de ECG

Monitor de ECG

En lo que yo he visto, hay dos tipos de Monitores de ECG: El monitor de papel y el monitor digital. El problema, es que el monitor digital monitorisa otras cosas además que el ECG propiamente dicho: Pulso, tensión, saturación, temperatura, etc.

He podido encontrar información detallada sólo sobre como medir la saturación. No he conseguido detalles sobre como medir la presión y demás, así que de momento lo dejamos en un monitor de ECG que muestre pulso y de ser posible saturación.

Ahora vamos a mencionar que en el tema de electrodos para ECG tenemos 3 tipos:

  • Electrodos bipolares
  • Electrodos unipolares
  • Electrodos adicionales

Típicamente, el sistema de ECG es uno de 12 canales, donde se distingen las siguientes derivaciones:

  • Derivaciones I, II y III.
  • Derivaciones aVR, aVL, aVF.
  • Derivaciones V1, V2, V3, V4, V5 y V6.

Explico a detalle de que estoy hablando. El corazón es un músculo eléctrico, por lo tanto registraremos una señal diferente con respecto a donde coloquemos los electrodos. Cada una de esas “señales” es una derivación, un “ángulo” eléctrico mediante el cual veremos el corazón.

Sobre lo de bipolares, unipolares y adicionales, me refiero a que hay derivaciones en las que recogemos señal tanto positiva y negativa (+, -), por lo que precisamos de dos electrodos para recoger la señal, estas son las bipolares. Otras en las que sólo basta un electrodo para recoger la señal, son las unipolares. Finalmente las adicionales no son 3 electrodos más, sino que son una permutación entre el positivo y negativo de las bipolares para sacar mas datos.

Triángulo de Einthoven

Triángulo de Einthoven

Una forma más simple de explicar todo este asunto es mediante el Triángulo de Einthoven, que está al lado de este texto. Para visualizar el triángulo, que una persona se ponga firme y extienda los brazos. Entonces, si colocamos un electrodo en el brazo izquierdo, otro en el derecho y un tercero en su pierna izquierda, tendremos un triángulo ficticio que indica el recorrido de la actividad eléctrica del corazón. con esto podemos saber cual derivación es cual.

– Derivación I: El electrodo en el brazo derecho es el negativo y el electrodo en el brazo izquierdo es positivo.

– Derivación II: El electrodo en el brazo derecho es negativo y el electrodo en la pierna izquierda es positivo.

– Derivación III: El electrodo en el brazo izquierdo es negativo y el electrodo en la pierna izquierda es positivo.

– Derivación aVR: Electrodo positivo en el brazo derecho y el electrodo negativo es la unión de la pierna y brazo izquierdos.

– Derivación aVL: Electrodo positivo en el brazo izquierdo y el electrodo negativo es la unión de la pierna izquierda y brazo derecho.

– Derivación aVF: Electrodo positivo en la pierna izquierda y electrodo negativo es la unión de los brazos izquierdo y derecho.

Las derivaciones de V1 a V6 son unipolares porque están muy cerca del corazón.

Esto ya nos hace ver que la construcción de un ECG no es tan simple, ya que debemos encontrar un método de como cambiar la polarización a cada momento. Esta señal debe amplificarse, por lo que dispondremos de un Amplificador Operacional. Estos suelen aceptar señal positiva y negativa. Conectaremos cada uno de una forma en especial para dar con la derivación que deseamos. En mi caso es muy probable que mi trabajo sólo se centre en el Triángulo de Einthoven, ya que sólo sería necesario…. 3 0 4 derivaciones. Hay formas “algorítmicas” de calcular aVR, aVL y aVF dado que el Triángulo de Einthoven sigue las Leyes de Kirchhoff, pero de momento no nos compliquemos más. En aras a la sencillez, pensaré de momento en las tres derivaciones básicas: I, II y III. En cuando tenga acceso a más bibliografía hablaremos de las demás derivaciones.

Entonces lo ideal sería… encontrar un método para capturar estas señales. SW Harden y su blog nos dicen que podemos usar el micrófono de una PC para llevar la señal… sólo que hay un problema: Los micrófonos registran sólo dos canales de audio: L y R, y el corazón en el modo mas básico tiene 3 canales. Así que deberíamos diseñar un equipo que permita multiplexar señal hacia la tarjeta de sonido para poder ver las 3 posibles derivaciones. El problema es que introducimos delay en el registro de ECG.

El estándar de ECG en papel dice que los papeles usados para graficar el ECG tiene cuadritos de 4 mm. La velocidad promedio es del papel es de 25 mm/s, por lo que cada cuadrito reperesnta 0.04 segundos de ECG.

Explico mejor lo del “delay”, que decia antes. Es deseable introducir la señal del ECG por la tarjeta de sonido, porque podemos tratarla como si fuera señal de audio. Y así podemos amplificarla, filtrarla, tratarla y recogerla con más facilidad, sólo hay que pretender que es un audio. La otra opción seria entrar la señal por puerto serial o USB, pero ahí tendríamos que manejar todo el procesado y filtrado a mano. Después de todo la tarjeta de sonido es un gran convertidor ADC (Analógico-Digital) y hay que aprovecharlo. Ya dijimos que el problema está en que los micrófonos normales sólo dejan entrar dos canales de audio: L y R y que el corazón tiene 3 canales de señales según el Triángulo de Einthoven.

Entonces si sabemos que el estándar de ECG es de papel a cuadros es de 25 mm/s y que cada cuadro normado representa o.o4 segundos de ECG, entonces veremos que no hay necesidad de muestrear a… 0.08 segundos de ECG… porque sólo nos interesa que la velocidad sea de 0.04 segundos. Si la PC es más veloz, podríamos usar ese tiempo extra en cambiar la polaridad de las señales (Considerando a L como positivo y R como negativo) entre los electrodos I, II y III para con sólo un cable estéreo tener las tres derivaciones.

Multiplexado por División de Frecuencia

Multiplexado por División de Frecuencia

(Nota del Autor: Sin embargo la idea no la tengo del todo clara, agradezo que me den ideas al respecto)

Según este paper, la base de datos de arritmias del MIT-BIH está digitalizda a 11 bits con 360 Hz de velocidad de muestreo. Dado que nosotros queremos leer 3 señales diferentes, hay que aumentar un poco más la velocidad de muestreo. 360 * 3 = 1080 Hz de velocidad de muestreo. Sólo debemos instruir a nuestro software que de 1 segundo de señal, 1/3 sea para cada derivación. Naturalmente que al hacer esto multiplexando, perderemos valores, pero como hacemos muestreo tan alto, se puede compensar. Agradesco si me aclaran un poco este detalle.

Otra solución sería usar multiplexacion por división de frecuencias. Los ECG tienen una frecuencia determinada, por lo que las “subimos” un poco y enviamos por el cable todo ese mix, luego por software demultiplexamos y analizamos la señal. De igual modo, yo no soy experto en telecomunicaciones, así que corríganme si digo tonterías.

Finalmente, en el curso de Tesis I nos piden un pequeño documento describiendo nuestra idea. Aquí cuelgo el que presenté para los interesados. Volveré a postear cuando tenga más avances para ustedes. De momento decir que ya que estudio Ingeniería de Sistemas, mi docente no aceptará el tema electrponico o pedirá que lo delegue. De todos modos de algo me informo no vaya a ser que me timen… porque suele pasar.

Posted in Opinion, Papers, Personal, Programacion, Tesis | Comentarios desactivados en Proyecto de Tesis de ECG – Parte 1