DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

77
DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN DE LA SEÑAL CARDIACA Y PULMONAR PARA APLICACIÓN EN TELEMEDICINA VÍCTOR MANUEL CASTRO RAMÍREZ UNIVERSIDAD DE LOS ANDES DEPARTAMENTO DE INGENIERIA ELÉCTRICA Y ELECTRÓNICA BOGOTA 2010

Transcript of DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

Page 1: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN DE LA SEÑAL CARDIACA Y PULMONAR PARA APLICACIÓN EN TELEMEDICINA

VÍCTOR MANUEL CASTRO RAMÍREZ

UNIVERSIDAD DE LOS ANDES DEPARTAMENTO DE INGENIERIA ELÉCTRICA Y ELECTRÓNICA

BOGOTA 2010

Page 2: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN DE LA SEÑAL CARDIACA Y PULMONAR PARA APLICACIÓN EN TELEMEDICINA

VÍCTOR MANUEL CASTRO RAMÍREZ

Monografía para optar al título de Magíster en Ingeniería Electrónica y de Computadores.

Asesor Antonio José Salazar Gómez, Ph.D.

Grupo Ingeniería Biomédica

UNIVERSIDAD DE LOS ANDES DEPARTAMENTO DE INGENIERIA ELÉCTRICA Y ELECTRÓNICA

BOGOTA 2010

Page 3: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

3

CONTENIDO

Pag.

LISTA DE TABLAS 5 LISTA DE FIGURA 6 LISTA DE ANEXOS 8 RESUMEN 9 INTRODUCCIÓN 10 1. FISIOLOGIA CARDIACA 12 1.1 . CORAZÓN 12 1.2 . CICLO CARDIACO 14

1.3 . RUIDOS CARDIACOS 15

2. FISIOLOGÍA RESPIRATORIA 19 2.1 APARATO RESPIRATORIO. 19 2.2 SONIDOS PULMONARES NORMALES. 21

3. TRANSFORMADA DISCRETA WAVELET 24 3.1 ESCOGENCIA DE LA WAVELET. 26 4. DISEÑO DEL SISTEMA 28 4.1 IMPLEMENTACION EN LA PLATAFORMA PC-MATLAB 28 4.1.1 RESULTADOS 30 4.2 IMPLEMENTACIÓN EN LA PLATAFORMA DE HARDWARE. 32

4.2.1 MONTAJE DEL ALGORITMO DWT EN FPGA 34

Page 4: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

4

4.2.1.1 Descomposición. 36 4.2.1.2 Reconstrucción 38 4.2.2 RESULTADOS. 39 5. CONCLUSIONES 40 RECOMENDACIONES 41 BIBLIOGRAFIA 42 ANEXOS 45

Page 5: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

5

LISTA DE TABLAS

Pag

Tabla 1. Categorías de los sonidos pulmonares [12] 22 Tabla 2. Resultado del número de datos después de realizar a una 32 señal de 58000 muestra una descomposición de nivel 7. Tabla 3. Coeficientes banco de filtros Symmlets con p=8. 34 (Obtenidos con wfilters('sym8') Matlab)

Page 6: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

6

LISTA DE FIGURAS

Pag.

Figura 1. Corte del corazón y sus principales vasos sanguíneos 12 Figura 2. Estructura de aparato circulatorio. 13 Figura 3. Fases del ciclo cardiaco 14 Figura 4. Centros del automatismo cardiaco 15 Figura 5. Fases del ciclo cardiaco y sus signos externos. 16 (Leer desde el cetro y seguir en sentido horario). Figura 6. Grafica de los ruidos cardiacos normales 17 Figura 7. Zonas de auscultación cardíaca 18 Figura 8. Aparato respiratorio. 19 Figura 9. Señal respiratoria (Ruido Traqueal) 21 Figura 10. Áreas de auscultación respiratoria. 23 Figura 11. Diagrama de descomposición de la señal por DWT. 25 Figura 12. Diagrama de reconstrucción de la señal por DWT. 26 Figura 13. Función Wavelet Haar, Daubechies (p=6) y Symmlets (p=6). 27 Figura 14. Descomposición nivel siete para una señal de auscultación cardiaca. 27 Figura 15. Acople del micrófono con estetoscopio convencional. 28 Figura 16. Diagrama de bloques del sistema inicial para digitalización 29 y tratamiento de la señal auscultada. Figura 17. Diagrama de adquisición y análisis de la señal obtenida 30 por medio de un estetoscopio

Page 7: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

7

Figura 18. a) Señal obtenida por tarjeta de sonido de un PC. 31 b) Señal de audio cardiaca separada. c) Señal de audio respiratoria separada Figura 19. Descomposición nivel siete, detalla señal cardiaca 32 (número de datos 468) Figura 20. Diagrama de bloques para la adquisición y análisis 33 en tiempo real. Figura 21. a) Memoria dual. b) DCM (controlador de reloj digital). 35 c). multiplicador de 18x18. Figura 22. Diagrama de bloques del algoritmo implementado en la FPGA. 36 Figura 23. Diagrama de hardware para la descomposición. 37 Figura 24. Diagrama de hardware para la reconstrucción. 39 Figura 25. Señal separada con el hardware para la señal de audio 40 cardiaca. a) a 500ms por división b).a 100ms por división

Page 8: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

8

LISTA DE ANEXOS

Pag.

Anexo 1. Programa en Matlab 45 Anexo 2. Programa en Matlab 46 Anexo 3. Descripción de hardware para el algoritmo 49

Page 9: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

9

RESUMEN

La auscultación es uno de los métodos de diagnostico médico más utilizados para analizar el comportamiento escuchando los sonidos pulmonares, cardiacos e intestinales. Ocurre una particularidad en la zona torácica puesto que los sonidos cardiacos y pulmonares se solapan. Este trabajo busca obtener la separación de estas señales en tiempo real, es decir, que un médico tenga la posibilidad de escuchar las señales separadas en el momento de esta realizando la auscultación. Para tal fin se utilizó la transformada discreta de Wavelet (DWT) con un análisis en multi-resolución. Este algoritmo permite descomponer la señal en aproximaciones y detalles. La señal cardiaca se encuentra en el detalle siete y la señal pulmonar en el detalle cinco. El algoritmo fue implementado en software (matlab) y en hardware (FPGA) buscando la separación de las señales en tiempo real. La señal cardiaca se pudo aislar completamente de la pulmonar, pero esta última mantiene componentes de la señal cardiaca.

Índice de Términos— Auscultación, DWT, FPGA, Multi-resolución, Transformada discreta Wavelet,

Page 10: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

10

INTRODUCCIÓN Uno de los exámenes físicos más importantes y que puede dar una información adecuada del funcionamiento del cuerpo humano es el de auscultación. Este examen se hace con un estetoscopio para escuchar los sonidos pulmonares, cardiacos e intestinales. La detección de la anomalía va directamente relacionada con la experiencia del médico que realiza el examen. Es aquí donde la telemedicina tiene un papel importante y es la posibilidad de realizar consultas a expertos sin importar la distancia, donde las limitaciones de los canales de comunicación en sitios remotos incitan a buscar un algoritmo que permita disminuir el número de datos, facilitando esa interacción paciente, médico general y especialista. Dependiendo de la zona del cuerpo en la que el médico este realizando la auscultación existe siempre una mezcla de todas las señales incluyendo el medio ambiente, lo cual va a complicar la detección de la anomalía presentada en el paciente y solo depende de la experiencia del médico que este realizando el examen físico. Cuando el examen se realiza, dependiendo de la zona donde se ausculte, los sonidos estarán mezclados, uno con mayor intensidad que el otro. Los desarrollos de equipos médicos y el caso especifico estetoscopios electrónicos, han dado soluciones para obtener una mejor señal de audio. Para lograr tal mejora se recurre al filtrado de la señal para eliminar ruido del medio ambiente, amplificación de la señal auscultada, digitalización de la señal para realizar un análisis de la misma en un equipo de cómputo por medio de un software especializado. Diferentes algoritmos han sido probados y utilizados para realizar análisis de las señales auscultadas. Varios han tenido éxito para la reducción del ruido cardiaco como son: filtrado adaptativo [3,4], filtrado estadístico [5]; y para la misma separación de los sonidos pulmonares y cardiacos mediante transformada wavelet [6,11] y análisis por componentes independientes (ICA) [7,8], este último necesita por lo menos dos sensores para aplicar el algoritmo y separar las señales. Esto implica un inconveniente ya que en la práctica el médico utiliza un estetoscopio y la utilización de dos o tres ya sería un problema. Este trabajo es la continuación de una investigación previa [9], en la cual se trabajaron algoritmos de prueba como ICA, filtros de modulación de frecuencia y la separación de las señales sonoras mediante la transformada discreta de Wavelet (DWT) con un análisis multi-resolución. En análisis realizados por la transformada wavelet se llegó a resultados satisfactorios (distinguir la señal

Page 11: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

11

cardiaca y disminuir su sonido el los ruidos pulmonares) en señales tomadas y analizadas posteriormente al examen. Implementar el algoritmo DWT, fue la opción más interesante ya que se busca obtener la separación de las señales en tiempo real, es decir, que un médico tenga la posibilidad de escuchar las señales separadas en el momento de esta realizando la auscultación. Para esto, se debe tener un único sensor (a diferencia de ICA), si el examen es en un sitio remoto y se carece de elementos de computo, exige que el algoritmo pueda ser implementado en hardware de tamaño reducido, y si se requiere una consulta a expertos, debe tener la posibilidad de transportar dicha señal por cualquier canal de comunicación. Para lograr ese objetivo se inicia con en el estudio de transformada discreta de Wavelet, la aplicación de dicho algoritmo a muestras tomadas por medio de un estetoscopio convencional al que se le acopla un micrófono unidireccional y la implementación del mismo en una plataforma de hardware realizando un muestreo de la señal buscando el análisis en tiempo real.

Page 12: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

12

1. FISIOLOGÍA CARDIACA

1.1 EL CORAZÓN La distribución de la sangre a través de todos los órganos del cuerpo humano es realizada por el aparato circulatorio. El corazón es un músculo que tiene la capacidad de dar movimiento a la sangre. Su estructura se compone de: pericardio (parte externa), miocardio (fibras musculares) y el endocardio (parte interna). Internamente el corazón posee cuatro cavidades: dos superiores llamadas Aurículas y dos inferiores llamadas ventrículos. A su vez estas cavidades están separadas por un tabique longitudinal que dividen al corazón en izquierdo y derecho (no tiene ningún tipo de comunicación) y otro transversal que divide las aurículas de los ventrículos. Figura 1. Corte del corazón y sus principales vasos sanguíneos.

Fuente. http://www.crucedecaminos.es/imagenes/corazon.jpg

La aurícula derecha se comunica con el ventrículo derecho por medio de la válvula Tricúspide. La aurícula izquierda se comunica con el ventrículo izquierdo por medio de la válvula mitral o bicúspide como se aprecia en la figura 1.

Page 13: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

13

Las aurículas reciben sangre, los ventrículos después de recibir la sangre de las aurículas la envían por todo el cuerpo. Los vasos por los cuales regresa la sangre a las aurículas son las venas. En la aurícula derecha llegan dos la vena cava superior e inferior; en la aurícula izquierda llegan cuatro venas pulmonares; dos derechas y dos izquierdas. Los vasos por los cuales sale la sangre de los ventrículos son las arterias. El ventrículo derecho envía la sangre a los pulmones a través de la arteria pulmonar y el ventrículo izquierdo envía la sangre a todo el cuerpo por medio de la aorta.

Se distinguen dos circulaciones una mayor, la cual es encargada de transportar la sangre del ventrículo izquierdo del corazón a todo los órganos; otra menor que transporta la sangre del ventrículo derecho a los pulmones (figura 2).

Figura 2. Estructura de aparato circulatorio.

Fuente. http://www.fisicanet.com.ar/biologia/introduccion_biologia/ap1/sistema_circulatorio01.jpg

Page 14: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

14

1.2 CICLO CARDIACO

Se denomina ciclo cardiaco a las fases de contracción y relajación por la que pasa el corazón, estos movimientos dan impulso a la sangre. Al contraerse el corazón la sangre de las aurículas es enviada a sus correspondientes ventrículos y de estos a las arterias principales. Los músculos de corazón no funcionan de forma continua ni simultanea, ocurren tres fases (figura 3):

Contracción o sístole auricular: Cuando la aurícula esta llena de sangre, se contrae y la sangre pasa al ventrículo, durante esta fase, la aurícula y el ventrículo se comunican libremente ya que las paredes están relajadas sin ofrecer resistencia. Aproximadamente esta fase tarda 100 milisegundos.

Contracción o sístole ventricular: esta fase comprende dos periodos. El primero en el cual aumenta la tensión para vencer y abrir las válvulas sigmoideas. La elevada tensión en esta etapa obliga a cerrar las válvulas aurículo-ventriculares. La segunda periodo es el de evacuación durante el que se expulsa toda la sangre de los ventrículos. El derecho va a los pulmones y el izquierdo a todo el cuerpo por medio de la aorta. Aproximadamente esta fase tarda 800 milisegundos.

Relajación o diástole: ya los ventrículos desocupados se cierran las válvulas sigmoideas e inmediatamente se abren las válvulas arículo-ventriculares. Las aurículas en este periodo ya poseen sangre por la presión venosa y esa sangre pasa a los ventrículos que estan en relajación. Esta fase dura aproximadamente 400 milisegundos.

Figura 3. Fases del ciclo cardiaco.

Fuente. http://www.electrocardiografia.es/images/ciclo_cardiaco.gif

Page 15: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

15

Estos movimientos del corazón son automáticos. El sistema nervioso central regula las contracciones del corazón según la necesidad. Estos nervios aceleran o moderan el número de contracciones, el nervio que acelera en el simpático y el que modera es el nervio vago, Llegando a unas fibras musculares del miocardio, los nervios forman dos nódulos que están relacionados entre sí y situados en la aurícula derecha. El primer nódulo es el seno-auricular, el segundo es el aurículo-ventricular y de este parte hacia los ventrículos dos ramas de fibras musculares llamado el Haz de His (figura 4). Gracias a estas fibras es que existe el ritmo cardiaco, es decir, la información eléctrica llega de los nervios y se distribuye a través de esos nódulos.

Figura 4. Centros del automatismo cardiaco.

Fuente. http://ciencias.ucv.cl/proyint/image6.jpg 1.3 RUIDOS CARDIACOS El ciclo cardiaco presenta signos externos (Figura 5), estos son los latidos o sonidos cardiacos. Al contraerse los ventrículos, aumenta la presión en su interior y se cierran las válvulas aurícula-ventriculares (mitral y tricúspide), originándose el primer ruido cardíaco (S1) en cual marca el inicio de sístole.

Page 16: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

16

Figura 5. Fases del ciclo cardiaco y sus signos externos. (Leer desde el cetro y seguir en sentido horario).

Fuente. Vidal Jorge. Anatomía e higiene. Stella. Buenos Aires. 1984. página 187 Después del primer ruido, al seguir aumentando la presión dentro de los ventrículos en el transcurso de la sístole, se abren las válvulas aórtica y pulmonar. Normalmente esta apertura no debiera producir ruidos. Una vez que terminan de vaciarse los ventrículos, su presión interior cae y se cierran las válvulas originándose el segundo ruido cardíaco (S2). Este ruido tiene normalmente dos componentes: el cierre de la válvula aórtica, que es de mayor intensidad, y de la válvula pulmonar, que tiene un sonido más débil (figura 6). Otros ruidos que se pueden auscultar son el tercer y cuarto ruidos (S3 y S4), que no siempre están presentes. Su interpretación de normal o patológico depende del contexto global. El tercer ruido (S3) es producido por vibraciones que se generan al comienzo del llene ventricular, cuando la sangre entra desde las aurículas a un ventrículo poco distensible; se ausculta después del segundo ruido, al comenzar la diástole. El cuarto ruido (S4), se atribuye a vibraciones que se generan por la contracción de las aurículas al final de la diástole contra un ventrículo poco distensible; se ausculta inmediatamente antes del primer ruido.

