Autor Tema: Electro Cardiograma por USB  (Leído 16268 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #15 en: 06 de Enero de 2007, 15:30:36 »
Bien, ahora veamos un poco el programa en Visual C#

El programa empezara a correr una vez que se presione el boton: INICIO.

El boton inicio hara que una rutina se corra constantemente, utilizando un Timer del C#, el intervalo en el cual sera mostrada la imagen, depende del tiempo que tome este intervalo, y este intervalo demorara tanto como demore el PIC en tomar las muestras deseadas y enviarlas a la PC.

Antes de dar inicio al programa, veamos la funcion mas importante, la que captura paquetes desde el PIC:

(Paquete = 64 Muestras)

-----------------------------------------------------------------------------------------------------------------------------------

        public double[] ReciboADC(uint velo, int paquet)
        {
            int i;
            uint veloH,veloL;

            veloH = velo / 256;
            veloL = velo % 256;

           
            DWORD RecvLength4 = 64;

            double[] resultado2 = new double[64 * paquet];

            byte* send_buf = stackalloc byte[1];
            byte* receive_buf4 = stackalloc byte[64];

            send_buf[0] = 0x04;
            send_buf[1] = (byte)veloH;
            send_buf[2] = (byte)veloL;

            for (int u = 0; u < paquet; u++)
            {               
                SendPacket(send_buf, 3); //Aqui enviamos la orden para que haga las conversiones
                ReceivePacket(receive_buf4, &RecvLength4);
                for (i = (u*64); i < 64*(u+1); i++) { resultado2 = receive_buf4[i-(u*64)]; }               
            }
            return resultado2;

        }

---------------------------------------------------------------------------------------

Esta funcion toma 2 argumentos, el numero de paquetes que queremos y el intervalo de tiempo que queremos entre cada muestra. El array "resultado2" del tipo double es el resultado de la llamada a esta funcion, es importante decir que debe ser del tipo double ya que tanto la grafica, el filtro y el detector de picos, trabajan con este tipo de datos, por eso se convierten los datos UNO POR UNO al tipo double. (Si alguien sabe de alguna manera mas eficiente, por favor aviseme jejeje).

Como veran "resultado2" es un array que resulta de concatenar varios paquetes de 64 bytes cada uno. El numero de paquetes sera determinado por nosotros.


Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #16 en: 06 de Enero de 2007, 15:36:45 »
Pues bien, como decia, una vez pulsado el boton de INICIO, se repetira constantemente la siguiente funcion:

-------------------------------------------------------------------------------------------------------------------------------

        private void maintimer_Tick(object sender, EventArgs e)
        {
            int i;
                                         
            double[] filtrada = new double[64 * (int)paquetes.Value];
            double[] resultaadc = new double[64 * (int)paquetes.Value];
            double[] invertida = new double[64 * (int)paquetes.Value];

            double[] recortada = new double[64 * ((int)paquetes.Value - 5)];

            resultaadc = usbapi.ReciboADC((uint)samplingpic.Value, (int)paquetes.Value);

            for (i = 0; i < (64 * (int)paquetes.Value); i++)
            {
                invertida = (-1 * (resultaadc)) + (2 * referencia.Value);           
            }

            if (switch2.Value == false)
            {
                invertida = resultaadc;           
            }
            invertidafig.PlotY(invertida);

            ButterworthLowpassFilter jose = new ButterworthLowpassFilter((int)ordenfiltro.Value, (1000000 / samplingpic.Value), freccorte.Value);
            filtrada = jose.FilterData(invertida);
            filtradafig.PlotY(filtrada);

            for (i = 64*5; i < (64 * (int)paquetes.Value); i++)
            {
                recortada[i- 64*5] = filtrada;
            }
            recort.PlotY(recortada);

            PeakPolarity peakPolarity = PeakPolarity.Peaks;
            NationalInstruments.Analysis.Monitoring.PeakDetector peakDetect
                = new NationalInstruments.Analysis.Monitoring.PeakDetector(reference.Value, 3, peakPolarity);

            peakDetect.Detect(recortada, true, out amplitudesPeak, out locationsPeak, out secondDerivativesPeak);

            numberOfPeaksFound = amplitudesPeak.Length;
            peaksFoundNumericEdit.Value = numberOfPeaksFound;

            if (locationsPeak.Length > 1)
            {
                frec_calculada.Value = 60 * (samplingpic.Value /1000000) * (locationsPeak[(locationsPeak.LongLength)-1] - locationsPeak[(locationsPeak.LongLength) - 2]);
            }

        }

---------------------------------------------------------------------------------------------

Esta vendria a ser la funcion principal, como veran, la parte mas importante esta en la llamada a la funcion ReciboADC que sera la que nos devuelva el array con los datos a procesar.

Si analizan un poco mas el codigo, veran que se incluye tambien un algoritmo para invertir la señal, esto en caso de que la señal les salga invertida.

Se puede ver tambien el proceso de filtrado, en este caso como veran, la señal capturada es bastante ruidosa, por eso el filtro, la frecuencia de corte del filtro y el orden tambien pueden ser configurados desde el panel. (En este caso un filtro pasabajas).

Ademas se incluye un pequeño algoritmo para calcular los latidos por minuto, se hace simplemente determinando los picos mas altos, sabiendo su ubicacion y el tiempo entre cada muestra, podemos determinar este valor.

Pues bien, aqui les dejo una imagen capturada con el ECG funcionando.







Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #17 en: 06 de Enero de 2007, 15:41:27 »
Cuando vemos el panel, encontramos los datos mas importantes:

SamplingRate (us) : Es el tiempo en microsegundos que habra entre cada toma de muestra.

Paquetes : Es la cantidad de paquetes que seran mostrados en la grafica (1 paquete = 64 Muestras)

Nivel de Referencia: Es el nivel de referencia tomado en cuenta para calcular los picos mas altos.

Nivel de Referencia Para Inversion: Nivel de referencia tomado para invertir la señal.

Ademas vemos 3 imagenes, la superior muestra la señal ECG tal y como es recibida desde el ADC.
La segunda es el resultado de filtrar la señal.
Y la tercera es simplemente una señal en la cual 5 paquetes han sido recortados del inicio de la señal filtrada, porque como veran, el filtro genera un transitorio (se llama asi??). Y bueno simplemente para tener una señal limpia y mejor visualizada.

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #18 en: 06 de Enero de 2007, 15:46:50 »
Bien, eso es todo.

El proyecto fue hecho para el curso de Ingenieria Biomedica de la Escuela Profesional de Ingenieria Electronica de la Facultad de Ingenieria de Produccion y Servicios en la Universidad Nacional San Agustin de Arequipa - Peru, en el mes de diciembre del 2006.

Los desarrolladores:

Angel Del Carpio Morales
Jose Salinas Sanchez
Luis Portugal Coasaca


Seguramente hay bastantes errores por ahi, pero el proyecto funciona muy bien. Ademas a partir de este punto se pueden hacer muchas mejoras, la intencion de publicarlo era simplemente compartirlo con ustedes, porque sin la ayuda de estos foros no hubieramos logrado hacerlo en primer lugar. Sobre todo gracias al proyecto de J1M. Por ahi tambien tengo un proyecto de control de 4 motores Paso a Paso utilizando el USB que publicare prontamente.

Una vez mas agradezco por la ayuda brindada y espero no haber causado muchos problemas al publicar el proyecto en 2 sub foros distintos.




Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #19 en: 06 de Enero de 2007, 15:58:12 »
Aqui les dejo un link que podria decirles un poco mas de lo relacionado al electrocardiografo.

http://dac.escet.urjc.es/PFC/cristina_rodriguez/node1.html

De aqui salio la idea de utilizar 2 baterias para alimentar el circuito.

Los electrodos que se muestran aqui son muy buenos y muy caros tambien.

Algo que me olvidada decirles es que mejor funcionara el circuito mientras mas tierra tenga, es por eso que todas las placas que hagan deberan tener tanta tierra como sea posible, y aun mas, utilizar un cable para poder conectar el circuito a tierra externa.


Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #20 en: 06 de Enero de 2007, 16:02:38 »
Aqui les dejo una imagen de los electrodos, son bastante baratos (aprox $0.35 c/u), se adhieren con fuerza y ya vienen con gel. (Ojo para los belludos, antes de aplicarlos, rasurarse jajajjaa) (No es broma).

Desconectado navaismo

  • Jubilado Todopic
  • PIC24H
  • ****
  • Mensajes: 1973
Re: Electro Cardiograma por USB
« Respuesta #21 en: 06 de Enero de 2007, 16:06:49 »
Felicitaciones Alguimis, un excelente proyecto... Y lo de publicarlo en 2 lugares pues para mi estuvo bien que lo pusieras aqui si no ni por enterado.

Muchas felicidades a tu equipo de trabajo por el desarrollo y la aplicacion y sobre todo gracias por compartirlo :-/
"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5378
    • Electrónica Didacta
Re: Electro Cardiograma por USB
« Respuesta #22 en: 06 de Enero de 2007, 16:13:44 »
¡Felicitaciones alquimus! yo no conocía este proyecto, aunque la medicina no es mi área(aunque si una necesidad :D), estudiaré tu código en la parte de  transmisión por usb, para cuando llegue allá.

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado psykhon

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 822
Re: Electro Cardiograma por USB
« Respuesta #23 en: 06 de Enero de 2007, 20:14:27 »
impresionante trabajo :shock:
No, no se lo que estoy haciendo. Nadie sabe que estoy haciendo. Por eso se llama "Investigacion".

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17404
    • MicroPIC
Re: Electro Cardiograma por USB
« Respuesta #24 en: 07 de Enero de 2007, 02:40:34 »
Fantástico Alquimus, gracias por compartirlo.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5333
    • Picmania by Redraven
Re: Electro Cardiograma por USB
« Respuesta #25 en: 07 de Enero de 2007, 08:02:46 »
¡¡¡Wow !!! Buen trabajo Alquimus.
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Electro Cardiograma por USB
« Respuesta #26 en: 07 de Enero de 2007, 13:49:13 »
muy muy buen trabajo alquimus, mi enhorabuena por ese ECG USB :)

Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1921
Re: Electro Cardiograma por USB
« Respuesta #27 en: 07 de Enero de 2007, 15:43:52 »
Hola a todos !