Page 17: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

17

Figura 6. Grafica de los ruidos cardiacos normales.

Fuente. http://www.ispub.com/ispub/ijmt/volume_5_number_1_50/passive-acoustic-signal-acquisition-system-for-non-invasive-fetal-heart-sound-monitoring-applications/acoustic-fig1.jpg Los sonidos cardiacos tienen unas características en tiempo y en frecuencia. Para S1 su duración es entre 0.1 y 0.12 segundos a una frecuencia que varia entre 20-150Hz, para S2 su duración se encuentra entre 0.08 y 0.1 segundos con una frecuencia entre 50 y 60 Hz [13]. En la figura 7 se observa las zonas adecuadas para realizar una auscultación cardiaca:

a) Base derecha (2º espacio intercostal) se puede apreciar el sonido de la válvula aórtica.

b) Base izquierda (2º espacio intercostal) se puede escuchar la válvula

pulmonar.

c) Borde inferior izquierdo del esternón (4º espacio intercostal) se puede escuchar la válvula tricúspide y el corazón derecho.

d) Quinto espacio intercostal se puede apreciar la válvula mitral y el corazón

izquierdo.

e) Xifoides1 se aprecia el sonido de la aorta principal.

1 Xifoides: parte mas baja del hueso esternón

Page 18: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

18

Figura 7. Zonas de auscultación cardíaca.

Fuente.http://solutions.3m.com.co/wps/portal/3M/es_CO/Littmann-WW/stethoscope/education/tech-auscultation/

Page 19: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

19

2. FISIOLOGIA RESPIRATORIA. 2.1 EL APARATO RESPIRATORIO El aparato respiratorio esta formado por las fosas nasales, la laringe la traquea, los bronquios y los pulmones. Figura 8. Aparato respiratorio.

Fuente.http://www.carampangue.cl/Biocarampangue/1-Esquema-Ap-respiratorio.JPG La respiración se considera de dos formas: una interna, la cual consiste en el intercambio gaseoso que se efectúa entre las células y la sangre. Las células reciben oxígeno y estas devuelven gas carbónico. La sangre arterial llega hasta los tejidos cargada de oxígeno y se transforma en venosa gracias a la respiración interna. La sangre venosa también necesita renovarse con oxígeno y eliminar el gas carbónico. Ese intercambio se lleva a cabo en los pulmones y se conoce como respiración externa. En la respiración humana se presentan dos fenómenos:

Page 20: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

20

Fenómenos mecánicos: los cuales aseguran la entrada y salida del aire.

Fenómenos químicos en la respiración interna y externa2. Para el interés de este trabajo, se hace un enfoque hacia los fenómenos mecánicos, los cuales son los movimientos de inspiración y espiración. La inspiración la cavidad torácica3 de ensancha y el aire penetra a los pulmones. Al agrandarse la caja torácica, la pleura4 se adhiere a esta, produciendo una dilatación de las vesículas pulmonares acompañada de una disminución de presión del aire que encierran. El aire externo ingresa en las vesículas para equilibrar la presión interna con la presión atmosférica. La inspiración es un fenómeno activo para la caja torácica y pasivo para el pulmón. El aire entra lentamente a los pulmones puesto que la contracción depende de movimientos musculares progresivamente. La espiración es un fenómeno pasivo para la caja torácica y activo para los pulmones. Los músculos que se habían contraído para producir la dilatación durante la inspiración, vuelve a su posición original en virtud a su elasticidad y en consecuencia las costillas bajan y el diafragma vuelve a su forma convexa. Las vesículas pulmonares también vuelven a su volumen inicial por acción de la presión de las paredes torácicas y en virtud a su elasticidad. La espiración es brusca y expulsa polvo o mucosidades que puedan obstruir las vías respiratorias. Durante la inspiración la tensión del aire contenido en los pulmones es inferior a la presión atmosférica produciendo la entrada del aire. Durante la espiración se produce el fenómeno contrario. La disminución de la presión interna en la inspiración no solo causa la entrada del aire sino de aspiración de la sangre impura, que fluye con mayor fuerza para llenar el vacío producido. Del mismo modo el aumento de la presión que sucede en la espiración, ayuda a la salida de la sangre oxigenada del pulmón hacia el corazón. De este modo la respiración ayuda a la circulación pulmonar.

2 Los fenómenos de la referirse a http/www.infermeravirtual.com/es-es/actividades-de-la-vida-diaria/la-

persona/dimension-biologica/sistema-respiratorio/pdf/sistema-respiratorio.pdf 3 Caja torácica o tórax es una cavidad formada por un esqueleto, en parte óseo y en parte cartilaginoso y por

tejido conjuntivo y muscular. Tiene la forma de un cono limitado por la columna vertebral, costillas, esternón

y diafragma. 4 La pleura es una membrana serosa que envuelve cada pulmón.

Page 21: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

21

2.2 Sonidos pulmonares normales Los ruidos respiratorios son originados por el flujo de aire a través de las vías aéreas que causan turbulencias y originan vibraciones. Las turbulencias se producen en las zonas donde la velocidad del aire es mayor y en aquellas con condiciones geométricas que dificultan un flujo. Esto ocurre en la laringe y en las bifurcaciones de los bronquios mayores, lobulares y segmentarios. En las vías aéreas más periféricas el área de sección va aumentando, por lo que la velocidad disminuye rápidamente, siendo muy lenta cerca de los alvéolos. Los ruidos respiratorios se originan en los bronquios mayores, principalmente lobulares y segmentarios. Este ruido es transmitido a través de las vías aéreas tanto hacia la boca como hacia la periferia. El análisis de los ruidos registrados en la boca muestra una amplia variedad de frecuencias, mientras que los obtenidos en la pared torácica son principalmente de baja frecuencia. En una auscultación a nivel de la tráquea, el sonido normal, denominado ruido traqueal, es de alta frecuencia y alta intensidad. El ruido corrientemente se ausculta durante toda la inspiración y toda la espiración, con una separación neta entre ambas fases, que se produce cuando el flujo disminuye y cae a cero como se observa en la figura 9.

Figura 9. Señal respiratoria (ruido Traqueal).

Fuente. http://escuela.med.puc.cl/publ/modrespiratorio/Mod5/default.html A nivel periférico, por ejemplo en la cara lateral de la base del tórax, el ruido percibido, denominado murmullo pulmonar, es en cambio de baja frecuencia e intensidad, debido a la filtración del ruido. Normalmente se ausculta durante toda

Page 22: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

22

la inspiración y pasa casi sin pausa a la espiración, que se percibe usualmente sólo en su primera mitad, ya que al caer el flujo también cae la intensidad del ruido. En las zonas paravertebrales y paraesternales el ruido tiene características intermedias entre el ruido traqueal y el murmullo pulmonar: de mayor intensidad y frecuencia que este último y tiene una duración más similar al ruido traqueal. Este ruido es denominado ruido traqueobronquial. Los sonidos pulmonares normales se encuentran entre 100Hz y 1000Hz, los sonidos traqueales normales están entre los 100 y 3000Hz [12]. El rango de frecuencias en el que se encuentran algunos de los sonidos pulmonares se aprecian en la tabla 1:

Tabla 1. Categorías de los sonidos pulmonares [12]

SONIDO RANGO DE

FRECUENCIAS

SONIDOS BÁSICOS Sonido pulmonar Ruido 100-1000Hz

Sonido Traqueal Ruido con resonancias 100-3000Hz

SONIDOS AGREGADOS O ADVENTICIOS

Sibilancias Sinusoide con rango 100- 1000Hz con una duración mayor a 80ms

Roncus Series de sinusoide menor a 300 Hz con una duración de 100ms

Crepitaciones Deflexión de Onda de duración menor a 20ms

Fuente. Adaptada de la referencia 12 por el autor. En la auscultación respiratoria se solicita al paciente que respire profundamente. Se debe auscultar metódicamente el tórax en su cara posterior, anterior y lateral, incluyendo el hueco axilar (Figura 10). El ideal es auscultar sucesivamente lugares homólogos de ambos lados, lo que hace posible una comparación inmediata, útil para detectar lesiones unilaterales. La auscultación de la zona cubierta por la escápula y sus músculos es más difícil. La zona auscultable aumenta solicitando al paciente que cruce los brazos por delante del cuerpo, juntando los codos, lo que desplaza las escápulas.

Page 23: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

23

Figura 10. Áreas de auscultación respiratoria.

Fuente. http://www.portalesmedicos.com/imagenes/publicaciones/0801_guia_historia_clinica/planos_exploracion_torax_aparato_respiratorio.jpg

Page 24: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

24

3. TRANSFORMADA DISCRETA WAVELET. El método utilizado para la separación de las señales fue transformada discreta de Wavelet con aproximación por multi-resolución. [10]. La transformada Wavelet descompone la señal en el dominio de tiempo y frecuencia. La familia de funciones usada para representar las señales que corresponde a dilatar (s) y trasladar (u), la cual es una versión de la función madre

de valor medio cero y normalizada. La transformada ),( suWf

s

ut

stsu

1)(,

)(1

)(),( *

, ts

tfsuWf su

Al utilizar una aproximación en multi-resolución se debe seleccionar un juego de

filtros discreto espejos conjugados [10],j

j

s 22 , que formen una familia de

bases ortogonales. La nueva expresión para la trasformada es:

)(2

1)()2,( *

2,2/

2/2/ ttfuWf juj

j

Es posible crear diferentes niveles de descomposición de acuerdo con j. si j es negativo, los detalles son obtenidos, por el contrario, si j es positivo, la aproximación es la que se obtiene. Para poder implementar este algoritmo de forma rápida se utilizo la transformada wavelet ortogonal rápida (DWT) [10]. La aproximación es el producto interno entre la función y la función de escala

njj fna ,,][

El detalle es el producto interno entre la función y la función de ondita

njj fnd ,,][

Page 25: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

25

El teorema desarrollado por Mallat [12] muestra que la aproximación y el detalle pueden ser calculados con una convolución discreta en cascada y un sub-muestreo (Figura. 11).

n

jjj phanapnhpa ]2[][]2[][_

1

n

jjj pganapngpd ]2[][]2[][_

1

Donde h es un filtro pasa-bajas y g es un filtro pasa-altas, estos filtros son para descomposición. Figura 11. Diagrama de descomposición de la señal por DWT.

Fuente. El autor La reconstrucción de obtiene de:

k

j

k

jj kdkngkaknhna ][]2[][]2[][ 11

Donde h es un filtro pasa-bajas y g es un filtro pasa-altas, estos filtros son para

reconstrucción (figura 12).

Page 26: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

26

Figura 12. Diagrama de reconstrucción de la señal por DWT.

Fuente. El autor Los coeficientes de estos cuatro filtros se obtiene en la literatura [12], o con ayuda de herramientas de software como maltab (función “wfilters”). 3.1 ESCOGENCIA DE LA WAVELET Para obtener el banco de filtros, primero se debe seleccionar la función de escala o wavelet para que realice la descomposición. Algunos criterios para seleccionarla dependen de la regularidad de la función f, del número de momentos de fuga (vanish moments) y el tamaño del soporte de la misma [10]. Dentro de las funciones de escala se tiene la Haar (figura. 13), la cual tiene el soporte más pequeño y un solo momento de fuga. Es una limitante para obtener aproximaciones en funciones con características planas. La funciones Daubechies y Symlets (figura. 13), esta ultima una versión simétrica de la primera con fase lineal, son mas parecidas a la señal de audio cardiaca (Figura 6). Un parámetro de la selección es precisamente esa similitud, otro es el número de momentos de fuga para obtener un mejor detalle de la señal a analizar. La seleccionada inicialmente fue la wavelet daubechies por la similitud con la señal sonora del corazón, después se trabajo con la señal Symmlets ya que presentó mejor funcionamiento en la implementación en la FPGA. Esta ondita se

Page 27: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

27

debe seleccionar los momentos de desvanecimiento o fuga p para determinar un detalle mas fino en la aplicación de la transformada wavelet. Figura 13. Función Wavelet Haar, Daubechies (p=6) y Symmlets (p=6).

Fuente el autor. El nivel de descomposiciones depende de que tanta resolución se busca y cuantos detalles de la señal se desean. Es caso de la señal de audio de la auscultación la señal cardiaca se encuentra en la descomposición siete (Figura 14). Figura 14. Descomposición nivel siete para una señal de auscultación cardiaca.

. Fuente. Matlab herramienta wavemenu (wavelet-1D)

Page 28: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

28

4. DISEÑO DEL SISTEMA Conocida la transformada discreta de Wavelet, sus características en el análisis en multi-resolución, se inicia la etapa de prueba del algoritmo en plataformas de hardware. Esta etapa del trabajo se dividió en dos partes:

Implementación del algoritmo en una plataforma PC con ayuda de un software de alto nivel (Matlab).

Implementación del algoritmo en una plataforma basada en FPGA 4.1 IMPLEMENTACIÓN PLATAFORMA PC-MATLAB El software Matlab, dentro de sus múltiples herramientas, posee una especial para el análisis de señal e imágenes utilizando transformada Wavelet. Inicialmente se busco, en bases de datos de la red (Internet), exámenes de auscultación, sonidos cardiacos y pulmonares. [1]. Los sonidos cardiacos encontrados en muchos casos eran de sonidos normales S1, S2, S3 y S4, anomalías como soplos, y algunos de los sonidos pulmonares encontrados fueron roncus, sibilancias y murmullo vesicular. Todas estas señales sonoras estaban filtradas, separadas y muy diferenciadas unas de las otras. Al no encontrar exámenes de auscultaciones sin ningún tipo de procesamiento se tomo la decisión de realizar la captura del las señales. Para tal fin, primero se considero utilizar un micrófono piezoeléctrico de contacto. Se realizaron pruebas con equipos de amplificación y sonido convencionales para escuchar los sonidos cardiacos o pulmonares. No se logro un resultado satisfactorio. Se opto por acoplar un micrófono omnidireccional a un estetoscopio convencional (figura. 14). Figura 14. Acople del micrófono con estetoscopio convencional. Fuente. El autor.

Micrófono Campana

Page 29: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

29

El micrófono omnidireccional con sensibilidad de -58dB e impedancia de 2.2Kohm fue polarizado, amplificado y acoplado para que la señal de la auscultación fuese digitalizada por un microcontrolador análogo (ADuC7020). Una vez digitalizada la señal se envía al PC a través del puerto serial asíncrono a una velocidad de 115200 baudios. Un programa en Matlab recibe los datos y los almacena en un vector. Los datos recibidos son de aproximadamente de 4 segundos. Allí ya se procede a analizar la señal utilizando la herramienta de Matlab (Anexo 1). El tiempo de muestreo seleccionado para la digitalización de la señal se determino de 8 kHz, por las características de la señal de audio pulmonar (capitulo 2). Como el microcontrolador es un elemento secuencial, obtener una conversión a esa frecuencia de muestreo, presenta una variación, la cual depende de las operaciones que se realicen entre conversiones. Ejemplo de ello es cuando se tomaron muestra por dos canales de conversión y se transmitía de forma serial a una velocidad de 115200 baudios, la frecuencia de muestreo cambio a 3571Hz. Y si se realizaba el muestreo de un solo canal y se transmitía a la misma velocidad la frecuencia de muestreo cambio a 18181Hz. Figura 15. Diagrama de bloques del sistema inicial para digitalización y tratamiento de la señal auscultada.

Fuente. El autor. Con los problemas presentados con ese dispositivo, se utilizó la tarjeta de sonido del PC para adquirir datos de auscultaciones en diferentes individuos. El micrófono fue cambiado por un unidireccional (sensibilidad de -46 dB y relación señal a ruido de 55 dB) acoplado a un estetoscopio convencional. Este cambio de sensor se hizo buscando una mejora en la señal adquirida. La captura de datos se realizó a una frecuencia de muestreo de 8000 Hz a 8 bit. Luego de obtener estas muestras, se analizaron en la herramienta de software Matlab. Se logró un análisis en cuasi tiempo real por medio de Matlab, utilizando la herramienta de adquisición de datos, se captura la señal proveniente de la tarjeta de sonido durante 1 segundo, se aplicar el algoritmo y se reproducir (Anexo 2). El inconveniente presentado fue un sonido que se presenta al finalizar la reproducción de una de las señales.

Page 30: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

30

Figura 16. Diagrama de adquisición y análisis de la señal obtenida por medio de un estetoscopio.

Fuente. El autor. 4.1.1 RESULTADOS De las muestras tomadas a individuos entre los 18 y 25 años de edad, algunas de estas señales fueron analizadas aplicando el algoritmo en matlab. El resultado obtenido mediante la utilización de la herramienta matlab, puede apreciarse en la figura 17. En la señal original se observan componentes de la señal cardiaca, ruido ambiente mezclado con la señal pulmonar. Al aplicar el algoritmo se observa una distinción de la señal cardiaca con componentes de ruido y la señal pulmonar con ruido cardiaco presente. También se muestra como por cada nivel de descomposición que se realiza con el algoritmo la aproximación y el detalle reducen el número de datos. Esto se aprecia en la tabla 2, ya en la figura 18 se aprecia el parecido con la señal 17b. La señal de la figura 17b posee 468 datos y la señal de la figura 18 posee 58000 datos consecuencia de la reconstrucción.

Page 31: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

31

Figura 17. a) Señal obtenida por tarjeta de sonido de un PC. b) Señal de audio cardiaca separada. c) Señal de audio respiratoria separada.

0 1 2 3 4 5 6

x 104

-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

a.

0 1 2 3 4 5 6

x 104

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

b.

0 1 2 3 4 5 6

x 104

-0.3

-0.2

-0.1

0

0.1

0.2

0.3

0.4

c.

Fuente. El autor con ayuda del software matlab.

Page 32: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

32

Tabla 2. Resultado del número de datos después de realizar a una señal de 58000 muestra una descomposición de nivel 7.

Nivel De Descomposición

Aproximación Numero De Datos En La Aproximación

Detalle Numero De Datos En El Detalle

0 data 58000 ---------------- ------------------

1 X1 29007 Y1 29007

2 X2 14511 Y2 14511

3 X3 7263 Y3 7263

4 X4 3639 Y4 3639

5 X5 1827 Y5 1827

6 X6 921 Y6 921

7 X7 468 Y7 468

Fuente. Datos tomados de Matlab. Figura 18. Descomposición nivel siete, detalla señal cardiaca (número de datos 468)

0 50 100 150 200 250 300 350 400 450 500-6

-4

-2

0

2

4

6

Fuente. . El autor con ayuda del software matlab 4.2 IMPLEMENTACIÓN PLATAFORMA DE HARDWARE. Los inconvenientes presentados con el microcontrolador (tiempo de conversión), surgió la necesidad de hacer un replanteo del hardware más conveniente para implementar DWT. Como se realiza una conversión ADC, multiplicaciones y sumas y varias de estas operaciones en un dispositivo secuencial

Page 33: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

33

(microprocesador, microcontrolador) genera retardos que pueden estropear la frecuencia de muestreo, la velocidad de las operaciones debe ser elevada y en algunos casos realizarse en paralelo. Por estas razones, se escoge la plataforma FPGA para el montaje del algoritmo. Se utilizó la tarjeta de desarrollo Nexys II, la cual posee una FPGA XC3S1200E y puertos de propósito general. Esta familia de FPGA debido a sus cualidades y sus módulos internos como son: memoria dual de hasta 2kbyte, multiplicadores asíncronos y síncronos de 18 bits y un elemento para dividir, multiplicar, desfasar señales de reloj DCM. Como esta tarjeta de desarrollo carece de conversores ADC, para realizar la capturar y poder realizar el análisis de la señal obtenida del estetoscopio, se adicionó un circuito de polarización del micrófono, un circuito de acondicionamiento de la señal del micrófono (amplificación), un conversor analógico-digital (ADC0820, resolución 8 bit) y un conversor digital-análogo (Figura 19). Figura 19. Diagrama de bloques para la adquisición y análisis en tiempo real.

Fuente. El autor.

Page 34: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

34

4.2.1 MONTAJE DEL ALGORITMO DWT EN FPGA Este algoritmo tanto como para descomposición y reconstrucción, utiliza sumas y productos (convolución). Estos productos son con unos coeficientes que varían entre -1 y 1, más cercanos a cero (Tabla. 3). Seleccionada la ondita (visto en el numeral 3.1), con ayuda de un software como matlab se obtienen estos coeficientes. Cabe agregar que estos coeficientes y este algoritmo no dependen de la frecuencia de muestreo, a diferencia de lo que se presenta cuando se hallan los coeficientes en los filtros digitales tradicionales5 (FIR o IIR). Tabla 3. Coeficientes banco de filtros Symmlets con p=8. (Obtenidos con wfilters('sym8') Matlab)

Descomposición Reconstrucción

Pasa-altos Pasa-bajos Pasa-altos Pasa-bajas

1 -0.0019 -0.0034 -0.0034 0.0019

2 -0.0003 -0.0005 0.0005 -0.0003

3 0.015 0.0317 0.0317 -0.015

4 0.0038 0.0076 -0.0076 0.0038

5 -0.0491 -0.1433 -0.1433 0.0491

6 -0.0272 -0.0613 0.0613 -0.0272

7 0.0519 0.4814 0.4814 -0.0519

8 0.3644 0.7772 -0.7772 0.3644

9 -0.7772 0.3644 0.3644 0.7772

10 0.4814 -0.0519 0.0519 0.4814

11 0.0613 -0.0272 -0.0272 -0.0613

12 -0.1433 0.0491 -0.0491 -0.1433

13 -0.0076 0.0038 0.0038 0.0076

14 0.0317 -0.015 0.015 0.0317

15 0.0005 -0.0003 -0.0003 -0.0005

16 -0.0034 0.0019 -0.0019 -0.0034

Fuente. Datos tomados de matlab.

Debidos que la FPGA es un dispositivo digital, las operaciones de suma y producto se realizan en números binarios. Para facilitar el trabajo de las sumas y

5 Filtros digitales con respuesta al impulso infinita (IIR) o finita (FIR). Para mayor información acerca del

diseño de estos filtros se puede referenciar con cualquier libro de Tratamiento digital de señal.

Page 35: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

35

los productos con signo, se utilizaron librerías (packages fixed_float_types_c.vhdl, fixed_pkg_c.vhdl) de punto fijo disponibles en la red. La cuantización de la señal, los coeficientes, los productos y las sumas se escogió por las características de la plataforma FPGA. Esta posee módulos multiplicadores de 18 bits, es decir, el multiplicando y el multiplicador no pueden superar ese número de bits. Por esta razón, los coeficientes fueron cuantizados a 13 bits (2 bits enteros y 11 bits decimales), en punto fijo; la señal fue normalizada (valores entre 1 y -1) y cuantizada a 18 bits (7 enteros y 11 decimales). Esto para evitar la utilización de multiplicadores en cascada, ya que es una limitante que se tiene en la FPGA escogida (Spartan 3E), la cual solo posee 28 multiplicadores. La descripción de hardware en la FPGA se realiza en VHDL. Se utilizaron módulos internos en la FPGA como son: memorias duales, multiplicadores y un DCM (figura 20). Figura 20. a) Memoria dual. b) DCM (controlador de reloj digital). c). multiplicador de 18x18.

a. b.

c Fuente. ISE10.1 Documentation/software manual/spartan3e-hdl.

Page 36: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

36

La utilización de memoria dual se hace por facilidad de almacenamiento y lectura de datos, es decir, si se implementa en una memoria sencilla requiere multiplexar el manejo del bus de dirección y el bus de datos para acceder a los datos dentro de la misma. Con memoria dual los apuntadores de lectura y escritura para datos y dirección son independientes. Para implementar el algoritmo de la transformada discreta de wavelet con análisis en multi-resolución y obtener resultados similares a los de Matlab, se dividió el trabajo en dos etapas (figura 21): descomposición y reconstrucción, puesto que los algoritmos son diferentes. Figura 21. Diagrama de bloques del algoritmo implementado en la FPGA.

Fuente. El autor. 4.2.1.1 Descomposición: Como el algoritmo esta basado en la convolución, y por cada nivel de descomposición se obtiene la mitad de valores al nivel anterior. Para obtener una descomposición de nivel 7, por lo menos en el último nivel debe poseer 16 datos para poder realizar una reconstrucción de la señal. Esto implica que el algoritmo no puede ser implementado directamente en tiempo real, pero, por la velocidad que maneja la FPGA se puede considerar una aproximación. La descomposición se divide en los siguientes pasos:

Se capturan 1024 muestras. La frecuencia de muestreo es de 4kHz, es decir, se tarda 256ms en obtener los datos. (los datos almacenados tiene valores entre -1 y 1 con una cuantización de 13 bits).

Page 37: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

37

Una vez obtenidos los datos, se inicia el proceso de descomposición (Figura 22). Cada memoria es para cada nivel de descomposición.

Se inicia leyendo la memoria M1 (memoria de datos) y multiplicado los datos por los coeficientes (convolución). Esta multiplicación es en paralelo. Todos los resultados individuales son sumados sincronizadamente y almacenados en la memoria siguiente (M2). Este almacenamiento se hace cada vez que se lee una posición de memoria par.

Continúa con la lectura de la memoria M2 y se almacena en la memoria M3 y así sucesivamente hasta llegar a la descomposición numero siete en el caso de la señal cardiaca.

Figura 22. Diagrama de hardware para la descomposición.

Fuente. El autor.

Page 38: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

38

4.2.1.2 Reconstrucción: De la última descomposición (M8) se inicia el proceso de reconstrucción. La observar el algoritmo (3) de reconstrucción se observa que duplica el numero de datos del nivel anterior que se esta reconstruyendo. Para esto trabaja con convolución entre los coeficientes con pares y la convolución con los coeficientes impares, es decir, de un dato de entrada se obtienen dos datos a la salida. La reconstrucción se divide en los siguientes pasos:

De la última descomposición se inicia el proceso de reconstrucción (Figura 23).

Se lee la memoria M8 y los datos se multiplican por los coeficientes (convolución). Se realizan dos las multiplicaciones en paralelo pero las sumas se separan en una de coeficientes pares y otra de coeficientes impares con los mismos datos.

El almacenamiento de los resultados se realiza primero con posiciones de memoria pares y después con posiciones de memoria impares. Para este caso seria la memoria M9

Se repite el proceso con la memoria M9 en lectura y en escritura M10 y así sucesivamente hasta llegar a la reconstrucción de la señal, en este caso la señal cardiaca. Se busca obtener el mismo número de datos de entrada (1024).

Page 39: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

39

Fig. 23. Diagrama de hardware para la reconstrucción.

Fuente. El autor. El proceso se controla con una máquina de estados que trabaja con un reloj de 25MHz. El tiempo que tarda en realizar las dos etapas es de 200us, puesto que la frecuencia de muestreo de la señal es de 4KHz (periodo de 250us), es tiempo suficiente para no perder muestras por cada proceso de descomposición y reconstrucción. El espacio ocupado en la FPGA es aproximadamente el 20%: 1144 slices, 15 memoria RAM duales, 28 multiplicadores. 4.2.2 RESULTADOS En la señal obtenida por medio del hardware se notan ciertas diferencias con las obtenidas en matlab. Primero, la señal capturada (Figura 24a) tiene una forma de onda irregular debido a las características del micrófono y el acondicionamiento que se le dio a la señal para poder ser digitalizada. Efectivamente el algoritmo permite obtener la señal de audio cardiaca separada.

Page 40: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

40

El algoritmo en la forma que fue implementado no permite un trabajo en tiempo real, como se observa en la figura 24b, la diferencia temporal entre la señal capturada y la señal obtenida esta en el orden de los 250ms.

Figura 24. Señal separada con el hardware para la señal de audio cardiaca. a) a 500ms por división b).a 100ms por división

a.

b.

Fuente. Señales tomadas y almacenadas por un osciloscopio Tektronix TD4002

Page 41: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

41

5. CONCLUSIONES

La separación de la señal cardiaca y pulmonar por medio del algoritmo

DWT es posible realizarla únicamente para la señal cardiaca, la señal

pulmonar siempre tiene componentes de la señal cardiaca.

El nivel de descomposición que se utiliza para un análisis en multi-

resolución presento mejor comportamiento en los niveles superiores a 5, es

decir, la señal cardiaca se detectó ya en el nivel 7 sin ninguna componente

de la señal respiratoria.

Para implementar el algoritmo DWT se debe tener un buffer de

almacenamiento de mínimo de dos elevado al nivel de descomposición

(2nivel) de descomposición (según la literatura), ya en cuestiones prácticas,

específicamente en hardware, el algoritmo debe tener un buffer de

almacenamiento de dos elevado al nivel de descomposición más tres

(2nivel+3) para obtener datos válidos en cada nivel de descomposición.

Consecuencia de lo anterior, fue posible implementar un algoritmo que

funcionaba en cuasi-tiempo-real. Este algoritmo debe esperar la toma de

1024 muestras (250us) para ser aplicado, lo que genera un retraso de 250

us en la señal respecto a la entrada.

La DWT, mediante el análisis en multi-resolución, permite dividir el número

de datos de la señal original, permite una compresión de la misma

dependiendo del nivel de descomposición que se este aplicado. Si la señal

de interés para estudio es la cardiaca y es enviada para ser consultada por

un experto, el detalle, en la descomposición, va tener un número de datos

inferior (compresión de la señal) y solo debe contarse con un algoritmo de

reconstrucción en la parte de recepción.

Para aplicaciones en telemedicina donde se busca transmitir esta señales a

través de las redes de comunicaciones convencionales, el aplicar este

algoritmo para análisis de señales médicas permitiría reducir el número de

datos enviados (reducción del ancho de banda requerido), facilitando la

consulta en lugares remotos.

Page 42: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

42

RECOMENDACIONES

Como trabajo futuro debe considerarse: el montaje de la parte analógica

para una adecuada adquisición y reproducción de las señales separadas.

La posibilidad de enviar en formato de audio a otros dispositivos, compartir

los datos en forma de archivo, la inclusión de formatos médicos para su

aplicación en telemedicina.

También evaluar la posibilidad de incrementar la velocidad de las

operaciones para determinar si el algoritmo puede ser utilizado en otra

aplicación que requiera una mayor frecuencia de muestreo.

Es importante buscar aplicaciones prácticas de los diferentes algoritmos

para procesamiento de señal y clasificación de datos. Estas aplicaciones

en medicina, facilitan el diagnostico y elevan la calidad de vida del ser

humano.

Complementar estos algoritmos con sistemas embebidos permite la

elaboración de herramientas de diagnostico económicas, con la posibilidad

de incluir dispositivos de comunicación permitiendo la consulta a expertos

sin importar lo remoto que sea el lugar en donde se realiza el examen

médico.

Page 43: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

43

REFERENCIAS [1] Respiración y ruidos respiratorios.

http://escuela.med.puc.cl/publ/modrespiratorio/Mod5/ http://auscultacionrespiratoria.blogspot.com/2008_06_01_archive.html http://members.tripod.com/carlos_olmos/sonidos.htm http://www.sld.cu/galerias/ppt/sitios/pdguanabo/examen_fisico_aparato_respiratorio_16_marzo.ppt#256,1,Examen Físico del Aparato Respiratorio

Ruidos cardiacos. http://www.elpulsocardio.com.ar/auscultacion.htm