Lo primero es lo primero.

Antes que nada, PEDIR DISCULPAS PÚBLICAMENTE (ya lo he hecho en privado) con alquimus, por haber pensado mal acerca de su accionar, al creer errónea y apresuradamente, que las intenciones del mismo eran otras.

Ahora vamos al ECG.

Me parece un muy buen desarrollo, que evidentemente ha llevado muchas noches de desvelo en el proceso de realización y donde es notable el trabajo corporativo de un grupo importante de personas.

Los desarrolladores:

Angel Del Carpio Morales
Jose Salinas Sanchez
Luis Portugal Coasaca


Bien. Mis felicitaciones por el hecho de que les haya servido para vuestros estudios.
Por otro lado, lamento que todo esté en un lenguaje de programación que no manejo actualmente, pero ello no quita que en un futuro lo pueda comprender e implementar.

Ahora, haciendo uso del derecho que me confiere esta frase :

Seguramente hay bastantes errores por ahi, pero el proyecto funciona muy bien. Ademas a partir de este punto se pueden hacer muchas mejoras ....

Me alegra que el proyecto funcione muy bien, pero ....

Hay fotos del equipo funcionando o armado al menos ?

Mi pregunta se basa en el hecho de que si promociono haber fabricado un cohete, lo menos que puedo hacer, es colocar una foto del mismo y luego sí, escribir todo lo que aprendí de Wernher von Braun.