[2] Bickley, L. Guide to physical examination and history taking. 9th Ed. Lippincott Williams & Wilkins; 2005. [3] Hadjileontiadis, L.J, Panas, S. Adaptive reduction of heart sounds from lung sounds using fourth-order statistics. IEEE Transactions on Biomedical Engineering 1997/07; 44[7]: 642-48. [4] Iyer, V, Ramamoorthy, P, Fan, H, Plolysonsang, Y. Reduction of heart sounds from lung sounds by adaptive filtering. IEEE Duns. Biomed. Eng. 1986; 33[12]: 1141-48. [5] Charleston, S, Azimi-Sadjadi, MR. Reduced order Kalman filtering for the enhancement of respiratory sounds. IEEE Trans. Bio. Eng. 1996; 43[4]: 421-24. [6] Hadjileontiadis, L.J, Panas, S. A wavelet-based reduction of heart sound Noise from lung sounds. International Journal of Medical Informatics 1998; 52: 183-90. [7] Pourazad, MT, Moussavi Z, Farahmand, F, Ward, R.K.. Heart sound separation from lung sound using independent component analysis. Proc. IEEE Eng. Med. Biol. 2005. [8] Chien, J.C, Huang M.C, Lin Y.D, Chong F.C. A study of heart sound and lung sound separation by independent component analysis technique. Proceedings of the 28th IEEE EMBS Annual International Conference. New York City, USA. 2006.

Page 44: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

44

[9] Alvarado C, Ardila S, Salazar A, Lozano F. System of heart and lung sounds separation for telemedicine applications. Uniandes. Bogota, Colombia 2010. [10] Stéphane Mallat. A Wavelet Tour of signal processing, Academic Press, Second Edition, 1998, P 221-256. [11] Hossain I, Moussavi Z. An overview of Heart-Noise reduction of lung sound using wavelet transform based filter.Proc. IEEE EMBS 2003. [12] Pasterkamp H, Kraman S, Wodicka G. Respiratory Sounds. Advances Beyond the Stethoscope. American Journal Of Respiratory And Critical Care Medicinevol. 1561997

[13] Andrés M. Castaño, Edilson Delgado T. Juan I. Godino, Germán Castellanos. Análisis Acústico sobre Señales de Auscultación Digital para la Detección de ç Soplos Cardíacos. Revista Avances en Sistemas e Informática, Vol.4 No. 3, Diciembre de 2007, Medellín, ISSN 1657­7663.

Page 45: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

45

ANEXO 1

%datos cargados a matlab de un archivo.wav

s=datar1;

% descomposición

[x1 y1]=dwt(ss,'sym8');

[x2 y2]=dwt(x1,'sym8'); [x3 y3]=dwt(x2,'sym8'); [x4 y4]=dwt(x3,'sym8'); [x5 y5]=dwt(x4,'sym8'); [x6 y6]=dwt(x5,'sym8'); [x7 y7]=dwt(x6,'sym8'); [x8 y8]=dwt(x7,'sym8');

a1=zeros(length(x8),1); a2=zeros(length(x7),1); a3=zeros(length(x6),1); a4=zeros(length(x5),1); a5=zeros(length(x4),1); a6=zeros(length(x3),1); a7=zeros(length(x2),1); a8=zeros(length(x1),1);

% reconstrucción señal cardiaca r=idwt(a2,y7,'sym8'); r2=idwt(r(1:length(a3),1),a3,'sym8'); r3=idwt(r2(1:length(a4),1),a4,'sym8'); r4=idwt(r3(1:length(a5),1),a5,'sym8'); r5=idwt(r4(1:length(a6),1),a6,'sym8'); r6=idwt(r5(1:length(a7),1),a7,'sym8'); r7=idwt(r6(1:length(a8),1),a8,'sym8');

% reconstrucción señal pulmonary

tr=idwt(x5,a4,'sym8'); tr2=idwt(tr(1:length(a5),1),a5,'sym8'); tr3=idwt(tr2(1:length(a6),1),a6,'sym8'); tr4=idwt(tr3(1:length(a7),1),a7,'sym8'); tr5=idwt(tr4(1:length(a8),1),a8,'sym8');

Page 46: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

46

ANEXO 2

Programa con modo gráfico de matlab. Con captura de datos por la tarjeta de sonido de PC

cada segundo, procesamiento de esos datos y salida por medio de la tarjeta de sonido del

PC.

function varargout = CorazonBien(varargin)

gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @CorazonBien_OpeningFcn, ... 'gui_OutputFcn', @CorazonBien_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end

function CorazonBien_OpeningFcn(hObject, eventdata, handles, varargin) handles.output = hObject; guidata(hObject, handles);

function varargout = CorazonBien_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output;

function slider1_Callback(hObject, eventdata, handles) function slider1_CreateFcn(hObject, eventdata, handles)

if isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor',[.9 .9 .9]); end

function pushbutton1_Callback(hObject, eventdata, handles) function pushbutton2_Callback(hObject, eventdata, handles) function pushbutton3_Callback(hObject, eventdata, handles) function popupmenu1_Callback(hObject, eventdata, handles) gg=get(handles.radiobutton1,'Value'); if gg==1 % configuración de la tarjeta de sonido

AI = analoginput('winsound'); addchannel(AI, 1); Fs = 8000; % Sample Rate is 8000 Hz set (AI, 'SampleRate', Fs) duration = 1; % 2 second acquisition set(AI, 'SamplesPerTrigger', duration*Fs); handles.cod=get(hObject,'Value'); for i=0:10000 start(AI);

% captura de la señal.

Page 47: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

47

data = getdata(AI); %ss=data;

% inicio del algoritmo de separación ss= data; [x1 y1]=dwt(ss,'db8'); [x2 y2]=dwt(x1,'db8'); [x3 y3]=dwt(x2,'db8'); [x4 y4]=dwt(x3,'db8'); [x5 y5]=dwt(x4,'db8'); [x6 y6]=dwt(x5,'db8'); [x7 y7]=dwt(x6,'db8'); [x8 y8]=dwt(x7,'db8');

a1=zeros(length(x8),1); a2=zeros(length(x7),1); a3=zeros(length(x6),1); a4=zeros(length(x5),1); a5=zeros(length(x4),1); a6=zeros(length(x3),1); a7=zeros(length(x2),1); a8=zeros(length(x1),1);

r=idwt(a2,y7,'db8'); r2=idwt(r(1:length(a3),1),a3,'db8'); r3=idwt(r2(1:length(a4),1),a4,'db8'); r4=idwt(r3(1:length(a5),1),a5,'db8'); r5=idwt(r4(1:length(a6),1),a6,'db8'); r6=idwt(r5(1:length(a7),1),a7,'db8'); r7=idwt(r6(1:length(a8),1),a8,'db8'); tr=idwt(x5,a4,'db8');

tr2=idwt(tr(1:length(a5),1),a5,'db8'); tr3=idwt(tr2(1:length(a6),1),a6,'db8'); tr4=idwt(tr3(1:length(a7),1),a7,'db8'); tr5=idwt(tr4(1:length(a8),1),a8,'db8'); hh=(ss-tr5); switch handles.cod case 2 Sample=get(handles.slider1,'Value'); sound(r7*Sample,Fs); case 3 Sample=get(handles.slider1,'Value'); sound(hh*Sample,Fs); case 4 Sample=get(handles.slider1,'Value'); sound(ss*Sample,Fs); end pp=get(handles.radiobutton2,'Value'); if pp==1 delete(AI); break; end end end

Page 48: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

48

function popupmenu1_CreateFcn(hObject, eventdata, handles) if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function radiobutton1_Callback(hObject, eventdata, handles) function edit1_Callback(hObject, eventdata, handles) function edit1_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function edit2_Callback(hObject, eventdata, handles) function edit2_CreateFcn(hObject, eventdata, handles)

if ispc && isequal(get(hObject,'BackgroundColor'),

get(0,'defaultUicontrolBackgroundColor')) set(hObject,'BackgroundColor','white'); end

function radiobutton2_Callback(hObject, eventdata, handles)

Page 49: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

49

Anexo 3 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; library ieee_proposed; use ieee_proposed.float_pkg_c.all; use ieee_proposed.fixed_float_types_c.all; use ieee_proposed.fixed_pkg_c.all; library UNISIM; use UNISIM.VComponents.all; entity fill is Port ( clk,sig,p_c : in std_logic; int : in STD_LOGIC; wr : out STD_LOGIC; adc : in std_logic_vector(7 downto 0); dac,led : out std_logic_vector(7 downto 0)); end fill; architecture Behavioral of fill is signal yy,rr,clk1,clk2,r_sist,r_sisti,inicio,load:std_logic; signal lectura:std_logic_vector(10 downto 0); signal lectura_m1:std_logic_vector(9 downto 0); --adc signal conta: std_logic_vector(15 downto 0); signal res,s,inti :std_logic; signal maestro:std_logic_vector(10 downto 0):="000"&x"00"; signal ss:std_logic_vector(2 downto 0):="000"; --- signal rest:std_logic_vector(12 downto 0); signal final: sfixed(6 downto -11); ---memoria 1 signal datm1_l,salm1_l: std_logic_vector(15 downto 0); signal datm1_h,salm1_h: std_logic_vector(1 downto 0); SIGNAL r_em1,r_m1:std_logic; SIGNAL esm1:std_logic_vector(9 downto 0):="0000000000"; signal dirlect:std_logic_vector(10 downto 0):="00000000000"; ---memoria 2 signal datm2_l,salm2_l: std_logic_vector(15 downto 0); signal datm2_h,salm2_h: std_logic_vector(1 downto 0); SIGNAL r_em2,r_m2:std_logic; SIGNAL esm2:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m2:std_logic_vector(9 downto 0):="0000000000"; ---memoria 3 signal datm3_l,salm3_l: std_logic_vector(15 downto 0); signal datm3_h,salm3_h: std_logic_vector(1 downto 0); SIGNAL r_em3,r_m3:std_logic; SIGNAL esm3:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m3:std_logic_vector(9 downto 0):="0000000000"; ---memoria 4 signal datm4_l,salm4_l: std_logic_vector(15 downto 0); signal datm4_h,salm4_h: std_logic_vector(1 downto 0); SIGNAL r_em4,r_m4:std_logic; SIGNAL esm4:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m4:std_logic_vector(9 downto 0):="0000000000"; ---memoria 5 signal datm5_l,salm5_l: std_logic_vector(15 downto 0); signal datm5_h,salm5_h: std_logic_vector(1 downto 0); SIGNAL r_em5,r_m5:std_logic; SIGNAL esm5:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m5:std_logic_vector(9 downto 0):="0000000000"; ---memoria 6 signal datm6_l,salm6_l: std_logic_vector(15 downto 0);

Page 50: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

50

signal datm6_h,salm6_h: std_logic_vector(1 downto 0); SIGNAL r_em6,r_m6:std_logic; SIGNAL esm6:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m6:std_logic_vector(9 downto 0):="0000000000"; ---memoria 7 signal datm7_l,salm7_l: std_logic_vector(15 downto 0); signal datm7_h,salm7_h: std_logic_vector(1 downto 0); SIGNAL r_em7,r_m7:std_logic; SIGNAL esm7:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m7:std_logic_vector(9 downto 0):="0000000000"; ---memoria 8 signal datm8_l,salm8_l: std_logic_vector(15 downto 0); signal datm8_h,salm8_h: std_logic_vector(1 downto 0); SIGNAL r_em8,r_m8:std_logic; SIGNAL esm8:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m8:std_logic_vector(9 downto 0):="0000000000"; ---memoria 9 signal datm9_l,salm9_l: std_logic_vector(15 downto 0); signal datm9_h,salm9_h: std_logic_vector(1 downto 0); SIGNAL r_em9,r_m9:std_logic; SIGNAL esm9:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m9:std_logic_vector(9 downto 0):="0000000000"; ---memoria 10 signal datm10_l,salm10_l: std_logic_vector(15 downto 0); signal datm10_h,salm10_h: std_logic_vector(1 downto 0); SIGNAL r_em10,r_m10:std_logic; SIGNAL esm10:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m10:std_logic_vector(9 downto 0):="0000000000"; ---memoria 11 signal datm11_l,salm11_l: std_logic_vector(15 downto 0); signal datm11_h,salm11_h: std_logic_vector(1 downto 0); SIGNAL r_em11,r_m11:std_logic; SIGNAL esm11:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m11:std_logic_vector(9 downto 0):="0000000000"; ---memoria 12 signal datm12_l,salm12_l: std_logic_vector(15 downto 0); signal datm12_h,salm12_h: std_logic_vector(1 downto 0); SIGNAL r_em12,r_m12:std_logic; SIGNAL esm12:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m12:std_logic_vector(9 downto 0):="0000000000"; ---memoria 13 signal datm13_l,salm13_l: std_logic_vector(15 downto 0); signal datm13_h,salm13_h: std_logic_vector(1 downto 0); SIGNAL r_em13,r_m13:std_logic; SIGNAL esm13:std_logic_vector(9 downto 0):="0000000000"; signal lectura_m13:std_logic_vector(9 downto 0):="0000000000"; ---memoria 14 signal datm14_l,salm14_l: std_logic_vector(15 downto 0); signal datm14_h,salm14_h: std_logic_vector(1 downto 0); SIGNAL esm14:std_logic_vector(9 downto 0):="0000000000"; SIGNAL r_em14,r_m14:std_logic; signal lectura_m14:std_logic_vector(9 downto 0):="0000000000"; ---memoria 15 signal datm15_l,salm15_l: std_logic_vector(15 downto 0); signal datm15_h,salm15_h: std_logic_vector(1 downto 0); SIGNAL esm15:std_logic_vector(9 downto 0):="0000000000"; SIGNAL r_em15,r_m15:std_logic; signal lectura_m15:std_logic_vector(9 downto 0):="0000000000"; -------------- signal finaly: sfixed(8 downto -11); signal saly:std_logic_vector(19 downto 0):=x"00000"; ---- type estados is(sini,sini_1,s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,S14,S15,S16,s17,s17_1,s17_2,s18,s19,s19_1,s19_2, s20,s21,s21_1,s21_2,s22,s23,s23_1,s23_2,s24,s25,s25_1,s25_2,s26,s27,s27_1,s27_2,s28,s29, s29_1,s29_2,s30,s31,s11_p1,s20_p1,s21_p1,s21_1p1,s21_2p1,s26_p1,s27_p1,s27_1p1,s27_2p1); signal est_pre,est_sig:estados:=sini;

Page 51: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

51