Porqué no utilizaron filtros de capacitores conmutados como el LMF100 o algun otro de similares características para el filtrado, con el cuál hubieran logrado un resultado notoriamente superior en esa parte tan vital del proyecto ?

Otra cosa.
El más mínimo error en el diseño del PCB convierte a
éste filtro en un oscilador perfecto, cuestión que es definitivamente evitable al usar filtrods de capacitores conmutados.

Avalo esta teoría luego de haber renegado mucho con filtros, hasta descubir lo que antes se conoció como MF10 (hoy LMF100) para realizar este diseño que es parte de todo un sistema de rastreo de señales de radio publicado aquí, hace ya muchos años.

Una más.
Me parece de bastante mal gusto, citar a

........el curso de Ingenieria Biomedica de la Escuela Profesional de Ingenieria Electronica de la Facultad de Ingenieria de Produccion y Servicios en la Universidad Nacional San Agustin de Arequipa - Peru .....

luego de ver esta imagen

En estos dos últimos años, lamentablemente he visto más Electrocardiogramas que al Sol, y más allá de ser un soft muy bien logrado, si un cardiólogo viera ese ECG, diganosticaría severas lesiones por IAM, con propensión inmediata a fibrilación.

Me parece que hacer referencia a una carrera tan importante y a una casa de altos estudios, requeriría un poco más de tacto cuando se habla de electromedicina.