signal tt,cont,lect,lect1,filtro:std_logic; signal salida:std_logic_vector(7 downto 0):=x"00"; SIGNAL a,b:std_logic_vector(17 downto 0):="00"&x"0000"; SIGNAL p,u:std_logic_vector(31 downto 0):=x"00000000"; signal CE1,CE2,r_maestro,r_lect,clk_conv,xx:std_logic; SIGNAL b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12,b13,b14,b15,b16,b17:std_logic_vector(17 downto 0):="00"&x"0000"; SIGNAL d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,d10,d11,d12,d13,d14,d15,d16,d17:std_logic; SIGNAL r0,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15:std_logic_vector(17 downto 0):="00"&x"0000"; signal h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h15: sfixed(6 downto -11); signal f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f11,f12,f13,f14,f15: sfixed(1 downto -11); signal p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12,p13,p14,p15,st: sfixed(8 downto -22); --COEFICIENTES FILTRO PASABAJAS DESOCMPOSICION constant cL0:std_logic_vector(12 downto 0):='1'&x"ff9"; constant cL1:std_logic_vector(12 downto 0):='1'&x"ffe"; constant cL2:std_logic_vector(12 downto 0):='0'&x"040"; constant cL3:std_logic_vector(12 downto 0):='0'&x"00f"; constant cL4:std_logic_vector(12 downto 0):='1'&x"eda"; constant cL5:std_logic_vector(12 downto 0):='1'&x"f82"; constant cL6:std_logic_vector(12 downto 0):='0'&x"3d9"; constant cL7:std_logic_vector(12 downto 0):='0'&x"637"; constant cL8:std_logic_vector(12 downto 0):='0'&x"2ea"; constant cL9:std_logic_vector(12 downto 0):='1'&x"f95"; constant cL10:std_logic_vector(12 downto 0):='1'&x"fc8"; constant cL11:std_logic_vector(12 downto 0):='0'&x"064"; constant cL12:std_logic_vector(12 downto 0):='0'&x"007"; constant cL13:std_logic_vector(12 downto 0):='1'&x"fe1"; constant cL14:std_logic_vector(12 downto 0):='1'&x"fff"; constant cL15:std_logic_vector(12 downto 0):='0'&x"003"; --COEFICIENTES FILTRO PARA ALTAS DESCOMPOSICION constant cH0:std_logic_vector(12 downto 0):='1'&x"ffc"; constant cH1:std_logic_vector(12 downto 0):='1'&x"fff"; constant cH2:std_logic_vector(12 downto 0):='0'&x"01e"; constant cH3:std_logic_vector(12 downto 0):='0'&x"007"; constant cH4:std_logic_vector(12 downto 0):='1'&x"f9b"; constant cH5:std_logic_vector(12 downto 0):='1'&x"fc8"; constant cH6:std_logic_vector(12 downto 0):='0'&x"06a"; constant cH7:std_logic_vector(12 downto 0):='0'&x"2ea"; constant cH8:std_logic_vector(12 downto 0):='1'&x"9c8"; constant cH9:std_logic_vector(12 downto 0):='0'&x"3d9"; constant cH10:std_logic_vector(12 downto 0):='0'&x"07d"; constant cH11:std_logic_vector(12 downto 0):='1'&x"eda"; constant cH12:std_logic_vector(12 downto 0):='1'&x"ff0"; constant cH13:std_logic_vector(12 downto 0):='0'&x"040"; constant cH14:std_logic_vector(12 downto 0):='0'&x"001"; constant cH15:std_logic_vector(12 downto 0):='1'&x"ff9"; signal se1,se2,se3:std_logic_vector(2 downto 0):="000"; signal ENM1,ENM2,ENM3,ENM4,ENM5,ENM6,ENM7,ENM8:std_logic:='1'; --COEFICIENTES FILTRO PASAaltas reconstruccion constant cHri7:std_logic_vector(12 downto 0):='1'&x"fff"; constant cHri6:std_logic_vector(12 downto 0):='0'&x"007"; constant cHri5:std_logic_vector(12 downto 0):='1'&x"fc8"; constant cHri4:std_logic_vector(12 downto 0):='0'&x"2ea"; constant cHri3:std_logic_vector(12 downto 0):='0'&x"3da"; constant cHri2:std_logic_vector(12 downto 0):='1'&x"eda"; constant cHri1:std_logic_vector(12 downto 0):='0'&x"040"; constant cHri0:std_logic_vector(12 downto 0):='1'&x"ff9"; -- constant cHrp7:std_logic_vector(12 downto 0):='1'&x"ffc"; constant cHrp6:std_logic_vector(12 downto 0):='0'&x"01e"; constant cHrp5:std_logic_vector(12 downto 0):='1'&x"f9b"; constant cHrp4:std_logic_vector(12 downto 0):='0'&x"064"; constant cHrp3:std_logic_vector(12 downto 0):='1'&x"9c8"; constant cHrp2:std_logic_vector(12 downto 0):='0'&x"07d"; constant cHrp1:std_logic_vector(12 downto 0):='1'&x"ff0"; constant cHrp0:std_logic_vector(12 downto 0):='0'&x"001";

Page 52: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

52

--COEFICIENTES FILTRO PASABAJAS RECONSTRUCCION constant cLrp7:std_logic_vector(12 downto 0):='1'&x"ff9"; constant cLrp6:std_logic_vector(12 downto 0):='0'&x"040"; constant cLrp5:std_logic_vector(12 downto 0):='1'&x"eda"; constant cLrp4:std_logic_vector(12 downto 0):='0'&x"3d9"; constant cLrp3:std_logic_vector(12 downto 0):='0'&x"2ea"; constant cLrp2:std_logic_vector(12 downto 0):='1'&x"fc8"; constant cLrp1:std_logic_vector(12 downto 0):='0'&x"007"; constant cLrp0:std_logic_vector(12 downto 0):='1'&x"fff"; -- constant cLri7:std_logic_vector(12 downto 0):='1'&x"ffe"; constant cLri6:std_logic_vector(12 downto 0):='0'&x"00f"; constant cLri5:std_logic_vector(12 downto 0):='1'&x"f82"; constant cLri4:std_logic_vector(12 downto 0):='0'&x"637"; constant cLri3:std_logic_vector(12 downto 0):='1'&x"f95"; constant cLri2:std_logic_vector(12 downto 0):='0'&x"064"; constant cLri1:std_logic_vector(12 downto 0):='1'&x"fe1"; constant cLri0:std_logic_vector(12 downto 0):='0'&x"003"; signal se4,se5,se6:std_logic_vector(2 downto 0):="000"; signal ENM9,ENM10,ENM11,ENM12,ENM13,ENM14,ENM15:std_logic:='0'; signal ewm9,ewm10,ewm11,ewm12,ewm13,ewm14,ewm15:std_logic:='0'; SIGNAL b0r,b1r,b2r,b3r,b4r,b5r,b6r,b7r,b8r,b9r,b10r,b11r,b12r,b13r,b14r,b15r,b16r,b17r:std_logic_vector(17 downto 0):="00"&x"0000"; SIGNAL d0r,d1r,d2r,d3r,d4r,d5r,d6r,d7r,d8r,d9r,d10r,d11r,d12r,d13r,d14r,d15r,d16r,d17r:std_logic; SIGNAL r0r,r1r,r2r,r3r,r4r,r5r,r6r,r7r:std_logic_vector(17 downto 0):="00"&x"0000"; signal hrp0,hrp1,hrp2,hrp3,hrp4,hrp5,hrp6,hrp7,hrp8,hrp9,hrp10,hrp11,hrp12,hrp13,hrp14,hrp15: sfixed(6 downto -11); signal fpr0,fpr1,fpr2,fpr3,fpr4,fpr5,fpr6,fpr7,fir0,fir1,fir2,fir3,fir4,fir5,fir6,fir7: sfixed(1 downto -11); signal prp0,prp1,prp2,prp3,prp4,prp5,prp6,prp7,prp8,prp9,prp10,prp11,prp12,prp13,prp14,prp15,stp,sti: sfixed(8 downto -22); signal clk_rec,filtro_rec,reset,reset_r,par_imp,r_rec:std_logic:='0'; SIGNAL up,ui,gr:std_logic_vector(31 downto 0):=x"00000000"; SIGNAL nueva,adc_int:std_logic_vector(7 downto 0):=x"00"; SIGNAL diralma:std_logic_vector(10 downto 0):="000"&x"00"; signal r_alma:std_logic:='0'; begin DCM_inst : DCM generic map ( CLKDV_DIVIDE => 16.0,CLKFX_DIVIDE => 4,CLKFX_MULTIPLY => 16,CLKIN_DIVIDE_BY_2 => true, CLKIN_PERIOD => 0.0,CLKOUT_PHASE_SHIFT => "NONE",CLK_FEEDBACK => "2X", DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",DFS_FREQUENCY_MODE => "LOW", DLL_FREQUENCY_MODE => "LOW",DUTY_CYCLE_CORRECTION => TRUE, FACTORY_JF => X"C080", PHASE_SHIFT => 0, STARTUP_WAIT => FALSE) port map (CLK0 => clk2,CLK180 => open,CLK270 => open,CLK2X => rr,CLK2X180 => open,CLK90 => open, CLKDV => clk1,CLKFX => open,CLKFX180 => open,LOCKED => open,PSDONE => open,STATUS => open, CLKFB => rr,CLKIN => clk,PSCLK => open,PSEN => '0',PSINCDEC => '0',RST => '0'); process(clk1,res,conta) begin if res='0' then conta<="0000000000000000"; elsif rising_edge(clk1)then conta<=conta+1; end if; if conta<260 then s<='1'; else s<='0'; end if; if conta=410 then res<='0'; else res<='1'; end if; end process; t2 : OBUF port map (O => wr,I => s);

Page 53: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

53

t3 : BUFGCE port map (O => inti,CE => '1',I => int); process(inti,diralma) begin if r_alma='1' then diralma<="000"&x"00"; elsif falling_edge(inti)then diralma<=diralma+1; end if; end process; process(int,adc) begin if rising_edge(int)then adc_int<=adc(7 downto 1)&'0'; else adc_int<=adc_int; end if; end process; ff1 : FDCE_1 generic map (INIT => '0') port map (Q => r_maestro,C => clk2,CE => CE1 ,CLR => '0',D => not(r_maestro)); rest<="00000"&adc_int-"0000001101100";--"000"&adc-127; datm1_l<=rest(10 downto 0)&"00000"; datm1_h<=rest(12 downto 11); -- MEMORIA 1 process(lect,dirlect,r_lect) begin if r_lect='1' and r_rec='0' then dirlect<="00000000000"; elsif r_lect='0' and r_rec='1' then dirlect<="00000100000"; elsif r_lect='1' and r_rec='1' then dirlect<="00010000000"; elsif falling_edge(lect)then dirlect<=dirlect+1; end if; end process; esm1<=diralma(9 downto 0); lectura_m1<=dirlect(9 downto 0); M1 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL") port map (DOA=>OPEN,DOB=>salm1_l,DOPA=>OPEN,DOPB=>salm1_h,ADDRA=>esm1,ADDRB=>lectura_m1, CLKA=>inti,CLKB=>lect,DIA=>datm1_l,DIB=>"0000000000000000",DIPA=>datm1_h,DIPB =>"00",ENA=>'1', ENB =>ENM1,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 2 process(r_em2,esm2,reset) begin if reset='1' then esm2<="00"&x"00"; elsif falling_edge(r_em2)then esm2<=esm2+1; else esm2<=esm2; end if; end process; lectura_m2<=dirlect(9 downto 0); M2 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL",

INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm2_l,DOPA=>OPEN,DOPB=>salm2_h,ADDRA=>esm2,ADDRB=>lectura_m2, CLKA=>r_m2,CLKB=>lect,DIA=>datm2_l,DIB=>"0000000000000000",DIPA=>datm2_h,DIPB =>"00",ENA=>'1',

Page 54: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

54

ENB =>ENM2,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 3 process(r_em3,esm3,reset) begin if reset='1' then esm3<="00"&x"00"; elsif falling_edge(r_em3)then esm3<=esm3+1; else esm3<=esm3; end if; end process; lectura_m3<=dirlect(9 downto 0); M3 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm3_l,DOPA=>OPEN,DOPB=>salm3_h,ADDRA=>esm3,ADDRB=>lectura_m3, CLKA=>r_m3,CLKB=>lect,DIA=>datm3_l,DIB=>"0000000000000000",DIPA=>datm3_h,DIPB =>"00",ENA=>'1', ENB =>ENM3,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 4 process(r_em4,esm4,reset) begin if reset='1' then esm4<="00"&x"00"; elsif falling_edge(r_em4)then esm4<=esm4+1; else esm4<=esm4; end if; end process; lectura_m4<=dirlect(9 downto 0); M4 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm4_l,DOPA=>OPEN,DOPB=>salm4_h,ADDRA=>esm4,ADDRB=>lectura_m4, CLKA=>r_m4,CLKB=>lect,DIA=>datm4_l,DIB=>"0000000000000000",DIPA=>datm4_h,DIPB =>"00",ENA=>'1', ENB =>ENM4,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 5 process(r_em5,esm5,reset) begin if reset='1' then esm5<="00"&x"00"; elsif falling_edge(r_em5)then esm5<=esm5+1; else esm5<=esm5; end if; end process; lectura_m5<=dirlect(9 downto 0); M5 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm5_l,DOPA=>OPEN,DOPB=>salm5_h,ADDRA=>esm5,ADDRB=>lectura_m5, CLKA=>r_m5,CLKB=>lect,DIA=>datm5_l,DIB=>"0000000000000000",DIPA=>datm5_h,DIPB =>"00",ENA=>'1', ENB =>ENM5,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 6 process(r_em6,esm6,reset)

Page 55: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

55

begin if reset='1' then esm6<="00"&x"00"; elsif falling_edge(r_em6)then esm6<=esm6+1; else esm6<=esm6; end if; end process; lectura_m6<=dirlect(9 downto 0); M6 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm6_l,DOPA=>OPEN,DOPB=>salm6_h,ADDRA=>esm6,ADDRB=>lectura_m6, CLKA=>r_m6,CLKB=>lect,DIA=>datm6_l,DIB=>"0000000000000000",DIPA=>datm6_h,DIPB =>"00",ENA=>'1', ENB =>ENM6,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 7 process(r_em7,esm7,reset) begin if reset='1' then esm7<="00"&x"00"; elsif falling_edge(r_em7)then esm7<=esm7+1; else esm7<=esm7; end if; end process; lectura_m7<=dirlect(9 downto 0); M7 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm7_l,DOPA=>OPEN,DOPB=>salm7_h,ADDRA=>esm7,ADDRB=>lectura_m7, CLKA=>r_m7,CLKB=>lect,DIA=>datm7_l,DIB=>"0000000000000000",DIPA=>datm7_h,DIPB =>"00",ENA=>'1', ENB =>ENM7,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 8 process(r_em8,esm8,reset) begin if reset='1' then esm8<="00"&x"00"; elsif falling_edge(r_em8)then esm8<=esm8+1; else esm8<=esm8; end if; end process; lectura_m8<=dirlect(9 downto 0); M8 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm8_l,DOPA=>OPEN,DOPB=>salm8_h,ADDRA=>esm8,ADDRB=>lectura_m8, CLKA=>r_m8,CLKB=>lect,DIA=>datm8_l,DIB=>"0000000000000000",DIPA=>datm8_h,DIPB =>"00",ENA=>'1', ENB =>ENM8,SSRA=>'1',SSRB=>'0',WEA=>'1',WEB=>'0'); -- MEMORIA 9 process(r_em9,esm9,reset,reset_r) begin if reset_r='0' and reset='1' then esm9<="00"&x"00"; elsif reset_r='1' and reset='0' then

Page 56: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

56

esm9<="00"&x"01"; elsif falling_edge(r_em9)then esm9<=esm9+2; end if; end process; lectura_m9<=dirlect(9 downto 0); M9 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm9_l,DOPA=>OPEN,DOPB=>salm9_h,ADDRA=>esm9,ADDRB=>lectura_m9, CLKA=>r_m9,CLKB=>lect,DIA=>datm9_l,DIB=>"0000000000000000",DIPA=>datm9_h,DIPB =>"00",ENA=>'1', ENB =>ENM9,SSRA=>'1',SSRB=>'0',WEA=>ewm9,WEB=>'0'); -- MEMORIA 10 process(r_em10,esm10,reset,reset_r) begin if reset='1' and reset_r='0' then esm10<="00"&x"00"; elsif reset_r='1' and reset='0' then esm10<="00"&x"01"; elsif falling_edge(r_em10)then esm10<=esm10+2; end if; end process;

lectura_m10<=dirlect(9 downto 0); M10 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000",

Page 57: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

57

INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm10_l,DOPA=>OPEN,DOPB=>salm10_h,ADDRA=>esm10,ADDRB=>lectura_m10, CLKA=>r_m10,CLKB=>lect,DIA=>datm10_l,DIB=>"0000000000000000",DIPA=>datm10_h,DIPB =>"00",ENA=>'1', ENB =>ENM10,SSRA=>'1',SSRB=>'0',WEA=>ewm10,WEB=>'0'); -- MEMORIA 11 process(r_em11,esm11,reset,reset_r) begin if reset='1' and reset_r='0' then esm11<="00"&x"00"; elsif reset_r='1' and reset='0' then esm11<="00"&x"01"; elsif falling_edge(r_em11)then esm11<=esm11+2; end if; end process; lectura_m11<=dirlect(9 downto 0); M11 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000",