Entiendo que es un proyecto, entiendo lo que se dijo antes ,
.....Seguramente hay bastantes errores por ahi, pero el proyecto funciona muy bien. Ademas a partir de este punto se pueden hacer muchas mejoras....

Sólo estoy opinando.
No estoy diciendo que el trabajo esté mal hecho, o no vaya a funcionar, o que yo lo vaya a hacer mejor, NO (si pensara asi lo hubiera hecho yo y sería millonario fabricando Electrocardiógrafos), al contrario, vuelvo a felicitar el esfuerzo del trabajo investigativo, que evidentemente ha sido mucho.

Sólo quiero opinar.
No quisiera ofender ni molestar a nadie con este post, y así resultare, pediré las disculpas correspondientes como ya lo hice en una oportunidad con alquimus.
Al menos a mí no me cuesta pedir disculpas cuando me equivoco.
Cuando se obra de buena fé, reconocer errores y pedir disculpas es una necesidad de todo hombre de bien, como trato de ser día a día.

RESUMIENDO:
alquimus : Gran trabajo. Denota mucha dedicación, esfuerzo, estudio, insomnio, alegrías y tristezas, avances y retrocesos.
Pero no me convence como Electrocardiógrafo, técnicamente hablando.

POR LO TANTO, QUIERO SUMAR, NO RESTAR :

1) La parte del filtro de ruido, la haría desarrollando y ensayando un pasabandas a base del LMF100 u otro similar, para mejorar la performance del equipo.
2) "Intentaría" ("" léase, no sé hacerlo, investigaría) ampliar la entrada a 5 cables para poder monitorear desde V1 a V5.
3) Lo haría integramente SMD (en ninguna parte del hilo encontré el PCB) para que junto a una Pocket PC, cualquier cardiólogo pueda realizar un ECG en lugar tan inesperados como un baño de un estadio de fútbol hasta en una playa.
4) Haría el soft independiente de paquetes "extras".

Espero no haber sumado muchos amigos que me odien (yo no tengo enemigos, tengo amigos que me odian) con este post, pero si lo releen muchas veces, verán que no hay mala intención.

Un abrazo a todos. :)
Mario
Volveré y seré electrones. ¿En qué estoy jugando? Estoy construyendo un Transceptor para la banda de 33 cm (902Mhz-928Mhz) en FM/FSK (me falta muy poquito) y estoy construyendo otro Transceptor en 27Mhz en Neoteo. ESTO hice durante 2012 en NeoTeo, tal vez algo te sea útil. También te invito a visitar mi BLOG

Desconectado Alquimus

  • PIC12
  • **
  • Mensajes: 50
Re: Electro Cardiograma por USB
« Respuesta #28 en: 07 de Enero de 2007, 20:12:50 »
Hola Mario, agradezco tus sugerencias y criticas, me parecen correctas y adecuadas.

La verdad este vendria a ser el primer trabajo que publico en internet, quizas por ahi no tuve la delicadeza de omitir el nombre de mi casa de estudios, lo cual no hare en el futuro, buen consejo.

Bueno, me complace mucho que una persona que haya visto bastantes ECG's evalue el mio,  tienes razon en decir que esta aun muy verde como para algun producto profesional o incluso comercial, y quien sabe por ahi le doy mas duro y me gano esos millones jejeje.

Veamos los comentarios:

1. El filtro pasabandas fue logrado utilizando componentes que encontramos en el mercado comercial Arequipeño, asi que esa fue nuestra limitante, agradezco la sugerencia de utilizar los LMF100, sabiamos a primera vista que era uno de los primeros puntos a mejorar.

2. Ampliar la entrada a mas electrodos seria genial, estariamos hablando entonces de cambiar casi todo el ckto de adquisicion, incluyendo una mejora mucho mas grande.

3. SMD ... lo maximo... seria genial utilizarlos. Ahora, no soy tan ducho en programacion, pero imagino que programar para una Pocket PC seria algo mas dificil, pero sin duda seria el objetivo a alcanzar para convertir este proyecto en algo mucho mas serio.

4. Los paquetes extra ayudaron muchisimo sobre todo por el tiempo que teniamos para lograrlo. Pero estoy convencido que con algo mas de tiempo y estudio se podria lograr facilmente sin ayuda de los paquetes extra. (Aunk a decir verdad la parte del filtro y la ubicacion de picos resultaria bastante dificil desde mi punto de vista, repito, no soy un experto en programacion)

Tienes razon en lo de las fotos, tratare de conseguir algunas y digo tratare porque aunque parezca increible, para poder aprobar el curso que llevamos, el ingeniero nos "sugiere" donar el proyecto a la facultad (no hay nadie que haya aprobado ese curso sin donar su proyecto). Sin embargo puedo hablar con el ingeniero para que me lo "preste" jajaja un rato para sacarle fotos.

Una vez mas agradezco las criticas vertidas sobre este proyecto. Gracias Mario.


Desconectado Marioguillote

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1921
Re: Electro Cardiograma por USB
« Respuesta #29 en: 07 de Enero de 2007, 21:05:33 »
Por sobre todas las cosas alquimus, yo te agradezco a vós que hayas sabido "leer" mi post, que como dije, tal vez a primera impresión parecía hostil (incluso había momentos mientras escribía, que a mí me parecía hostil), pero muy lejos estaba mi intención de eso.

Respecto a que haya visto muchos ECG, tampoco significa que "sepa" leerlos correctamente, pero a raíz de un infarto que sufrí, he preguntado mucho y he leído otro tanto, pero nada profundo.

Cuando trabajé con el MF10, se conseguía aquí en Argentina por un valor nada alto y hasta te puedo decir que no hace mucho he visto en algún listado de precios al LMF100, es decir, se consiguen aquí.
Si se te complica para conseguirlos en Arequipa o en Lima, házmelo saber, que muy gustosamente te podría enviar un par desde aquí, para que usen y experimenten la presición de dichos filtros.
Va a ser un gusto colaborar al menos un poquito en el proyecto, enviándotelos.
Recuerda, no dejes de avisarme.
No existe comparación respecto a otros filtros.
Es tan superior en presición y por sobre todo en "ancho de banda pasante seleccionable" , que hace que uno no vuelva a usar otro tipo de filtros cuando necesita presición.

Ahora me están llamando a cenar.
Más tarde vuelvo con más comentarios.

Saludos y Gracias.
Mario
« Última modificación: 07 de Enero de 2007, 22:18:35 por Marioguillote »
Volveré y seré electrones. ¿En qué estoy jugando? Estoy construyendo un Transceptor para la banda de 33 cm (902Mhz-928Mhz) en FM/FSK (me falta muy poquito) y estoy construyendo otro Transceptor en 27Mhz en Neoteo. ESTO hice durante 2012 en NeoTeo, tal vez algo te sea útil. También te invito a visitar mi BLOG