Page 58: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

58

INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm11_l,DOPA=>OPEN,DOPB=>salm11_h,ADDRA=>esm11,ADDRB=>lectura_m11, CLKA=>r_m11,CLKB=>lect,DIA=>datm11_l,DIB=>"0000000000000000",DIPA=>datm11_h,DIPB =>"00",ENA=>'1', ENB =>ENM11,SSRA=>'1',SSRB=>'0',WEA=>ewm11,WEB=>'0'); -- MEMORIA 12 process(r_em12,esm12,reset,reset_r) begin if reset='1' and reset_r='0' then esm12<="00"&x"00"; elsif reset_r='1' and reset='0' then esm12<="00"&x"01"; elsif falling_edge(r_em12)then esm12<=esm12+2; end if; end process; lectura_m12<=dirlect(9 downto 0); M12 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm12_l,DOPA=>OPEN,DOPB=>salm12_h,ADDRA=>esm12,ADDRB=>lectura_m12, CLKA=>r_m12,CLKB=>lect,DIA=>datm12_l,DIB=>"0000000000000000",DIPA=>datm12_h,DIPB =>"00",ENA=>'1', ENB =>ENM12,SSRA=>'1',SSRB=>'0',WEA=>ewm12,WEB=>'0');

Page 59: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

59

-- MEMORIA 13 process(r_em13,esm13,reset,reset_r) begin if reset='1' and reset_r='0' then esm13<="00"&x"00"; elsif reset_r='1' and reset='0' then esm13<="00"&x"01"; elsif falling_edge(r_em13)then esm13<=esm13+2; end if; end process; lectura_m13<=dirlect(9 downto 0); M13 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm13_l,DOPA=>OPEN,DOPB=>salm13_h,ADDRA=>esm13,ADDRB=>lectura_m13, CLKA=>r_m13,CLKB=>lect,DIA=>datm13_l,DIB=>"0000000000000000",DIPA=>datm13_h,DIPB =>"00",ENA=>'1', ENB =>ENM13,SSRA=>'1',SSRB=>'0',WEA=>ewm13,WEB=>'0'); -- MEMORIA 14 process(r_em14,esm14,reset,reset_r) begin if reset='1' and reset_r='0' then esm14<="00"&x"00"; elsif reset_r='1' and reset='0' then esm14<="00"&x"01"; elsif falling_edge(r_em14)then esm14<=esm14+2; end if; end process; lectura_m14<=dirlect(9 downto 0); M14 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL",

Page 60: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

60

INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm14_l,DOPA=>OPEN,DOPB=>salm14_h,ADDRA=>esm14,ADDRB=>lectura_m14, CLKA=>r_m14,CLKB=>lect,DIA=>datm14_l,DIB=>"0000000000000000",DIPA=>datm14_h,DIPB =>"00",ENA=>'1', ENB =>ENM14,SSRA=>'1',SSRB=>'0',WEA=>ewm14,WEB=>'0'); -- MEMORIA 15 process(r_em15,esm15,reset,reset_r) begin if reset='1' and reset_r='0' then esm15<="00"&x"00"; elsif reset_r='1' and reset='0' then esm15<="00"&x"01"; elsif rising_edge(r_em15)then esm15<=esm15+2; end if; end process; lectura_m15<=diralma(9 downto 0); M15 : RAMB16_S18_S18 generic map (INIT_A => X"00000",INIT_B => X"00000",SRVAL_A => X"00000",SRVAL_B => X"00000", WRITE_MODE_A => "WRITE_FIRST",WRITE_MODE_B => "WRITE_FIRST",SIM_COLLISION_CHECK => "ALL", INIT_00 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_01 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_02 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_03 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_04 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_05 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_06 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_07 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_08 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_09 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_0E => X"0000000000000000000000000000000000000000000000000000000000000000",

Page 61: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

61

INIT_0F => X"0000000000000000000000000000000000000000000000000000000000000000", -- Address 512 to 1023 INIT_10 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_11 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_12 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_13 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_14 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_15 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_16 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_17 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_18 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_19 => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1A => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1B => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1C => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1D => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1E => X"0000000000000000000000000000000000000000000000000000000000000000", INIT_1F => X"0000000000000000000000000000000000000000000000000000000000000000") port map (DOA=>OPEN,DOB=>salm15_l,DOPA=>OPEN,DOPB=>salm15_h,ADDRA=>esm15,ADDRB=>lectura_m15, CLKA=>r_m15,CLKB=>inti,DIA=>datm15_l,DIB=>"0000000000000000",DIPA=>datm15_h,DIPB =>"00",ENA=>'1', ENB =>'1',SSRA=>'0',SSRB=>'0',WEA=>ewm15,WEB=>'0'); --SELECCION DE LA MEMORIA Q ENTRA AL FILTRO process(se1,salm1_l,salm1_h,salm2_l,salm2_h,salm3_l,salm3_h,salm4_l,salm4_h,salm5_l,salm5_h,salm6_l,salm6_h,salm7_l,salm7_h) begin case se1 is when "000"=>d0<=salm1_l(0);d1<=salm1_l(1);d2<=salm1_l(2);d3<=salm1_l(3);d4<=salm1_l(4);d5<=salm1_l(5); d6<=salm1_l(6);d7<=salm1_l(7);d8<=salm1_l(8);d9<=salm1_l(9);d10<=salm1_l(10);d11<=salm1_l(11); d12<=salm1_l(12);d13<=salm1_l(13);d14<=salm1_l(14);d15<=salm1_l(15);d16<=salm1_h(0);d17<=salm1_h(1); when "001"=>d0<=salm2_l(0);d1<=salm2_l(1);d2<=salm2_l(2);d3<=salm2_l(3);d4<=salm2_l(4);d5<=salm2_l(5); d6<=salm2_l(6);d7<=salm2_l(7);d8<=salm2_l(8);d9<=salm2_l(9);d10<=salm2_l(10);d11<=salm2_l(11); d12<=salm2_l(12);d13<=salm2_l(13);d14<=salm2_l(14);d15<=salm2_l(15);d16<=salm2_h(0);d17<=salm2_h(1); when "010"=>d0<=salm3_l(0);d1<=salm3_l(1);d2<=salm3_l(2);d3<=salm3_l(3);d4<=salm3_l(4);d5<=salm3_l(5); d6<=salm3_l(6);d7<=salm3_l(7);d8<=salm3_l(8);d9<=salm3_l(9);d10<=salm3_l(10);d11<=salm3_l(11); d12<=salm3_l(12);d13<=salm3_l(13);d14<=salm3_l(14);d15<=salm3_l(15);d16<=salm3_h(0);d17<=salm3_h(1); when "011"=>d0<=salm4_l(0);d1<=salm4_l(1);d2<=salm4_l(2);d3<=salm4_l(3);d4<=salm4_l(4);d5<=salm4_l(5); d6<=salm4_l(6);d7<=salm4_l(7);d8<=salm4_l(8);d9<=salm4_l(9);d10<=salm4_l(10);d11<=salm4_l(11); d12<=salm4_l(12);d13<=salm4_l(13);d14<=salm4_l(14);d15<=salm4_l(15);d16<=salm4_h(0);d17<=salm4_h(1); when "100"=>d0<=salm5_l(0);d1<=salm5_l(1);d2<=salm5_l(2);d3<=salm5_l(3);d4<=salm5_l(4);d5<=salm5_l(5); d6<=salm5_l(6);d7<=salm5_l(7);d8<=salm5_l(8);d9<=salm5_l(9);d10<=salm5_l(10);d11<=salm5_l(11); d12<=salm5_l(12);d13<=salm5_l(13);d14<=salm5_l(14);d15<=salm5_l(15);d16<=salm5_h(0);d17<=salm5_h(1); when "101"=>d0<=salm6_l(0);d1<=salm6_l(1);d2<=salm6_l(2);d3<=salm6_l(3);d4<=salm6_l(4);d5<=salm6_l(5); d6<=salm6_l(6);d7<=salm6_l(7);d8<=salm6_l(8);d9<=salm6_l(9);d10<=salm6_l(10);d11<=salm6_l(11); d12<=salm6_l(12);d13<=salm6_l(13);d14<=salm6_l(14);d15<=salm6_l(15);d16<=salm6_h(0);d17<=salm6_h(1); when "110"=>d0<=salm7_l(0);d1<=salm7_l(1);d2<=salm7_l(2);d3<=salm7_l(3);d4<=salm7_l(4);d5<=salm7_l(5); d6<=salm7_l(6);d7<=salm7_l(7);d8<=salm7_l(8);d9<=salm7_l(9);d10<=salm7_l(10);d11<=salm7_l(11); d12<=salm7_l(12);d13<=salm7_l(13);d14<=salm7_l(14);d15<=salm7_l(15);d16<=salm7_h(0);d17<=salm7_h(1); when others=>d0<=salm1_l(0);d1<=salm1_l(1);d2<=salm1_l(2);d3<=salm1_l(3);d4<=salm1_l(4);d5<=salm1_l(5); d6<=salm1_l(6);d7<=salm1_l(7);d8<=salm1_l(8);d9<=salm1_l(9);d10<=salm1_l(10);d11<=salm1_l(11); d12<=salm1_l(12);d13<=salm1_l(13);d14<=salm1_l(14);d15<=salm1_l(15);d16<=salm1_h(0);d17<=salm1_h(1); end case; end process; --INICIO DEL FILTRO EN PARALELO EFECTIVO QUE FUNCIONA PARA DESCOMPOSICION ff2 : FDCE_1 generic map (INIT => '0') port map (Q => lect,C => clk2,CE => CE2 ,CLR => '0',D => not(lect)); ff3 : FDCE_1 generic map (INIT => '1') port map (Q => lect1,C => NOT(lect),CE => CE2 ,CLR => '0',D => not(lect1)); clk_conv<=lect; process (clk_conv,d0) begin if rising_edge(clk_conv) then b0 <= b0(16 downto 0) & d0; end if;

Page 62: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

62

end process; process (clk_conv,d1) begin if rising_edge(clk_conv) then b1 <= b1(16 downto 0) & d1; end if; end process; process (clk_conv,d2) begin if rising_edge(clk_conv) then b2 <= b2(16 downto 0) & d2; end if; end process; process (clk_conv,d3) begin if rising_edge(clk_conv) then b3 <= b3(16 downto 0) & d3; end if; end process; process (clk_conv,d4) begin if rising_edge(clk_conv) then b4 <= b4(16 downto 0) & d4; end if; end process; process (clk_conv,d5) begin if rising_edge(clk_conv) then b5 <= b5(16 downto 0) & d5; end if; end process; process (clk_conv,d6) begin if rising_edge(clk_conv) then b6 <= b6(16 downto 0) & d6; end if; end process; process (clk_conv,d7) begin if rising_edge(clk_conv) then b7 <= b7(16 downto 0) & d7; end if; end process; process (clk_conv,d8) begin if rising_edge(clk_conv) then b8 <= b8(16 downto 0) & d8; end if; end process; process (clk_conv,d9) begin if rising_edge(clk_conv) then b9 <= b9(16 downto 0) & d9; end if; end process; process (clk_conv,d10) begin if rising_edge(clk_conv) then b10 <= b10(16 downto 0) & d10; end if; end process; process (clk_conv,d11) begin if rising_edge(clk_conv) then b11 <= b11(16 downto 0) & d11; end if; end process;

Page 63: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

63

process (clk_conv,d12) begin if rising_edge(clk_conv) then b12 <= b12(16 downto 0) & d12; end if; end process; process (clk_conv,d13) begin if rising_edge(clk_conv) then b13 <= b13(16 downto 0) & d13; end if; end process; process (clk_conv,d14) begin if rising_edge(clk_conv) then b14 <= b14(16 downto 0) & d14; end if; end process; process (clk_conv,d15) begin if rising_edge(clk_conv) then b15 <= b15(16 downto 0) & d15; end if; end process; process (clk_conv,d16) begin if rising_edge(clk_conv) then b16 <= b16(16 downto 0) & d16; end if; end process; process (clk_conv,d17) begin if rising_edge(clk_conv) then b17 <= b17(16 downto 0) & d17; end if; end process; r0<=b17(0)&b16(0)&b15(0)&b14(0)&b13(0)&b12(0)&b11(0)&b10(0)&b9(0)&b8(0)&b7(0)&b6(0)&b5(0)&b4(0)&b3(0)&b2(0)&b1(0)&b0(0); r1<=b17(1)&b16(1)&b15(1)&b14(1)&b13(1)&b12(1)&b11(1)&b10(1)&b9(1)&b8(1)&b7(1)&b6(1)&b5(1)&b4(1)&b3(1)&b2(1)&b1(1)&b0(1); r2<=b17(2)&b16(2)&b15(2)&b14(2)&b13(2)&b12(2)&b11(2)&b10(2)&b9(2)&b8(2)&b7(2)&b6(2)&b5(2)&b4(2)&b3(2)&b2(2)&b1(2)&b0(2); r3<=b17(3)&b16(3)&b15(3)&b14(3)&b13(3)&b12(3)&b11(3)&b10(3)&b9(3)&b8(3)&b7(3)&b6(3)&b5(3)&b4(3)&b3(3)&b2(3)&b1(3)&b0(3); r4<=b17(4)&b16(4)&b15(4)&b14(4)&b13(4)&b12(4)&b11(4)&b10(4)&b9(4)&b8(4)&b7(4)&b6(4)&b5(4)&b4(4)&b3(4)&b2(4)&b1(4)&b0(4); r5<=b17(5)&b16(5)&b15(5)&b14(5)&b13(5)&b12(5)&b11(5)&b10(5)&b9(5)&b8(5)&b7(5)&b6(5)&b5(5)&b4(5)&b3(5)&b2(5)&b1(5)&b0(5); r6<=b17(6)&b16(6)&b15(6)&b14(6)&b13(6)&b12(6)&b11(6)&b10(6)&b9(6)&b8(6)&b7(6)&b6(6)&b5(6)&b4(6)&b3(6)&b2(6)&b1(6)&b0(6); r7<=b17(7)&b16(7)&b15(7)&b14(7)&b13(7)&b12(7)&b11(7)&b10(7)&b9(7)&b8(7)&b7(7)&b6(7)&b5(7)&b4(7)&b3(7)&b2(7)&b1(7)&b0(7); r8<=b17(8)&b16(8)&b15(8)&b14(8)&b13(8)&b12(8)&b11(8)&b10(8)&b9(8)&b8(8)&b7(8)&b6(8)&b5(8)&b4(8)&b3(8)&b2(8)&b1(8)&b0(8); r9<=b17(9)&b16(9)&b15(9)&b14(9)&b13(9)&b12(9)&b11(9)&b10(9)&b9(9)&b8(9)&b7(9)&b6(9)&b5(9)&b4(9)&b3(9)&b2(9)&b1(9)&b0(9); r10<=b17(10)&b16(10)&b15(10)&b14(10)&b13(10)&b12(10)&b11(10)&b10(10)&b9(10)&b8(10)&b7(10)&b6(10)&b5(10)&b4(10)&b3(10)&b2(10)&b1(10)&b0(10); r11<=b17(11)&b16(11)&b15(11)&b14(11)&b13(11)&b12(11)&b11(11)&b10(11)&b9(11)&b8(11)&b7(11)&b6(11)&b5(11)&b4(11)&b3(11)&b2(11)&b1(11)&b0(11); r12<=b17(12)&b16(12)&b15(12)&b14(12)&b13(12)&b12(12)&b11(12)&b10(12)&b9(12)&b8(12)&b7(12)&b6(12)&b5(12)&b4(12)&b3(12)&b2(12)&b1(12)&b0(12); r13<=b17(13)&b16(13)&b15(13)&b14(13)&b13(13)&b12(13)&b11(13)&b10(13)&b9(13)&b8(13)&b7(13)&b6(13)&b5(13)&b4(13)&b3(13)&b2(13)&b1(13)&b0(13); r14<=b17(14)&b16(14)&b15(14)&b14(14)&b13(14)&b12(14)&b11(14)&b10(14)&b9(14)&b8(14)&b7(14)&b6(14)&b5(14)&b4(14)&b3(14)&b2(14)&b1(14)&b0(14);

Page 64: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

64

r15<=b17(15)&b16(15)&b15(15)&b14(15)&b13(15)&b12(15)&b11(15)&b10(15)&b9(15)&b8(15)&b7(15)&b6(15)&b5(15)&b4(15)&b3(15)&b2(15)&b1(15)&b0(15); process(filtro) begin if filtro='0' then f0<=sfixed(cL0);f1<=sfixed(cL1);f2<=sfixed(cL2);f3<=sfixed(cL3);f4<=sfixed(cL4);f5<=sfixed(cL5); f6<=sfixed(cL6);f7<=sfixed(cL7);f8<=sfixed(cL8);f9<=sfixed(cL9);f10<=sfixed(cL10);f11<=sfixed(cL11); f12<=sfixed(cL12);f13<=sfixed(cL13);f14<=sfixed(cL14);f15<=sfixed(cL15); else f0<=sfixed(cH0);f1<=sfixed(cH1);f2<=sfixed(cH2);f3<=sfixed(cH3);f4<=sfixed(cH4);f5<=sfixed(cH5); f6<=sfixed(cH6);f7<=sfixed(cH7);f8<=sfixed(cH8);f9<=sfixed(cH9);f10<=sfixed(cH10);f11<=sfixed(cH11); f12<=sfixed(cH12);f13<=sfixed(cH13);f14<=sfixed(cH14);f15<=sfixed(cH15); end if; end process; h0<=sfixed(r0); p0<=f0*h0; h1<=sfixed(r1); p1<=f1*h1; h2<=sfixed(r2); p2<=f2*h2; h3<=sfixed(r3); p3<=f3*h3; h4<=sfixed(r4); p4<=f4*h4; h5<=sfixed(r5); p5<=f5*h5; h6<=sfixed(r6); p6<=f6*h6; h7<=sfixed(r7); p7<=f7*h7; h8<=sfixed(r8); p8<=f8*h8; h9<=sfixed(r9); p9<=f9*h9; h10<=sfixed(r10); p10<=f10*h10; h11<=sfixed(r11); p11<=f11*h11; h12<=sfixed(r12); p12<=f12*h12; h13<=sfixed(r13); p13<=f13*h13; h14<=sfixed(r14); p14<=f14*h14; h15<=sfixed(r15); p15<=f15*h15; process(lect) begin if falling_edge(lect) then st<=p0+p1+p2+p3+p4+p5+p6+p7+p8+p9+p10+p11+p12+p13+p14+p15; u<=to_slv(st); else u<=u; end if; end process; --FIN DEL FILTRO DE DESCOMPOSICION process(se2,u) begin case se2 is when "000" => datm2_l<=u(26 downto 11);datm2_h<=u(28 downto 27); when "001" => datm3_l<=u(26 downto 11);datm3_h<=u(28 downto 27); when "010" => datm4_l<=u(26 downto 11);datm4_h<=u(28 downto 27);

Page 65: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

65

when "011" => datm5_l<=u(26 downto 11);datm5_h<=u(28 downto 27); when "100" => datm6_l<=u(26 downto 11);datm6_h<=u(28 downto 27); when "101" => datm7_l<=u(26 downto 11);datm7_h<=u(28 downto 27); when "110" => datm8_l<=u(26 downto 11);datm8_h<=u(28 downto 27); when others=> null;--datm2_l<=u(25 downto 10);datm2_h<=u(27 downto 26); end case; end process; process(se3,lect1) begin case se3 is when "000" => r_m2<=not(lect1);r_m3<='0';r_m4<='0';r_m5<='0';r_m6<='0';r_m7<='0';r_m8<='0'; r_em2<=lect1;r_em3<='0';r_em4<='0';r_em5<='0';r_em6<='0';r_em7<='0';r_em8<='0'; when "001" => r_m2<='0';r_m3<=not(lect1);r_m4<='0';r_m5<='0';r_m6<='0';r_m7<='0';r_m8<='0'; r_em2<='0';r_em3<=lect1;r_em4<='0';r_em5<='0';r_em6<='0';r_em7<='0';r_em8<='0'; when "010" => r_m2<='0';r_m3<='0';r_m4<=not(lect1);r_m5<='0';r_m6<='0';r_m7<='0';r_m8<='0'; r_em2<='0';r_em3<='0';r_em4<=lect1;r_em5<='0';r_em6<='0';r_em7<='0';r_em8<='0'; when "011" => r_m2<='0';r_m3<='0';r_m4<='0';r_m5<=not(lect1);r_m6<='0';r_m7<='0';r_m8<='0'; r_em2<='0';r_em3<='0';r_em4<='0';r_em5<=lect1;r_em6<='0';r_em7<='0';r_em8<='0'; when "100" => r_m2<='0';r_m3<='0';r_m4<='0';r_m5<='0';r_m6<=not(lect1);r_m7<='0';r_m8<='0'; r_em2<='0';r_em3<='0';r_em4<='0';r_em5<='0';r_em6<=lect1;r_em7<='0';r_em8<='0'; when "101" => r_m2<='0';r_m3<='0';r_m4<='0';r_m5<='0';r_m6<='0';r_m7<=not(lect1);r_m8<='0'; r_em2<='0';r_em3<='0';r_em4<='0';r_em5<='0';r_em6<='0';r_em7<=lect1;r_em8<='0'; when "110" => r_m2<='0';r_m3<='0';r_m4<='0';r_m5<='0';r_m6<='0';r_m7<='0';r_m8<=not(lect1); r_em2<='0';r_em3<='0';r_em4<='0';r_em5<='0';r_em6<='0';r_em7<='0';r_em8<=lect1; when others=> r_m2<='0';r_m3<='0';r_m4<='0';r_m5<='0';r_m6<='0';r_m7<='0';r_m8<='0'; r_em2<='0';r_em3<='0';r_em4<='0';r_em5<='0';r_em6<='0';r_em7<='0';r_em8<='0'; end case; end process; final<=sfixed(salm15_h&salm15_l);--u(27 downto 10));-- process(final) begin if p_c='0' then finaly<=(final*64)+108; else finaly<=(final*64)+108; end if; end process; saly<=to_slv(finaly); process(sig) begin if sig='0' then dac<=saly(18 downto 11);--maestro;datmy1_l(7 downto 0); else dac<=adc; end if; end process; led<=adc;--esm12(9 downto 2);--datm1_l(15 downto 8);--ya&divisor&N6; process(clk2,est_pre) begin if rising_edge(clk2) then est_pre<=est_sig; end if; case est_pre is when sini => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='0';reset<='1';

filtro_rec<='0';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when sini_1 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='0';reset<='1'; filtro_rec<='0';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s0 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='0';reset<='1';

Page 66: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

66

filtro_rec<='0';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s1 => CE1<='1';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='0';reset<='1'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='1';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s2 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s3 => CE1<='0';CE2<='1';filtro<='0';se1<="000";se2<="000";se3<="000";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='1';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s4 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s5 => CE1<='0';CE2<='1';filtro<='0';se1<="001";se2<="001";se3<="001";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111";

ENM1<='0';ENM2<='1';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s6 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s7 => CE1<='0';CE2<='1';filtro<='0';se1<="010";se2<="010";se3<="010";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='1';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s8 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0';

filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s9 => CE1<='0';CE2<='1';filtro<='0';se1<="011";se2<="011";se3<="011";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='1';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s10 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s11 => CE1<='0';CE2<='1';filtro<='0';se1<="100";se2<="100";se3<="100";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111";

Page 67: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

67

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='1';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s12 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0';

reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s13 => CE1<='0';CE2<='1';filtro<='0';se1<="101";se2<="101";se3<="101";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='1';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0';

reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s14 => CE1<='0';CE2<='0';filtro<='1';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='0';

filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s15 => CE1<='0';CE2<='1';filtro<='1';se1<="110";se2<="110";se3<="110";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='1';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s16 => CE1<='0';CE2<='0';filtro<='0';se1<="111";se2<="111";se3<="111";r_lect<='1';reset<='1';

filtro_rec<='1';se4<="111";se5<="111";se6<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s17 => CE1<='0';CE2<='1';filtro_rec<='1';se4<="000";se5<="000";se6<="000";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='1'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='1';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s17_1 => CE1<='0';CE2<='0';filtro_rec<='1';se4<="000";se5<="000";se6<="000";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s17_2 => CE1<='0';CE2<='1';filtro_rec<='1';se4<="000";se5<="000";se6<="000";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='1'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='1';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s18 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s19 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="001";se5<="001";se6<="001";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='1';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='1';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s19_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="001";se5<="001";se6<="001";r_lect<='1';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111";

Page 68: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

68

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s19_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="001";se5<="001";se6<="001";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='1';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='1';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s20 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0';

reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s21 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="010";se5<="010";se6<="010";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='1';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='1';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s21_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="010";se5<="010";se6<="010";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0';

ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s21_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="010";se5<="010";se6<="010";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='1';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='1';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s22 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s23 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="011";se5<="011";se6<="011";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";ewm13<='0'; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='1';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='1';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s23_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="011";se5<="011";se6<="011";r_lect<='1';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111";ewm13<='0'; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s23_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="011";se5<="011";se6<="011";r_lect<='0';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111";ewm13<='0'; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='1';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='1';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s24 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s25 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="100";se5<="100";se6<="100";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

Page 69: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

69

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='1';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='1';ewm14<='0';ewm15<='0';

reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s25_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="100";se5<="100";se6<="100";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s25_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="100";se5<="100";se6<="100";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='1';ENM13<='0';ENM14<='0';ENM15<='0';

ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='1';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s26 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0';

ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='1';r_alma<='1'; when s27 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='1';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='1';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s27_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='1';r_alma<='1'; when s27_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='1';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='1';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s28 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s29 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="110";se5<="110";se6<="110";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='1';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='1'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s29_1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="110";se5<="110";se6<="110";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s29_2 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="110";se5<="110";se6<="110";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='1';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='1'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s30 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

Page 70: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

70

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='1'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='0'; when s31 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; --reconstruccion pulmon when s11_p1 => CE1<='0';CE2<='1';filtro<='0';se1<="100";se2<="100";se3<="100";r_lect<='0';reset<='0'; filtro_rec<='1';se4<="111";se5<="111";se6<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='1';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s20_p1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s21_p1 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="111";se5<="010";se6<="010";r_lect<='0';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='1';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='1';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s21_1p1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="010";se6<="010";r_lect<='1';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s21_2p1 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="111";se5<="010";se6<="010";r_lect<='0';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='1';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='1';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0';

reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s26_p1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="111";se5<="111";se6<="111";r_lect<='1';reset<='1';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when s27_p1 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='0';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='1';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='1';ewm15<='0'; reset_r<='0';par_imp<='1';r_rec<='0';r_alma<='1'; when s27_1p1 => CE1<='0';CE2<='0';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='1';reset<='0'; filtro<='0';se1<="111";se2<="111";se3<="111";

ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='0';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='0';ewm15<='0'; reset_r<='1';par_imp<='0';r_rec<='0';r_alma<='1'; when s27_2p1 => CE1<='0';CE2<='1';filtro_rec<='0';se4<="101";se5<="101";se6<="101";r_lect<='0';reset<='0';

filtro<='0';se1<="111";se2<="111";se3<="111"; ENM1<='0';ENM2<='0';ENM3<='0';ENM4<='0';ENM5<='0';ENM6<='0';ENM7<='0';ENM8<='0'; ENM9<='0';ENM10<='0';ENM11<='0';ENM12<='0';ENM13<='1';ENM14<='0';ENM15<='0'; ewm9<='0';ewm10<='0';ewm11<='0';ewm12<='0';ewm13<='0';ewm14<='1';ewm15<='0'; reset_r<='0';par_imp<='0';r_rec<='0';r_alma<='1'; when others => null; end case;

Page 71: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

71

end process; process(int,maestro,dirlect,est_pre) begin case est_pre is when sini => est_sig<=sini_1; when sini_1 => if diralma = 1024 then est_sig<=s2; else est_sig<=sini_1; end if; when s0 => est_sig<=s1; when s1 => if maestro(10) = '1' then est_sig<=sini;--2; else est_sig<=s1; end if; when s2 => est_sig<=s3; when s3 => if dirlect(10) = '1' then est_sig<=s4; else est_sig<=s3; end if; when s4 => est_sig<=s5; when s5 => if dirlect=543 then est_sig<=s6; else est_sig<=s5; end if; when s6 => est_sig<=s7; when s7 => if dirlect=295 then est_sig<=s8; else est_sig<=s7; end if; when s8 => est_sig<=s9; when s9 => if dirlect=170 then est_sig<=s10; else est_sig<=s9; end if; -- when s10 => est_sig<=s11; when s10 => if p_c='0' then est_sig<=s11; else est_sig<=s11_p1; end if; when s11 => if dirlect=110 then est_sig<=s12; else est_sig<=s11; end if; when s12 => est_sig<=s13; when s13 => if dirlect=80 then est_sig<=s14; else est_sig<=s13; end if; when s14 => est_sig<=s15; when s15 => if dirlect=64 then est_sig<=s16; else est_sig<=s15; end if; when s16 => est_sig<=s17; when s17 => if dirlect=32 then --par est_sig<=s17_1;

Page 72: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

72

else est_sig<=s17; end if; when s17_1 => est_sig<=s17_2; when s17_2 => if dirlect=32 then --impar est_sig<=s18; else est_sig<=s17_2; end if; when s18 => est_sig<=s19; when s19 => if dirlect=64 then --par est_sig<=s19_1; else est_sig<=s19; end if; when s19_1 => est_sig<=s19_2; when s19_2 => if dirlect=64 then --impar est_sig<=s20; else est_sig<=s19_2; end if; when s20 => est_sig<=s21; when s21 => if dirlect=128 then --par est_sig<=s21_1; else est_sig<=s21; end if; when s21_1 => est_sig<=s21_2; when s21_2 => if dirlect=128 then --impar est_sig<=s22; else est_sig<=s21_2; end if; when s22 => est_sig<=s23; when s23 => if dirlect=256 then --par est_sig<=s23_1; else est_sig<=s23; end if; when s23_1 => est_sig<=s23_2; when s23_2 => if dirlect=256 then --impar est_sig<=s24; else est_sig<=s23_2; end if; when s24 => est_sig<=s25; when s25 => if dirlect=512 then --par est_sig<=s25_1; else est_sig<=s25; end if; when s25_1 => est_sig<=s25_2; when s25_2 => if dirlect=512 then --impar est_sig<=s26; else est_sig<=s25_2; end if; -- when s26 => est_sig<=s27; when s26 => if p_c='0' then est_sig<=s27; else est_sig<=s26_p1; end if; when s27 => if dirlect=1024 then --par est_sig<=s27_1; else

Page 73: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

73

est_sig<=s27; end if; when s27_1 => est_sig<=s27_2; when s27_2 => if dirlect=1024 then --impar est_sig<=s28; else est_sig<=s27_2; end if; when s28 => est_sig<=s29; when s29 => if dirlect = 1024 then --par est_sig<=s29_1; else est_sig<=s29; end if; when s29_1 => est_sig<=s29_2; when s29_2 => if dirlect = 1024 then --impar est_sig<=sini;--30; else est_sig<=s29_2; end if; when s30 => if diralma = 1024 then est_sig<=s31; else est_sig<=s30; end if; when s31 => est_sig<=s0; -- when s11_p1 => if dirlect=110 then est_sig<=s20_p1; else est_sig<=s11_p1; end if; when s20_p1 => est_sig<=s21_p1; when s21_p1 => if dirlect=128 then --par est_sig<=s21_1p1; else est_sig<=s21_p1; end if; when s21_1p1 => est_sig<=s21_2p1; when s21_2p1 => if dirlect=128 then --impar est_sig<=s22; else est_sig<=s21_2p1; end if; when s26_p1 => est_sig<=s27_p1; when s27_p1 => if dirlect=512 then --par est_sig<=s27_1p1; else est_sig<=s27_p1; end if; when s27_1p1 => est_sig<=s27_2p1; when s27_2p1 => if dirlect=512 then --impar est_sig<=s28; else est_sig<=s27_2p1; end if; when others => null; end case; end process; ------------------------RECONSTRUCCION process(se4) begin case se4 is when "000"=>d0r<=salm8_l(0);d1r<=salm8_l(1);d2r<=salm8_l(2);d3r<=salm8_l(3);d4r<=salm8_l(4);d5r<=salm8_l(5); d6r<=salm8_l(6);d7r<=salm8_l(7);d8r<=salm8_l(8);d9r<=salm8_l(9);d10r<=salm8_l(10);d11r<=salm8_l(11); d12r<=salm8_l(12);d13r<=salm8_l(13);d14r<=salm8_l(14);d15r<=salm8_l(15);d16r<=salm8_h(0);d17r<=salm8_h(1);

Page 74: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

74

when "001"=>d0r<=salm9_l(0);d1r<=salm9_l(1);d2r<=salm9_l(2);d3r<=salm9_l(3);d4r<=salm9_l(4);d5r<=salm9_l(5); d6r<=salm9_l(6);d7r<=salm9_l(7);d8r<=salm9_l(8);d9r<=salm9_l(9);d10r<=salm9_l(10);d11r<=salm9_l(11); d12r<=salm9_l(12);d13r<=salm9_l(13);d14r<=salm9_l(14);d15r<=salm9_l(15);d16r<=salm9_h(0);d17r<=salm9_h(1); when “010"=>d0r<=salm10_l(0);d1r<=salm10_l(1);d10r<=salm10_l(2);d3r<=salm10_l(3);d4r<=salm10_l(4); d5r<=salm10_l(5);d6r<=salm10_l(6);d7r<=salm10_l(7);d8r<=salm10_l(8);d9r<=salm10_l(9);d10r<=salm10_l(10); d11r<=salm10_l(11);d12r<=salm10_l(12);d13r<=salm10_l(13);d14r<=salm10_l(14);d15r<=salm10_l(15);d16r<=salm10_h(0);d17r<=salm10_h(1); when "011"=>d0r<=salm11_l(0);d1r<=salm11_l(1);d2r<=salm11_l(2);d3r<=salm11_l(3);d4r<=salm11_l(4);d5r<=salm11_l(5); d6r<=salm11_l(6);d7r<=salm11_l(7);d8r<=salm11_l(8);d9r<=salm11_l(9);d10r<=salm11_l(10);d11r<=salm11_l(11); d12r<=salm11_l(12);d13r<=salm11_l(13);d14r<=salm11_l(14);d15r<=salm11_l(15);d16r<=salm11_h(0);d17r<=salm11_h(1); when "100"=>d0r<=salm12_l(0);d1r<=salm12_l(1);d2r<=salm12_l(2);d3r<=salm12_l(3);d4r<=salm12_l(4);d5r<=salm12_l(5); d6r<=salm12_l(6);d7r<=salm12_l(7);d8r<=salm12_l(8);d9r<=salm12_l(9);d10r<=salm12_l(10);d11r<=salm12_l(11); d12r<=salm12_l(12);d13r<=salm12_l(13);d14r<=salm12_l(14);d15r<=salm12_l(15);d16r<=salm12_h(0);d17r<=salm12_h(1); when "101"=>d0r<=salm13_l(0);d1r<=salm13_l(1);d2r<=salm13_l(2);d3r<=salm13_l(3);d4r<=salm13_l(4);d5r<=salm13_l(5); d6r<=salm13_l(6);d7r<=salm13_l(7);d8r<=salm13_l(8);d9r<=salm13_l(9);d10r<=salm13_l(10);d11r<=salm13_l(11); d12r<=salm13_l(12);d13r<=salm13_l(13);d14r<=salm13_l(14);d15r<=salm13_l(15);d16r<=salm13_h(0);d17r<=salm13_h(1); when "110"=>d0r<=salm14_l(0);d1r<=salm14_l(1);d2r<=salm14_l(2);d3r<=salm14_l(3);d4r<=salm14_l(4);d5r<=salm14_l(5); d6r<=salm14_l(6);d7r<=salm14_l(7);d8r<=salm14_l(8);d9r<=salm14_l(9);d10r<=salm14_l(10);d11r<=salm14_l(11); d12r<=salm14_l(12);d13r<=salm14_l(13);d14r<=salm14_l(14);d15r<=salm14_l(15);d16r<=salm14_h(0);d17r<=salm14_h(1); when others=>d0r<=salm6_l(0);d1r<=salm6_l(1);d2r<=salm6_l(2);d3r<=salm6_l(3);d4r<=salm6_l(4);d5r<=salm6_l(5); d6r<=salm6_l(6);d7r<=salm6_l(7);d8r<=salm6_l(8);d9r<=salm6_l(9);d10r<=salm6_l(10);d11r<=salm6_l(11); d12r<=salm6_l(12);d13r<=salm6_l(13);d14r<=salm6_l(14);d15r<=salm6_l(15);d16r<=salm6_h(0);d17r<=salm6_h(1); end case; end process; --FILTRO DE RECONSTRUCCION clk_rec<=(lect); process (clk_rec) begin if rising_edge(clk_rec) then b0r <= b0r(16 downto 0) & d0r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b1r <= b1r(16 downto 0) & d1r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b2r <= b2r(16 downto 0) & d2r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b3r <= b3r(16 downto 0) & d3r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b4r <= b4r(16 downto 0) & d4r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b5r <= b5r(16 downto 0) & d5r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then

Page 75: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

75

b6r <= b6r(16 downto 0) & d6r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b7r <= b7r(16 downto 0) & d7r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b8r <= b8r(16 downto 0) & d8r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b9r <= b9r(16 downto 0) & d9r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b10r <= b10r(16 downto 0) & d10r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b11r <= b11r(16 downto 0) & d11r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b12r <= b12r(16 downto 0) & d12r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b13r <= b13r(16 downto 0) & d13r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b14r <= b14r(16 downto 0) & d14r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b15r <= b15r(16 downto 0) & d15r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b16r <= b16r(16 downto 0) & d16r; end if; end process; process (clk_rec) begin if rising_edge(clk_rec) then b17r <= b17r(16 downto 0) & d17r;

Page 76: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

76

end if; end process; r0r<=b17r(0)&b16r(0)&b15r(0)&b14r(0)&b13r(0)&b12r(0)&b11r(0)&b10r(0)&b9r(0)&b8r(0)&b7r(0)&b6r(0)&b5r(0)&b4r(0)&b3r(0)&b2r(0)&b1r(0)&b0r(0); r1r<=b17r(1)&b16r(1)&b15r(1)&b14r(1)&b13r(1)&b12r(1)&b11r(1)&b10r(1)&b9r(1)&b8r(1)&b7r(1)&b6r(1)&b5r(1)&b4r(1)&b3r(1)&b2r(1)&b1r(1)&b0r(1); r2r<=b17r(2)&b16r(2)&b15r(2)&b14r(2)&b13r(2)&b12r(2)&b11r(2)&b10r(2)&b9r(2)&b8r(2)&b7r(2)&b6r(2)&b5r(2)&b4r(2)&b3r(2)&b2r(2)&b1r(2)&b0r(2); r3r<=b17r(3)&b16r(3)&b15r(3)&b14r(3)&b13r(3)&b12r(3)&b11r(3)&b10r(3)&b9r(3)&b8r(3)&b7r(3)&b6r(3)&b5r(3)&b4r(3)&b3r(3)&b2r(3)&b1r(3)&b0r(3); r4r<=b17r(4)&b16r(4)&b15r(4)&b14r(4)&b13r(4)&b12r(4)&b11r(4)&b10r(4)&b9r(4)&b8r(4)&b7r(4)&b6r(4)&b5r(4)&b4r(4)&b3r(4)&b2r(4)&b1r(4)&b0r(4); r5r<=b17r(5)&b16r(5)&b15r(5)&b14r(5)&b13r(5)&b12r(5)&b11r(5)&b10r(5)&b9r(5)&b8r(5)&b7r(5)&b6r(5)&b5r(5)&b4r(5)&b3r(5)&b2r(5)&b1r(5)&b0r(5); r6r<=b17r(6)&b16r(6)&b15r(6)&b14r(6)&b13r(6)&b12r(6)&b11r(6)&b10r(6)&b9r(6)&b8r(6)&b7r(6)&b6r(6)&b5r(6)&b4r(6)&b3r(6)&b2r(6)&b1r(6)&b0r(6); r7r<=b17r(7)&b16r(7)&b15r(7)&b14r(7)&b13r(7)&b12r(7)&b11r(7)&b10r(7)&b9r(7)&b8r(7)&b7r(7)&b6r(7)&b5r(7)&b4r(7)&b3r(7)&b2r(7)&b1r(7)&b0r(7); process(filtro_rec) begin if filtro_rec='0' then fpr0<=sfixed(cLrp0);fpr1<=sfixed(cLrp1);fpr2<=sfixed(cLrp2);fpr3<=sfixed(cLrp3); fpr4<=sfixed(cLrp4);fpr5<=sfixed(cLrp5);fpr6<=sfixed(cLrp6);fpr7<=sfixed(cLrp7); fir0<=sfixed(cLri0);fir1<=sfixed(cLri1);fir3<=sfixed(cLri2);fir3<=sfixed(cLri3); fir4<=sfixed(cLri4);fir5<=sfixed(cLri5);fir6<=sfixed(cLri6);fir7<=sfixed(cLri7); else fpr0<=sfixed(cHrp0);fpr1<=sfixed(cHrp1);fpr2<=sfixed(cHrp2);fpr3<=sfixed(cHrp3); fpr4<=sfixed(cHrp4);fpr5<=sfixed(cHrp5);fpr6<=sfixed(cHrp6);fpr7<=sfixed(cHrp7); fir0<=sfixed(cHri0);fir1<=sfixed(cHri1);fir3<=sfixed(cHri2);fir3<=sfixed(cHri3); fir4<=sfixed(cHri4);fir5<=sfixed(cHri5);fir6<=sfixed(cHri6);fir7<=sfixed(cHri7); end if; end process; hrp0<=sfixed(r0r); prp0<=fpr0*hrp0; hrp1<=sfixed(r1r); prp1<=fpr1*hrp1; hrp2<=sfixed(r2r); prp2<=fpr2*hrp2; hrp3<=sfixed(r3r); prp3<=fpr3*hrp3; hrp4<=sfixed(r4r); prp4<=fpr4*hrp4; hrp5<=sfixed(r5r); prp5<=fpr5*hrp5; hrp6<=sfixed(r6r); prp6<=fpr6*hrp6; hrp7<=sfixed(r7r); prp7<=fpr7*hrp7; hrp8<=sfixed(r0r); prp8<=fir0*hrp8; hrp9<=sfixed(r1r); prp9<=fir1*hrp9; hrp10<=sfixed(r2r); prp10<=fir2*hrp10; hrp11<=sfixed(r3r); prp11<=fir3*hrp11; hrp12<=sfixed(r4r); prp12<=fir4*hrp12; hrp13<=sfixed(r5r); prp13<=fir5*hrp13; hrp14<=sfixed(r6r); prp14<=fir6*hrp14; hrp15<=sfixed(r7r); prp15<=fir7*hrp15;

Page 77: DESARROLLO DE UN ESTETOSCOPIO DIGITAL CON SEPARACIÓN …

77

process(lect) begin if falling_edge(lect) then stp<=prp0+prp1+prp2+prp3+prp4+prp5+prp6+prp7; sti<=prp8+prp9+prp10+prp11+prp12+prp13+prp14+prp15; up<=to_slv(stp); ui<=to_slv(sti); else up<=up; ui<=ui; end if; end process; process(par_imp) begin if par_imp='0' then gr<=up; else gr<=ui; end if; end process; --FIN DEL FILTRO DE RECONSTRUCCION process(se5,gr) begin case se5 is when "000" => datm9_l<=gr(26 downto 11);datm9_h<=gr(28 downto 27); when "001" => datm10_l<=gr(26 downto 11);datm10_h<=gr(28 downto 27); when "010" => datm11_l<=gr(26 downto 11);datm11_h<=gr(28 downto 27); when "011" => datm12_l<=gr(26 downto 11);datm12_h<=gr(28 downto 27); when "100" => datm13_l<=gr(26 downto 11);datm13_h<=gr(28 downto 27); when "101" => datm14_l<=gr(26 downto 11);datm14_h<=gr(28 downto 27); when "110" => datm15_l<=gr(26 downto 11);datm15_h<=gr(28 downto 27); when others=> datm9_l<=datm9_l;datm9_h<=datm9_h; datm10_l<=datm10_l;datm10_h<=datm10_h;

datm11_l<=datm11_l;datm11_h<=datm11_h; datm12_l<=datm12_l;datm12_h<=datm12_h; datm13_l<=datm13_l;datm13_h<=datm13_h; datm14_l<=datm14_l;datm14_h<=datm14_h; datm15_l<=datm15_l;datm15_h<=datm15_h; end case; end process; process(se6,lect) begin case se6 is when "000" => r_m9<=lect;r_m10<='0';r_m11<='0';r_m12<='0';r_m13<='0';r_m14<='0';r_m15<='0'; r_em9<=(lect);r_em10<='0';r_em11<='0';r_em12<='0';r_em13<='0';r_em14<='0';r_em15<='0'; when "001" => r_m9<='0';r_m10<=lect;r_m11<='0';r_m12<='0';r_m13<='0';r_m14<='0';r_m15<='0'; r_em9<='0';r_em10<=(lect);r_em11<='0';r_em12<='0';r_em13<='0';r_em14<='0';r_em15<='0'; when "010" => r_m9<='0';r_m10<='0';r_m11<=lect;r_m12<='0';r_m13<='0';r_m14<='0';r_m15<='0'; r_em9<='0';r_em10<='0';r_em11<=(lect);r_em12<='0';r_em13<='0';r_em14<='0';r_em15<='0'; when "011" => r_m9<='0';r_m10<='0';r_m11<='0';r_m12<=lect;r_m13<='0';r_m14<='0';r_m15<='0'; r_em9<='0';r_em10<='0';r_em11<='0';r_em12<=(lect);r_em13<='0';r_em14<='0';r_em15<='0'; when "100" => r_m9<='0';r_m10<='0';r_m11<='0';r_m12<='0';r_m13<=lect;r_m14<='0';r_m15<='0'; r_em9<='0';r_em10<='0';r_em11<='0';r_em12<='0';r_em13<=(lect);r_em14<='0';r_em15<='0'; when "101" => r_m9<='0';r_m10<='0';r_m11<='0';r_m12<='0';r_m13<='0';r_m14<=lect;r_m15<='0';

r_em9<='0';r_em10<='0';r_em11<='0';r_em12<='0';r_em13<='0';r_em14<=(lect);r_em15<='0'; when "110" => r_m9<='0';r_m10<='0';r_m11<='0';r_m12<='0';r_m13<='0';r_m14<='0';r_m15<=lect; r_em9<='0';r_em10<='0';r_em11<='0';r_em12<='0';r_em13<='0';r_em14<='0';r_em15<=(lect); when others=> r_m9<='0';r_m10<='0';r_m11<='0';r_m12<='0';r_m13<='0';r_m14<='0';r_m15<='0'; r_em9<='0';r_em10<='0';r_em11<='0';r_em12<='0';r_em13<='0';r_em14<='0';r_em15<='0'; end case; end process; end Behavioral;