1
Universidad de Jaén
Trabajo Fin de Grado
de Jaén
Trabajo Fin de Grado
Alumno: María José Merino GarcíaUniversidad de Jaén
Trabajo Fin de Grado
de Jaén
Trabajo Fin de Grado
Alumno: María José Merino García
Tutor: D. Francisco Jesús Cañadas Quesada
D. Juan de la Torre Cruz
Depto.: Ingeniería de Telecomunicación
Junio, 2020
Alumno: María José Merino García
MONITORIZACIÓN DE LA PRESENCIA DE SIBILANCIAS A
PARTIR DEL ANÁLISIS DE
SEÑALES SONORAS
MONITORIZACIÓN DE LA PRESENCIA DE SIBILANCIAS A
PARTIR DEL ANÁLISIS DE
SEÑALES SONORAS
MONITORIZACIÓN DE LA PRESENCIA DE SIBILANCIAS A
PARTIR DEL ANÁLISIS DE
SEÑALES SONORAS
MONITORIZACIÓN DE LA PRESENCIA DE SIBILANCIAS A
Escuela
Polit
écn
ica
Superior
de L
ina
res
2
3
ÍNDICE
1 Resumen .......................................................................................................10
2 Introducción .................................................................................................11
2.1 Caracterización del sonido .....................................................................11
2.1.1 Frecuencia fundamental, duración, intensidad y timbre. ..................12
2.1.2 Sonido monocanal, estéreo y multicanal ..........................................13
2.1.3 Sonido armónico e inarmónico .........................................................14
2.2 Representación tiempo frecuencia: espectrograma ...............................15
2.3 Sonidos pulmonares ..............................................................................17
2.3.1 Sonidos respiratorios normales ........................................................17
2.3.2 Sonidos adventicios .........................................................................19
2.3.2.1 Sibilancias .................................................................................21
3 Objetivos .......................................................................................................24
4 Estado del arte .............................................................................................25
4.1 Detección de sibilancias ........................................................................25
4.2 Dispositivos móviles y salud ..................................................................33
4.3 Sistemas operativos en dispositivos móviles .........................................36
5 Implementación ............................................................................................37
5.1 Implementación en MATLAB .................................................................37
5.1.1 Desarrollo del algoritmo detector de sibilancias ...............................37
5.1.1.1 Cálculo del espectrograma ........................................................39
5.1.1.2 Detección de picos.....................................................................41
5.1.1.3 Creación de trayectorias ............................................................45
5.1.1.4 Detección de sibilancias.............................................................52
5.1.1.5 Obtención de audios asociados a las sibilancias y final de
grabación 55
5.1.2 Evaluación .......................................................................................59
5.1.2.1 Base de datos ............................................................................59
5.1.2.2 Métricas .....................................................................................59
5.1.2.3 Evaluación a nivel de frame .......................................................61
5.1.2.4 Evaluación a nivel de sibilancia..................................................65
5.1.3 MATLAB Coder ................................................................................67
5.2 Implementación del sistema en Android.................................................69
4
5.2.1 Diseño general de la aplicación .......................................................69
5.2.2 Captura de audio y procesado .........................................................71
5.2.3 Integración en Android del sistema implementado en MATLAB .......73
5.2.4 Actividades, fragmentos, servicios y clases de la aplicación ............76
5.2.5 Interfaz de usuario ...........................................................................77
6 Testeo del sistema implementado en android ...........................................83
7 Conclusiones y líneas futuras .....................................................................90
8 Bibliografía ...................................................................................................92
9 Anexos ..........................................................................................................96
9.1 Manual de instalación ............................................................................96
9.2 Manual de usuario .................................................................................97
5
ÍNDICE DE FIGURAS
Figura 2.1. Curvas de Fletcher y Munson [1] ........................................................13
Figura 2.2 Espectrograma de un sonido armónico [14] .........................................14
Figura 2.3 Espectrograma de un sonido inarmónico [14] ......................................15
Figura 2.5. Ventanas comúnmente utilizadas [3]. .................................................16
Figura 2.6. Comportamiento de las ventanas en frecuecnia con M=50. a)
Rectangular. b) Barlett. c) Hanning. d) Hamming [3] ........................................................17
Figura 2.7. Espectrograma de una respiración vesicular normal [10]. ...................18
Figura 2.8. Espectrograma de respiración con sibilancias [10]. ............................20
Figura 2.9. Espectrograma de una respiración con crepitantes finos (fine crackle)
[10]. .................................................................................................................................21
Figura 2.10. Representación temporal de una sibilancia monofónica [13]. ...........22
Figura 2.11. Representación temporal de una sibilancia polifónica [13]. ...............22
Figura 2.12. Espectrograma del sonido (izquierda) y espectrograma de potencia
(derecha) de un sonido polifónico [12]. ............................................................................23
Figura 4.1. Esquema del método propuesto en [15] .............................................26
Figura 4.2. a) Magnitud del espectrograma 𝑋 de una señal mezcla x(t). b) Detección
ideal de sibilancia 𝛿𝑤. c) Espectro estimado de sibilancia 𝑋𝑊, d) 𝑑𝐾𝐿(𝑋|𝑋𝑤). e)
Espectrograma estimado de la respiración 𝑋𝑅. f) 𝑑𝐾𝐿(𝑋|𝑋𝑤) [15] ...................................27
Figura 4.3. Diagrama de bloques des algoritmo de clasificación [16]. ...................28
Figura 4.4. Diagrama de flujo del método propuesto [10] .....................................29
Figura 4.5. Esquema del sistema propuesto en [17] .............................................30
Figura 4.6. Espectrograma de: a) respiración normal, b) crepitaciones, c) sibilancias
[17] ..................................................................................................................................30
Figura 4.7. a) Espectograma de una respiración normal. b) Espectrograma de una
respiración sibilancias polifónicas [18] .............................................................................31
Figura 4.8. Diagrama de bloques del método propuesto en [18] ...........................32
Figura 4.9. Diagrama de bloques del método propuesto en [19] ...........................33
Figura 4.10. Sistema propuesto en [20]. a) Aplicación móvil desarrollada. b)
Adquisición de datos en un paciente ................................................................................34
Figura 4.11. Esquema propuesto para auscultación remota en [21] .....................35
Figura 4.12. AsthmaMD. Aplicación y medidor de flujo [22]. .................................35
Figura 4.13. Dispositivo para la monitorización de sibilancias: Wheezo [23]. ........36
Figura 4.14. Cuota de mercado en teléfonos móviles por Sistema Operativo en 2020
[24] ..................................................................................................................................36
Figura 5.1. Esquema de la metodología propuesta...............................................38
6
Figura 5.2. Espectrograma señal respiración con sibilancias, “M01_p5dB.wav”. ..40
Figura 5.3. Espectrograma señal respiración con sibilancias, “M09_0dB.wav” .....41
Figura 5.4. Ejemplo de matriz "picos" (frames 11 a 20) para “M01_p5dB.wav” .....43
Figura 5.5. Ejemplo de matriz "picos_ind" (frames 11 a 20) para “M01_p5dB.wav”
........................................................................................................................................43
Figura 5.6. Ejemplo de matriz "picos_frec" (frames 11 a 20) para “M01_p5dB.wav”
........................................................................................................................................43
Figura 5.7. Espectrograma con los picos detectados en “M01_p5dB.wav” ...........44
Figura 5.8. Espectrograma con los picos detectados en “M09_0dB.wav” .............45
Figura 5.9. Ejemplo de matriz "trayectorias" (frames 11 a 20) para M01_p5dB.wav
........................................................................................................................................48
Figura 5.10. Espectrograma con trayectorias detectadas en “M01_p5dB.wav” .....48
Figura 5.11. Espectrograma con segunda sibilancia sin interpolar de
“M09_0dB.wav” ................................................................................................................49
Figura 5.12. Matriz "trayectorias", frames 482 a 487 ............................................50
Figura 5.13. Matriz "trayectorias_frec", frames 482 a 487 .....................................50
Figura 5.14. Resultado primera interpolación, matriz “trayectorias” frames 482 a 487
........................................................................................................................................50
Figura 5.15.Resultado primera interpolación, matriz “trayectorias_frec” frames 482
a 487 ...............................................................................................................................50
Figura 5.16. Resultado segunda interpolación, matriz "trayectorias" frames 482 a
487 ..................................................................................................................................51
Figura 5.17. Resultado segunda interpolación, matriz "trayectorias_frec” frames 482
a 487 ...............................................................................................................................51
Figura 5.18. Espectrograma con segunda sibilancia interpolada de “M09_0dB.wav”
........................................................................................................................................51
Figura 5.19. Espectrograma con trayectorias detectadas en M09_0dB.wav .........52
Figura 5.20. Matriz “sibilancias_info” para M01_p5dB.wav ...................................53
Figura 5.21. Espectrograma con sibilancias detectadas en M01_p5dB.wav .........54
Figura 5.22. Espectrograma con sibilancias detectadas en “M09_0dB.wav” ........55
Figura 5.23. Matriz "sibilancias_info" que será empleada en Android para
M01_p5dB.wav ................................................................................................................55
Figura 5.24. Señal de audio "M01_p5dB.wav" ......................................................57
Figura 5.25. Últimos 2 segundos de audio señal "y_Final" para "M01_p5dB.wav” 57
Figura 5.26. Señal de audio "y_Final" para "M01_p5dB.wav" ...............................58
Figura 5.27. Ejemplo de matriz "y_Sibilancias" para "M01_p5dB.wav" ................58
Figura 5.28. Ejemplo de vector "sibilancia_referencia" frames 17 al 27 ................61
7
Figura 5.29. Ejemplo de vector "sibilancas_detectada" frames 17 al 27 ...............62
Figura 5.30. Ejemplo de un segmento de la tabla generada con los resultados de la
evaluación. ......................................................................................................................63
Figura 5.31. Resultados a nivel de sibilancia para SNR=0dB audio "M09_p0dB.wav"
........................................................................................................................................66
Figura 5.32. Resultados a nivel de sibilancia para SNR=5dB audio "M09_0dB.wav"
........................................................................................................................................67
Figura 5.33. Inferfaz MATLAB Coder ....................................................................68
Figura 5.34. MATLAB Coder. "Check for Run-Times Issues" ...............................68
Figura 5.35. Diagrama de flujo principal de la aplicación. .....................................70
Figura 5.36. Extracto del archivo AndroidManifest.xml con los permisos de acceso
........................................................................................................................................71
Figura 5.37. Estructura de un fichero .wav [33]. ....................................................72
Figura 5.38. Ejemplo de la información almacenada en fichero .txt ......................73
Figura 5.39. Extracto del directorio "cpp”. .............................................................74
Figura 5.40. Definición del nombre de la librería y ficheros que la componen. ......74
Figura 5.41. JNI en “Algoritmo.c” ..........................................................................75
Figura 5.42. Cargar librería en RecordAndSave.java ............................................75
Figura 5.43. Método “getWheezes()” en RecordAndSave.java .............................75
Figura 5.44. Actividades, fragmentos, servicios y clases de la aplicación .............76
Figura 5.45. Splash screen ..................................................................................78
Figura 5.46. Pantalla de monitorización 1 .............................................................79
Figura 5.47. Pantalla de Monitorización 2 .............................................................79
Figura 5.48. Pantalla de monitorización 3 .............................................................80
Figura 5.49. Pantalla Ruta de Grabación ..............................................................80
Figura 5.50. Pantalla Instrucciones de uso ...........................................................81
Figura 5.51. Menú de navegación ........................................................................82
Figura 6.1. Segmento de la carpeta ......................................................................83
Figura 6.2. Extracto de las cinco primeras sibilancias detectadas en la prueba ....85
Figura 6.3.Resultados obtenidos para sibilancia nº 6 ...........................................88
Figura 6.4. Resultados obtenidos para sibilancia nº 7 ..........................................89
Figura 6.5. Resultados obtenidos para sibilancia nº 8 ..........................................89
Figura 6.6. Resultados obtenidos para sibilancia nº 9 ..........................................89
Figura 9.1 Depuración USB ..................................................................................96
Figura 9.2 Botón "Run app" ..................................................................................96
Figura 9.3. Splash Screen. Pantalla visualizada al abrir la aplicación en su
dispositivo móvil. ..............................................................................................................97
8
Figura 9.4. Permiso lectura y escritura .................................................................97
Figura 9.5. Permiso de acceso al micrófono .........................................................97
Figura 9.6.Cambios en la pantalla de monitorización. ...........................................98
Figura 9.7. Menú de navegación ..........................................................................99
Figura 9.8. Pantalla "Ruta de grabación" ............................................................ 100
Figura 9.9. Pantalla "Instrucciones de uso" ........................................................ 100
9
ÍNDICE DE TABLAS
Tabla 5.1. Configuraciones con métricas más altas para 0 dB. ............................63
Tabla 5.2. Configuraciones con métricas más altas para 5 dB .............................64
Tabla 5.3. Configuración óptima ...........................................................................65
Tabla 5.4. Métricas finales obtenidas para la configuración óptima ......................65
Tabla 6.1. Caracterización sibilancias en evento sonoro 1 ...................................84
Tabla 6.2. Caracterización de sibilancias en evento sonoro 2 ..............................84
Tabla 6.3. Caracterización de sibilancias en evento sonoro 3 ..............................85
Tabla 6.4. Resultados de la evaluación Android ...................................................87
10
1 RESUMEN
En este Trabajo de fin de grado se propone la creación de una aplicación Android
de monitorización capaz de detectar sibilancias presentes en las señales de audio
respiratorias capturadas de forma continua con el micrófono del dispositivo móvil. El
método de detección de sibilancias, desarrollado en MATLAB, se basa en el análisis
espectral de la señal a partir del cálculo de la Transformada en Tiempo Corto de Fourier
(STFT) para la identificación de trayectorias espectrales que serán determinadas como
sibilancias si cumplen con las características en tiempo y frecuencia de los sonidos
sibilantes. Finalmente, este algoritmo será convertido a C e integrado en la aplicación móvil
programada en Java de tal forma que permitirá al usuario llevar a cabo la monitorización
de sibilancias.
11
2 INTRODUCCIÓN
La auscultación sigue siendo el principal proceso llevado a cabo en los centros
sanitarios para estudiar el estado de salud de las vías respiratorias y de los pulmones. Sin
embargo, la aparición de sibilancias severas que reflejan un desorden pulmonar suele
agudizarse durante la noche, momento en el que el paciente se encuentra en su hogar y
no es posible analizarlo por parte del médico. Como consecuencia, cuando una persona
con sibilancias severas acude a la consulta puede que no presente estas sibilancias
durante la auscultación, siendo redirigida a su hogar en lugar de a un examen más
exhaustivo.
En este Trabajo Fin de Grado se presenta una app basada en Android que permite
una monitorización continua durante la noche para detectar sibilancias severas no
enmascaradas por la respiración mediante el uso de un smartphone. De esta forma, se
podrá aportar al médico en consulta señales sonoras con las sibilancias detectadas durante
la noche, reduciendo así el número de personas con este tipo de patologías que no pueden
ser correctamente diagnosticadas.
Previamente a la captura de señales sonoras y detección de sibilancias en ellas, es
necesario conocer algunas de las características más relevantes del sonido, así como los
aspectos que permiten identificar y diferenciar las sibilancias respecto a otros sonidos
respiratorios.
2.1 Caracterización del sonido
El sonido es una vibración mecánica que se transmite a través de un medio elástico
(como el aire o el agua), produciendo pequeñas variaciones de presión en torno a la presión
estática del medio, que generan una sensación auditiva al ser percibidos por el oído. Las
ondas acústicas se propagan en la misma dirección que la presión, por lo que son
denominadas longitudinales, a diferencia de las ondas electromagnéticas que son
transversales, al propagarse en dirección perpendicular al campo eléctrico y magnético.
El término de onda sonora hace referencia a las ondas acústicas con frecuencia
comprendida dentro del rango audible o próxima a este, siendo este el comprendido entre
15 Hz y 20 KHz [1].
La onda acústica está definida en cada punto del medio elástico por el que se
propaga por dos magnitudes físicas: la presión y la velocidad molecular (velocidad de
desplazamiento o vibración de las partículas del medio).
Además, se puede caracterizar por otros parámetros físicos tales como frecuencia
fundamental, duración, timbre e intensidad.
12
2.1.1 Frecuencia fundamental, duración, intensidad y timbre.
Frecuencia fundamental
Se denomina frecuencia (𝑓) al número de vibraciones por segundo de una onda
acústica, medida en Hz. Se trata por tanto, de la inversa del periodo (𝑇) definido como el
tiempo en el que una onda realiza una vibración u oscilación completa.
La frecuencia fundamental se corresponde con la más baja del espectro y se
conocerán como armónicos de esta aquellas frecuencias múltiplos enteros de la misma (1).
𝑓𝑛(𝐻𝑧) = 𝑛 ∙ 𝑓0 𝑛 > 0 ∈ 𝑁 (1)
Duración
La duración de un sonido es el tiempo en el que permanece la vibración de una
onda sonora y, por tanto, el tiempo en el que este está activo.
Intensidad
La intensidad sonora mide la potencia acústica por unidad de área, perpendicular a
la dirección de propagación. El parámetro más común para cuantificarla es el nivel de
presión sonora, SPL (Sound Pressure Level) [2], que relaciona la presión de un sonido
respecto a la presión de referencia dada por el umbral de audibilidad del ser humano.
𝑆𝑃𝐿 (𝑑𝐵) = 20 𝑙𝑜𝑔10 (𝑝𝑟𝑚𝑠 [𝑃𝑎]
𝑝𝑜[𝑃𝑎]) , siendo 𝑝𝑜 = 20 ∙ 10
−6 𝑃𝑎 (2)
Sin embargo, el oído no percibe igual todas las variaciones de presión que ocurran,
sino que dependerá de la duración del sonido y de su frecuencia, como consecuencia de
la sensibilidad del oído a distintas frecuencias. Así, aparece el parámetro subjetivo de
sonoridad, medido en fonios, y obtenido para cada sonido en función de cómo es percibido
un sonido por un oyente promedio. En la figura 2.1 se representan contornos con igual
sonoridad para tonos puros, denominadas curvas isofónicas, que muestran el nivel de
presión sonora en dB respecto a la frecuencia. Se observa que las curvas presentan unos
niveles más bajos en la región en torno a 3000 y 4000 Hz, justificado porque esta banda
de frecuencias es la banda de mayor sensibilidad del oído, lo que se traduce en un menor
nivel de presión sonora necesaria para obtener el mismo volumen (sonoridad), medido en
fonios.
13
Figura 2.1. Curvas de Fletcher y Munson [1]
Timbre
Es la cualidad del sonido que nos permite distinguir entre sonidos de igual,
intensidad y duración procedentes de diferentes fuentes sonoras, es decir, permiten
identificar las características de la fuente. Está relacionado con la envolvente espectral
(intensidad relativa de los parciales), con la envolvente dinámica y con los transitorios.
2.1.2 Sonido monocanal, estéreo y multicanal
Los sonidos también pueden clasificarse en monocanal, estéreo y multicanal.
Sonido monocanal
Se trata del resultado de la suma de todas las fuentes o canales en uno solo. Por
tanto, carece de información espacial, no siendo posible determinar el número de fuentes
empleadas para su grabación.
Sonido estéreo
Formado por dos canales grabados con diferentes micrófonos de forma
independiente. De esta forma, a diferencia del sonido monocanal presenta información
espacial. Generalmente estos canales se corresponden con izquierdo y derecho.
14
Sonido multicanal
Compuesto por cuatro o más canales grabados de forma independiente, tratando
de conseguir un sonido envolvente. Al igual que el sonido estéreo es posible extraer
información espacial de él.
2.1.3 Sonido armónico e inarmónico
Atendiendo a la periodicidad, un sonido se puede clasificar en armónico o
inarmónico.
Sonido armónico
Se trata de señales con una forma de onda constante y periódica o cuasi-periódica.
Las componentes espectrales se encuentran equiespaciadas con una separación
aproximada a la frecuencia fundamental (𝑓0).
Figura 2.2 Espectrograma de un sonido armónico [14]
Sonido inarmónico
Por el contrario, no presentan una forma de onda periódica. El espectro también
tiene un carácter discreto con picos en las frecuencias correspondientes a cada parcial,
pero estas carecen de relación entre sí.
15
Figura 2.3 Espectrograma de un sonido inarmónico [14]
2.2 Representación tiempo frecuencia: espectrograma
La Transformada de Fourier es una herramienta muy útil para conocer la energía
de cada componente en frecuencia de una señal. Sin embargo, tiene un gran inconveniente
y es que carece de información temporal, por lo que no es válida para señales no
estacionarias, que suponen la mayoría de los casos.
Por ello, se recurre a la Transformada en Tiempo Corto de Fourier (STFT, Short
Time Fourier Transform) que consiste en el enventanado de la señal para realizar el cálculo
de la Transformada de Fourier en cada una de ellas. Así se obtiene el espectrograma, que
representará la frecuencia en el eje de ordenadas y el tiempo en el eje de abscisas.
En lo que nos concierne en este trabajo, la información temporal también debe
considerarse ya que para establecer si una concentración alta de energía presente en el
espectro se trata de una sibilancia, esta tendrá que cumplir tanto con requisitos temporales
como en frecuencia, que serán detallados en apartados posteriores. Esto hace que el uso
del espectrograma en este ámbito sea de gran relevancia.
En este caso, se hará referencia a la STFT en tiempo discreto pues se trabaja con
señales de audio muestreadas.
Para obtener las distintas tramas en las cuales se calcula la Transformada de
Fourier se realiza un enventanado de la señal. Las ventanas podrán ser de distinto tipo
cumpliendo con la ecuación (3), siendo 𝐿 la longitud de la ventana en muestras.
𝑤[𝑛] = {≠ 0 0 ≤ 𝑛 ≤ 𝐿 0 𝑟𝑒𝑠𝑡𝑜
(3)
16
El cálculo de la STFT en tiempo discreto, 𝑋(𝑚, 𝑤) , siendo 𝑥[𝑛] la señal discreta a
la que se le aplica la STFT y 𝑤[𝑛] la función correspondiente a la ventana que realizará la
segmentación de la señal en tramas, se obtiene con la ecuación (4).
𝑋(𝑚, 𝑤) = ∑ 𝑥[𝑛] ∙ 𝑤[𝑛 − 𝑚] ∙ 𝑒−𝑗𝑤𝑛∞𝑛=−∞ , 𝑠𝑖𝑒𝑛𝑑𝑜 𝑤 = 2𝜋𝑓 (4)
Al seleccionar la ventana y su tamaño en muestras es necesario tener en cuenta
que esto afectará a la resolución temporal y en frecuencia de la señal. La resolución en
frecuencia se corresponde con la distancia mínima en muestras de dos frecuencias para
que sea posible distinguirlas tras aplicar el enventanado.
Una ventana con un menor número de muestras, es decir, una ventana más
estrecha, ofrecerá una mejor resolución temporal pues cada trama representa a un menor
número de muestras. Sin embargo, en frecuencia el lóbulo de la ventana será mayor,
empeorando la resolución en frecuencia al ser necesaria una mayor separación entre
frecuencias para que puedan ser diferenciadas. Es por ello que la opción óptima dependerá
de la aplicación.
Por su parte, cada tipo de ventana presenta unas características diferentes en
cuanto al ancho del lóbulo principal y laterales. Una ventana más suave en tiempo presenta
unos lóbulos laterales en frecuencia más atenuados. Entre las más empleadas se
encuentran la ventana de Hanning, Hamming o Blackman.
Así, es posible observar en la figura 2.4 y figura 2.5, cómo la ventana rectangular
es la que presenta una caída más abrupta en tiempo, dando lugar en frecuencia a unos
lóbulos laterales mayores (figura 2.5 a)), mientras que la ventana de Hanning cuya
respuesta temporal es más suave, en frecuencia sus lóbulos laterales son menores y
decaen de forma más rápida con el aumento de la frecuencia (figura 2.5 c)).
En el desarrollo de este Trabajo de Fin de Grado se ha empleado la ventana de
Hanning.
Figura 2.4. Ventanas comúnmente utilizadas [3].
17
Figura 2.5. Comportamiento de las ventanas en frecuecnia con M=50. a) Rectangular. b) Barlett. c) Hanning. d) Hamming [3]
Por otro lado, el espectrograma que se empleará en este proyecto se corresponderá
con el módulo del resultado obtenido al aplicar la STFT a la señal de audio muestreada de
entrada (5). En el método desarrollado para la detección de sibilancias la fase no es
relevante, puesto que se basa en la búsqueda de energía concentrada en torno a cierta
frecuencia que puede oscilar dentro de unos límites y que tiene una determinada
continuidad temporal. Es por ello que la fase solo será considerada para la síntesis de
audio realizada a la finalización del proceso de detección.
𝑌(𝑚, 𝑤) = |𝑋(𝑚, 𝑤)| (5)
2.3 Sonidos pulmonares
2.3.1 Sonidos respiratorios normales
Los sonidos respiratorios normales (RS) son aquellos emitidos por pulmones sanos.
Están caracterizados por un espectro de banda ancha con una mayor concentración de
energía en el rango de los 60 a 1600 Hz [4], aunque pueden alcanzar los 4000 Hz [9].
Es por ello por lo que, para cumplir con el Teorema de Nyquist-Shannon (6) se
empleará una frecuencia de muestreo de 8000 Hz para todos los audios.
𝑓𝑠 > 2 ∙ 𝑓𝑚𝑎𝑥 (6)
18
A continuación, se realiza una clasificación en función de la localización de los
mismos [5].
Sonido vesicular
Caracterizado por ser suave, no musical (no periódico). Puede apreciarse durante
la auscultación sobre los pulmones. Es un sonido con una duración e intensidad inferior en
la espiración que en la inspiración en la que se extiende por toda la fase. Sin embargo, por
su naturaleza, solo puede escucharse en la espiración. Asimismo, en condiciones normales
no presenta una pausa entre la inspiración y la espiración. Se encuentran en el rango de
frecuencia comprendido entre 100 y 1000 Hz, aunque generalmente son más energéticos
hasta los 200 Hz.
En la figura 2.6 se muestra como ejemplo el espectrograma de una respiración
vesicular normal. Se observa que la energía de las trayectorias continuas que puedan
existir en la banda de frecuencias media-alta para la que están definidos estos sonidos
(identificadas con flechas verticales), decaerá con la frecuencia, siendo su energía respecto
a la respiración poco diferenciable. Sin embargo, en la baja frecuencia inferior a los 100 Hz
(flecha horizontal) se observa la existencia de una mayor concentración de energía
correspondiente a sonidos del corazón y de los músculos que intervienen en la respiración.
Figura 2.6. Espectrograma de una respiración vesicular normal [10].
19
Sonido bronquial
Es audible sobre las vías respiratorias grandes. A diferencia del sonido vesicular si
presenta una pausa entre espiración e inspiración y presenta una mayor intensidad. Puede
alcanzar frecuencias superiores al sonido vesicular, extendiéndose desde los 100 a los
1500 Hz.
Sonido broncovesicular
Es posible escucharlo en la parte alta de la espalda, entre la escápula y en la parte
central del pecho y tiene una duración similar en la fase inspiratoria y espiratoria. El rango
de frecuencias es intermedio a los de los sonidos respiratorios anteriores.
Sonido traqueal
Se caracteriza por ser un sonido áspero y muy audible. Presenta igual duración en
ambas fases de la respiración con una pausa muy apreciable entre ambas. Se extiende
desde los 100 Hz a los 1500 Hz con una caída de energía en los 800 Hz. No obstante, en
ocasiones puede alcanzar los 5000 Hz.
Sonido producido por la boca
Es silencioso para una persona sana, siendo una mayor audibilidad un indicador de
problemas respiratorios, como son el asma o bronquitis crónica. Para personas con dichas
enfermedades puede ser muy audible incluso a cierta distancia. Presenta una distribución
en frecuencia similar al del ruido blanco, en el rango de los 200 a los 2000 Hz.
2.3.2 Sonidos adventicios
Son aquellos que se superponen a la respiración normal y pueden ser indicadores
de distintas enfermedades respiratorias. Es posible clasificarlos en dos grupos: sonidos
adventicios continuos y sonidos adventicios discontinuos.
Sonidos adventicios continuos (CAS)
Se consideran continuos aquellos sonidos adventicios con una duración superior a
80 o 100 ms [7], o 250 ms [5], en función de la fuente consultada. A su vez, en función del
tono pueden clasificarse como sibilancias (high-pitched) o Rhonchi (low-pitched).
Ambos sonidos presentan un comportamiento que podría considerar senoidal, con
frecuencias comprendidas entre los 100 y 1000 Hz [5], si bien los Rhonchi presentan una
frecuencia fundamental más baja, en torno a los 200 Hz, mientras que las sibilancias
pueden alcanzar frecuencias mayores. Son generalmente sonidos armónicos.
20
Entre las enfermedades que pueden asociarse con estos sonidos son asma y la
enfermedad pulmonar obstructiva crónica (EPOC).
En la figura 2.7 se representa el espectrograma de una respiración con sibilancias
en el intervalo 1.55 a 1.85 segundos aproximadamente, con una frecuencia fundamental
entorno a los 400 Hz. Tal y como se ha mencionado, se presentan en el espectrograma
formando líneas horizontales, representando una alta energía durante un tiempo superior
al mínimo establecido de 80, 100 o 250 ms en una banda estrecha de frecuencias.
Figura 2.7. Espectrograma de respiración con sibilancias [10].
Sonidos adventicios discontinuos (DAS)
Se diferencian de los sonidos adventicios continuos en la duración, siendo estos
inferiores a 25 ms [5]. Es posible clasificarlos según su origen en: crepitantes finos (fine
crackles) y crepitantes gruesos (Coarse crackles).
Los crepitantes finos son producidos por aperturas en las vías respiratorias
pequeñas y se caracterizan por una muy corta duración, de unos 5 ms, una alta frecuencia,
en torno a 650 Hz y es un sonido no musical. Solo son audibles durante la inspiración.
Pueden estar relacionados con enfermedades como la neumonía y la fibrosis pulmonar.
Los crepitantes gruesos son producidos por burbujas de aire en los bronquios y
presentan una duración próxima a 15 ms y una frecuencia fundamental de 350 Hz. Están
relacionados con enfermedades como la bronquitis, la bronquitis crónica y EPOC.
Un ejemplo de sonidos crepitantes, concretamente crepitantes finos, se muestra en
la figura 2.8. Se presentan en frecuencias significativamente superiores al resto de sonidos
adventicios mencionados. A diferencia de las sibilancias, los crepitantes pueden
21
identificarse en el espectrograma como concentraciones de energía que forman líneas
verticales, tratándose de sonidos de una duración muy reducida y abarcando una amplia
banda de frecuencias.
Figura 2.8. Espectrograma de una respiración con crepitantes finos (fine crackle) [10].
2.3.2.1 Sibilancias
Las sibilancias son un tipo de sonido adventicio continuo audible durante la
respiración. En tiempo presentan un comportamiento senoidal y en frecuencia un conjunto
de picos de banda estrecha que forman líneas de frecuencia sobre el tiempo, observándose
en el espectrograma líneas aproximadamente horizontales. Pueden encontrarse en la
banda de los 100 a 1000 Hz y una duración mínima de 100 ms según el CORSA
(Computarized Respiratory Sound Analysis) [6] o de 250 ms en base a la ATS (American
Thoracic Society) [8].
Uno de los mayores problemas que se encuentra en la búsqueda de las
características que definen las sibilancias es la disparidad de valores encontrados. Como
se ha visto, la duración mínima de las sibilancias es definida como 250 ms, 100 ms e incluso
80 ms, en distintas fuentes. Con la frecuencia fundamental ocurre lo mismo. Para la ATS
establece que es de mínimo 225 Hz en niños y de 400 Hz en adultos, mientras que en el
CORSA se considera una frecuencia fundamental mínima de 100 Hz.
La detección de las mismas es muy importante para diagnosticar múltiples [8]
enfermedades pulmonares como el asma o la bronquitis. Su localización, duración y su
relación con respecto al total del ciclo respiratorio también son aspectos que ayudan al
médico en la distinción de sibilancias [11].
A su vez, las sibilancias pueden clasificarse en monofónicas o polifónicas [12].
22
Una sibilancia monofónica es aquella que presenta un único pico en frecuencia o
una frecuencia fundamental y sus armónicos. Este tipo de sibilancias indican un
estrechamiento de las vías aéreas largas. La forma de su onda en tiempo se encuentra en
la figura 2.9.
Figura 2.9. Representación temporal de una sibilancia monofónica [13].
Por el contrario, una sibilancia polifónica presenta picos adicionales que difieren en
frecuencia de sus armónicos. Las sibilancias polifónicas indican una anomalía en las vías
cortas, como ocurre en los pacientes con asma. Su forma en tiempo se representa en la
figura 2.10.
Figura 2.10. Representación temporal de una sibilancia polifónica [13].
En la figura 2.11, se muestra el espectrograma de sonido durante un ciclo
respiratorio completo (izquierda). Se representa a la derecha su espectrograma de
potencia para el instante en el que se observa un pico en la fase de expiración, apreciando
que, además del pico presente en la frecuencia fundamental, 230 Hz, y sus armónicos,
23
existen picos más energéticos incluso que los armónicos de dicha sibilancia a partir de 500
Hz, lo que implica que se trata de un sonido polifónico.
Figura 2.11. Espectrograma del sonido (izquierda) y espectrograma de potencia (derecha) de un sonido polifónico [12].
24
3 OBJETIVOS
El objetivo principal de este trabajo fin de grado es la implementación de una
aplicación en Android que permita una monitorización continua de sibilancias severas, no
enmascaradas por sonidos respiratorios normales, mediante la captura de señales sonoras
directamente a partir del micrófono integrado en un smartphone. A partir de estas señales
sonoras y mediante un algoritmo desarrollado inicialmente en MATLAB que posteriormente
será migrado a la plataforma Android se determinará la presencia de sibilancias.
A continuación, se detallan los objetivos secundarios necesarios para alcanzar este
objetivo principal.
Recopilación y estudio de material bibliográfico relacionado con la captura de audio
en smartphones basados en Android.
Recopilación y estudio de material bibliográfico relacionado con la detección de
sibilancias sonoras.
Implementación y evaluación del algoritmo de detección de sibilancias en MATLAB.
Creación de una base de datos adecuada al problema.
Implementación del sistema propuesto en Android.
Diseño de una aplicación basada en Android para captura y procesado de audio.
Integración del algoritmo de detección de sibilancias en Android.
25
4 ESTADO DEL ARTE
4.1 Detección de sibilancias
Actualmente, son diversos los métodos existentes para la detección de sibilancias.
Asimismo, se observa que no existe un consenso en cuanto a los parámetros que definen
las sibilancias, tales como duración o frecuencia de oscilación, principalmente porque estos
dependerán de la edad, de la capacidad pulmonar, etc. A continuación, se presentan
algunos de los estudios realizados en este ámbito.
En [15], se presenta un método de detección de sibilancias basado en la
factorización de matrices no negativas (Non-negative Matrix Factorization, NMF) que
permite separar los sonidos respiratorios de las sibilancias de un mismo audio. En este
caso, basándose en el CORSA se establece el rango de frecuencia de las sibilancias de
100-1000 Hz y la duración mínima de 100 ms. El proceso llevado a cabo puede dividirse
en dos etapas tal y como se aprecia en el esquema de la figura 4.1, una primera etapa de
separación de respiración y sibilancias y la segunda etapa en la que se determina si los
sonidos extraídos se corresponden o no con sibilancias finalmente.
En la etapa de separación se persigue modelar las sibilancias y los sonidos
respiratorios de la forma más fiel posible a cómo se presentan estos sonidos en la realidad
de forma natural, estableciendo dos restricciones en la factorización de NMF: smoothness
y sparseness. Esto se realiza a partir del espectrograma, obtenido aplicando la STFT con
una ventana de Hamming de 256 muestras con un solape del 25% a 2048 kHz. De esta
forma, las sibilancias son modeladas como bandas estrechas y los sonidos respiratorios
como banda ancha y variación temporal lenta. En la segunda etapa de detección se emplea
la divergencia Kullback-Leibler para discriminar entre sibilancias y respiración.
26
Figura 4.1. Esquema del método propuesto en [15]
En la figura 4.2 (a) se muestra un ejemplo del espectrograma de una señal mezcla
de sibilancias y respiración, en la c) se observa las sibilancias que han sido detectadas y
extraídas, y en e) la respiración restante la respiración base. En las gráficas b) d) y f) se
muestran los intervalos ideales donde deberían detectarse las sibilancias, y la divergencia
de Kullback-Leibler para las sibilancias y respiración, respectivamente. Los resultados
muestran una precisión (Accuracy) del 95,86%.
27
Figura 4.2. a) Magnitud del espectrograma 𝑋 de una señal mezcla x(t). b) Detección ideal de sibilancia 𝛿𝑤. c) Espectro estimado de sibilancia 𝑋�̂�, d) 𝑑𝐾𝐿(𝑋|𝑋�̂�). e) Espectrograma estimado de la respiración �̂�𝑅. f) 𝑑𝐾𝐿(𝑋|𝑋�̂�) [15]
En el estudio realizado en [16] se presenta un clasificador automático entre sonidos
adventicios continuos (CAS) y sonidos respiratorios normales (RS) mediante el análisis
multiescala de la frecuencia intermedia (FI) y de la envolvente (IE), calculada tras la
descomposición en modo empírico (EEMD). La clasificación se basa en que la dispersión
FI de las señales disminuye considerablemente cuando existen sonidos adventicios
continuos en la respiración. El método llevado a cabo se describe a continuación.
En primer lugar, se extraen los segmentos candidatos a sonidos adventicios
continuos (CAS) que se encuentran superpuestos a la respiración normal (etapa
esquematizada en figura 4.3. Después, en cada segmento se realiza de nuevo una nueva
comprobación para verificar si realmente se trata o no de CAS o respiración normal.
Finalmente, el audio completo será determinado como respiración normal o que contiene
CAS.
Tras la detección de sibilancias se emplearán tres umbrales que serán optimizados
para distinguir sonidos respiratorios y sibilancias a partir del resultado de la dispersión.
Aplicando que los segmentos con CAS tienen una FI inferior a los sonidos respiratorios
normales, los segmentos CAS son identificados calculando la dispersión FI 𝜎𝐹𝐼,𝑖 en cada
intervalo considerado al aplicar una ventana deslizante de 125 muestras a 3125 Hz y un
28
solape del 92%, lo que supone una duración de 40 ms, menor que la mitad de la duración
de una sibilancia considerada en este artículo (100 ms).
A partir de estos valores 𝜎𝐹𝐼,𝑖 obtenidos y de unos umbrales establecidos
empíricamente, los segmentos serán considerados sonidos adventicios o descartados.
Por último, se debe comprobar si los segmentos clasificados como CAS pertenecen
a la misma trayectoria o no, en basa a 𝜎𝐹𝐼,𝑖 y a la separación temporal que exista entre
ellos.
Figura 4.3. Diagrama de bloques des algoritmo de clasificación [16].
Por otra parte, el estudio presentado en [10] se basa en la extracción de información
a partir del espectrograma de forma dinámica que permita identificar sibilancias con un
patrón de reconocimiento. En él, se considera una duración mínima de sibilancia de 100
ms y una frecuencia mínima de 100 Hz.
El software desarrollado y cuyo diagrama de flujo se presenta en la figura 4.4, parte
del pre-procesado de las señales de audio de entrada, en el que se comprueba la
frecuencia de muestreo. Para aquellas superiores a 9 kHz, se aplica un filtro paso bajo con
frecuencia de corte de 4 kHz para evitar aliasing antes de remuestrear la señal.
Posteriormente, se aplica un filtro paso alto con frecuencia de corte 4 kHz para eliminar la
baja frecuencia que puede introducir interferencias a causa de otros sonidos respiratorios
o sonidos del corazón.
29
Una vez la señal está completamente pre-procesada para disponer de señales lo
más normalizadas posible e independientes de las condiciones de grabación de las
mismas, se obtiene el espectrograma a partir de una STFT de 1024 puntos con un
solapamiento del 60%, al que se aplicará procesado de imagen para aislar las líneas
presentes en la imagen que podrán corresponderse con trayectorias sibilantes. Para ello,
se aplica una máscara Laplaciana 9x9 junto con un umbral que será el 80% del máximo
valor del espectrograma, descartando todos los valores inferiores.
La información extraída será almacenada para mejorar el algoritmo de detección
mediante una red neuronal.
Figura 4.4. Diagrama de flujo del método propuesto [10]
Con el objetivo de mejorar los resultados de la auscultación tradicional, en [17] se
propone un sistema para procesar las señales grabadas mediante un microcontrolador. La
clasificación de sonidos respiratorios se realiza mediante la Transformada de Wavelet en
paquetes (WPT, Wavelet Packet Transform). En este artículo se considera para los sonidos
crepitantes una duración inferior a 20 ms y una frecuencia en el rango de 100 a 2000 Hz y
para las sibilancias una duración superior a 200 ms.
30
En el sistema propuesto, el micrófono se colocará en el pecho del paciente (Figura
4.5) y la señal podrá ser procesada y clasificada antes de ser enviada a una estación
remota en la cual se realice la monitorización de estos sonidos.
Figura 4.5. Esquema del sistema propuesto en [17]
La clasificación será realizada con ayuda de una red neuronal que, gracias al
entrenamiento, será más robusta. Asimismo, de forma preliminar se muestra en este
artículo (figura 4.6) los espectrogramas correspondientes a una respiración normal (a), con
crepitaciones (b) y con sibilancias (c) observando que estos sonidos poseen características
de tiempo y frecuencia que les diferencia en base a las cuales poder clasificarlos.
Respecto al pre-procesado de la señal también destacan la necesidad de
normalizar la señal para reducir la variabilidad entre diferentes grabaciones.
Figura 4.6. Espectrograma de: a) respiración normal, b) crepitaciones, c) sibilancias [17]
31
Los artículos [18] y [19] que se detallan a continuación son en los que se basa
principalmente el método de detección de sibilancias de este Trabajo Fin de Grado.
En [18] se propone un software para la detección de sibilancias basado en el
análisis espectral. Las características que representan a las sibilancias para este artículo
son 250 ms de duración mínima y una frecuencia en el rango de 225 a 800 Hz. En la figura
4.7 se representa el espectrograma de una respiración normal (a) y una respiración con
sibilancias polifónicas (b).
Figura 4.7. a) Espectograma de una respiración normal. b) Espectrograma de una respiración sibilancias polifónicas [18]
El método propuesto (figura 4.8) comienza con la estandarización de las señales de
entrada mediante normalización y remuestreo de las mismas a 5500 Hz, con el objetivo de
que las condiciones de grabación no influyan en el resultado. Para obtener el
espectrograma, se emplea una ventana de Hanning de 50 ms con un solape del 50%. Tras
aplicar la FFT, solo se almacenan los tres picos de mayor energía de cada frame que
superen un umbral determinado empíricamente y que pertenezcan al rango de frecuencias
considerado (225-800 Hz). A continuación, para que estos picos sean considerados parte
32
de una misma sibilancia, los picos de un frame y de sus frames vecinos deberán cumplir
con una diferencia de frecuencia no superior a 30 Hz. En caso contrario, serán descartados.
En los picos en los que sí se cumpla la condición anterior, se comprueba si la agrupación
de picos creada es superior a 250 ms, para considerar que se ha detectado una sibilancia.
Los resultados obtenidos muestran que el algoritmo es capaz de detectar el 100%
de las muestras con sibilancias, el 89% de las sibilancias monofónicas/polifónicas y un 60%
las sibilancias sonoras.
Figura 4.8. Diagrama de bloques del método propuesto en [18]
En el método propuesto en [19] se realiza un proceso similar para la búsqueda de
sibilancias basado en el análisis tiempo-frecuencia, pero además añade el concepto de
efecto Haas como parámetro para determinar la cercanía en tiempo que deben cumplir los
distintos picos detectados para ser considerados como parte de una misma trayectoria
candidata a sibilancia.
En este caso, no realiza un remuestreo previo, variando las frecuencias de entrada
de los audios de prueba de 4000 Hz a 8012 Hz. El algoritmo parte del cálculo de la
Transformada de Fourier de Tiempo Corto (STFT) de la señal y de la sustracción del sonido
de fondo procedente del sonido respiratorio con un filtro de suavizado.
En este caso, se opta por realizar una división entre distintas bandas de frecuencias
para la detección de sibilancias, estableciendo en cada una de ellas un umbral de amplitud
que deben cumplir los “bins” del espectrograma para ser considerados como picos. A
continuación, se realiza la agrupación de los mismos basándose en la similitud de
frecuencia entre trayectorias y el efecto Haas, por el que, si dos sonidos alcanzan el oído
33
con una diferencia inferior a 50 ms, serán interpretados como un único sonido por el
cerebro.
Finalmente, para las agrupaciones finales se comprueba si estas tienen una
duración superior a 150 ms, siendo esta la duración mínima considerada en este artículo
para una sibilancia. En caso afirmativo, se procederá a comprobar si la potencia de las
posibles sibilancias es superior a un umbral definido como el cociente de la potencia de la
posible sibilancia y la potencia total del sonido. De esta forma, se pretende descartar ruido
que pueda cumplir con las características anteriores. Si este fuese el caso, la potencia del
ruido sería muy inferior a la de las sibilancias, por lo que sería descartado.
Figura 4.9. Diagrama de bloques del método propuesto en [19]
4.2 Dispositivos móviles y salud
La evolución de las TIC tiene un papel decisivo en el ámbito de la medicina, sobre
todo en el tratamiento de pacientes crónicos, mejorando la monitorización y asistencia. Así,
destacamos en este caso las m-Health como una variante de las e-Health (telemedicina),
basada en la práctica de la medicina y la salud pública soportada por dispositivos móviles
como teléfonos, dispositivos de monitorización de pacientes, asistentes digitales y otros
dispositivos inalámbricos.
De esta forma, se pretende aprovechar el avance de las TIC para mejorar las tareas
de detección y monitorización de enfermedades entre otros. Además, dado que el
dispositivo móvil es un elemento muy presente en la sociedad actual, los servicios
implementados podrán tener un gran alcance. Así, es posible desarrollar herramientas de
apoyo a las tareas de detección de enfermedades o monitorización de las mismas llevadas
a cabo por profesionales, aportando información adicional que acelere el diagnóstico o que
podría no producirse en la duración de una consulta médica convencional. Asimismo, estas
aplicaciones también pueden estar dirigidas al personal sanitario como es el caso del
sistema propuesto en [20].
En este artículo, se presenta una aplicación móvil para la detección de sonidos
crepitantes en pacientes con neumonía intersticial difusa (Diffuse Interstitial Pneumonia,
DIP) para sustituir los estetoscopios tradicionales en la tarea de auscultación. El sistema
34
propuesto se compone de la aplicación móvil y de un micrófono electrect protegido para
capturar los sonidos respiratorios (figura 4.10). La aplicación dispone de una lista con todos
los pacientes y grabaciones realizadas, disponiendo del historial de pruebas realizadas en
el propio dispositivo.
Se propone realizar la grabación en diferentes puntos, al igual que en una
auscultación tradicional. Así, al finalizar todas las grabaciones, se mostrará una imagen
indicando el punto en el que se ha detectado el sonido crepitante, una gráfica que
represente la grabación completa realizada indicando el segmento en el que ha sido
detectado y un resumen de todas las crepitaciones detectadas durante el análisis completo.
Figura 4.10. Sistema propuesto en [20]. a) Aplicación móvil desarrollada. b) Adquisición de datos en un paciente
Respecto a la etapa de captura y procesado, se emplea una frecuencia de muestreo
de 10 kHz y 16 bits por muestra para realizar la grabación, y como paso previo al procesado
de audio, se aplica un filtrado paso banda entre 75 y 1000 Hz para reducir otros sonidos
respiratorios o del corazón que puedan interferir en el resultado.
Los resultados conseguidos para la detección de crepitantes finos reflejan una
precisión entre el 84.86% y 89.16%, una sensibilidad entre 93.45% y 97.65%, y una
especificidad del 99.82% al 99.84%, mientras que para crepitantes gruesos no se obtienen
unos resultados satisfactorios.
En el artículo [21] se presenta una solución para realizar la auscultación tradicional
de forma remota a partir de la transmisión de las señales sonoras. El motivo de la necesidad
de una auscultación remota es el mismo por el que en este Trabajo de Fin de Grado se
pretende crear una aplicación que permita monitorizar las sibilancias, y es que en
ocasiones algunos problemas respiratorios se acentúan durante la noche y pueden no
ocurrir durante la auscultación en la consulta médica, por lo que su detección es
35
complicada. El esquema a seguir se basa en el uso de un estetoscopio en el que se inserta
un auricular común de un dispositivo móvil con el objetivo de captar dicha señal con el
dispositivo móvil del paciente para posteriormente ser enviado al dispositivo móvil del
médico.
Figura 4.11. Esquema propuesto para auscultación remota en [21]
Por otro lado, AsthmaMD [22] es una aplicación móvil que permite a los pacientes
con asma grabar y tener un registro de su flujo de pico. Asimismo, muestra
automáticamente posibles desencadenantes de los resultados obtenidos, tales como
alergia, polen o contaminación. Facilita a los pacientes la toma de la medicación mediante
los recordatorios que pueden establecerse. En este caso, la aplicación está tanto orientada
al paciente como al profesional sanitario con el objetivo de conseguir una monitorización
de los pacientes. Para ello, es posible compartir los resultados obtenidos.
Figura 4.12. AsthmaMD. Aplicación y medidor de flujo [22].
36
En relación con la monitorización de sibilancias aplicable a enfermedades
respiratorias como el asma se presenta el dispositivo lanzado en 2019 por la empresa
Respiri llamado Wheezo [23]. El dispositivo wheezo es el que realiza la monitorización de
sibilancias y acompañado con una aplicación móvil, ofrece funciones similares a la
aplicación AsthmaMD, como recordatorios para tomar la medición, síntomas y posibles
causas de dichos problemas respiratorios. Por el momento no está disponible, pero se
pretende incluir el efecto de las condiciones meteorológicas.
Figura 4.13. Dispositivo para la monitorización de sibilancias: Wheezo [23].
4.3 Sistemas operativos en dispositivos móviles
Desde el nacimiento de los smartphones, estos han ido adquiriendo cada vez más
peso en prácticamente todos los ámbitos cotidianos. Por ello, la monitorización que se
pretende realizar se desarrollará para dispositivos móviles.
No obstante, existen diferentes sistemas operativos que requieren el desarrollo de
una aplicación diferente al menos en ciertos aspectos, aunque compartan similitudes. Por
ello, para realizar la aplicación que aquí se presenta, se ha seleccionado el sistema
operativo más extendido actualmente, Android, con una cuota de mercado muy superior a
su inmediato competidor, iOS, como se puede observar en la figura 4.14.
Figura 4.14. Cuota de mercado en teléfonos móviles por Sistema Operativo en 2020 [24]
37
5 IMPLEMENTACIÓN
5.1 Implementación en MATLAB
5.1.1 Desarrollo del algoritmo detector de sibilancias
Uno de los bloques principales de este trabajo es el procesado de la señal de audio
capturada por el micrófono del dispositivo móvil. Este procesado se realiza en MATLAB,
para posteriormente ser migrado a C e integrado en Android. Para ello, se desarrolla un
algoritmo capaz de identificar sibilancias, así como de realizar la síntesis de audio
correspondiente a cada una de ellas para almacenar un fichero .wav en el dispositivo junto
con un fichero de texto indicando la duración de las mismas, tiempo de ocurrencia y
frecuencia. Asimismo, es necesario que este algoritmo sea capaz de ofrecer como
parámetro de salida un audio con los dos últimos segundos de la señal de entrada, que en
la aplicación móvil será la señal capturada, para poder realizar el procesado de forma
continua sin perder información.
La implementación del código capaz de detectar sibilancias está basada en los
métodos definidos en [18] y [19], al cual se añade la síntesis del segmento final del audio
formado por los dos últimos segundos, así como de las sibilancias que hayan sido
detectadas en cada caso. El esquema propuesto en ese proyecto se muestra en la figura
5.1 , que descrito por etapas será:
1. Remuestreo de la señal a 8000 Hz y cálculo del espectrograma mediante la
transformada rápida de Fourier (STFT, Short Time Fourier Transform).
2. Obtención de los picos más significativos del espectrograma. En cada frame
(cada columna del espectrograma, formada por todas las componentes en
frecuencia de un instante temporal) serán buscados aquellos picos cuya
diferencia respecto a picos vecinos sea superior a un determinado umbral que
será optimizado en apartados posteriores.
3. Creación de trayectorias a partir de los picos significativos detectados que
cumplan con las características de cercanía en tiempo y frecuencia entre sí.
4. Detección de sibilancias a partir de las trayectorias que cumplan con las
características que definen una sibilancia en tiempo y frecuencia.
5. Si existen sibilancias, obtención del audio correspondiente al segmento
temporal donde se encuentra la sibilancia. En cualquier caso, se obtendrá la
señal de audio correspondiente a los dos últimos segundos de grabación.
38
Figura 5.1. Esquema de la metodología propuesta.
39
5.1.1.1 Cálculo del espectrograma
Como paso previo al cálculo del espectrograma, se obtiene la señal monocanal si
esta fuese estéreo y se aplica un remuestreo de 8000 Hz. El espectrograma será calculado
mediante la STFT y está implementado en la función “Espectrograma.m” cuyos parámetros
de entrada son:
“y”: señal que contiene el audio de entrada remuestreado.
“nfft”: número de transformadas rápidas de Fourier a realizar.
“fs”: frecuencia de muestreo del audio.
“window”: ventana empleada para el cálculo del espectrograma, será de tipo
Hanning y con un número de muestras que será optimizado en apartados
posteriores.
“noverlap”: muestras de cada ventana que serán solapadas para el cálculo
de la transformada en la siguiente ventana. En este caso será del 50%,
coincidiendo con el método del artículo [18].
Por su parte, se obtendrá como salida:
“Ycomplex”: contiene el espectrograma resultante con valores complejos.
“toy”: vector con los valores de tiempo para el espectrograma.
“foy”: vector con los valores del eje de frecuencia para el espectrograma.
Todo el procesado de audio se realizará en el dominio de la frecuencia,
trabajándose por tanto con el módulo de la variable “Ycomplex”, a la que denominaremos
“Yabs”. No obstante, será necesario emplear la fase para finalizar el algoritmo y obtener
los audios finales de las sibilancias, si existen, y de los últimos dos segundos de audio, por
lo que este valor se almacenará en “Yang”.
El espectrograma resultante estará compuesto por celdas con una coordenada para
el eje de abscisas correspondiente al tiempo y una coordenada para el eje de ordenadas
correspondiente a la frecuencia. Estas celdas serán denominadas bins. Asimismo,
denominaremos frame a cada una de las columnas que compone el espectrograma, siendo
este por tanto la agrupación de bins con el mismo valor de coordenada temporal.
Para representar el espectrograma se empleará la función “imagesc” con
parámetros de entrada, eje de coordenadas correspondiente al tiempo, denominado “toy”,
eje de ordenadas correspondiente a la frecuencia, denominado “foy” y la matriz que
contiene el espectrograma en valor absoluto “Yabs”.
En relación a la resolución del espectrograma empleado, se han considerado tres
valores para el tamaño en muestras de la ventana empleada para calcular la STFT: 256,
512 y 1024. Un mayor número de muestras por ventana, supone que un mayor intervalo
temporal estará representado por un mismo bin o celda, de tal forma que la resolución es
40
menor. Sin embargo, no siempre es necesaria una gran resolución, sino que dependerá de
la aplicación. En este caso, se comprobará cuál es la ventana que ofrece unos mejores
resultados de entre las propuestas anteriormente, en apartados posteriores.
En la figura 5.2 se puede observar el espectrograma de una señal de audio con
sibilancias de 8 segundos de duración empleando una ventana de Hanning de 512
muestras con un solape del 50% para una frecuencia de muestreo de 8000 Hz. En
concreto, existen dos sibilancias que ocurren entre 0.38 y 1.34 segundos y 5.68 y 6.7
segundos, respectivamente. Estas se corresponden con las zonas de mayor energía
presentes en el espectrograma.
Figura 5.2. Espectrograma señal respiración con sibilancias, “M01_p5dB.wav”.
En la figura 5.3 se representa otro espectrograma de una señal con sibilancias,
calculado con una ventana de Hanning de 256 muestras con un solape del 50% para una
frecuencia de muestreo de 8000 Hz. Presenta una duración de 18 segundos y cuatro
sibilancias apreciables en los intervalos de 3.6 a 4.3, 7.6 a 8.4, 12.5 a 13.3 y 14.6 a 15.4
segundos, respectivamente.
41
Figura 5.3. Espectrograma señal respiración con sibilancias, “M09_0dB.wav”
5.1.1.2 Detección de picos
En esta etapa, se buscarán los picos más significativos del espectrograma en cada
frame. Para ser considerados como tal, deberán cumplir con un umbral definido como la
diferencia de amplitud con respecto a los bins vecinos, que será optimizado en el apartado
5.1.2.3 para la base de datos empleada en este Trabajo de Fin de Grado.
Cabe destacar que la respiración humana y el corazón producen sonidos en baja
frecuencia, así como los sistemas de grabación. Además, teniendo en consideración el
hecho de que la captura de audio se realizará con el micrófono de un dispositivo móvil, el
descarte de la baja frecuencia en nuestro método es muy necesario para una correcta
detección reduciendo posibles interferencias. Por tanto, como paso previo a la detección
de picos se descartará la banda de frecuencia de 0 a 60 Hz, tal y como se propone en [25].
Con el fin de conseguir unos resultados más fiables e independientes de las
diferentes condiciones que pueden darse en la grabación, así como de las características
de la respiración de la persona de quien procede ese audio, se opta por normalizar el
espectrograma para el cálculo de los picos más significativos, y posteriormente se
desnormalizará al terminar esta etapa. Por tanto, el espectrograma será normalizado por
el cociente de la suma de todas las amplitudes entre el número de puntos en frecuencia,
𝐹, y el número de puntos en tiempo, 𝑇, obteniendo el espectrograma normalizado 𝑌𝑛𝑜𝑟𝑚 (7)
[15].
42
𝑌𝑛𝑜𝑟𝑚 =𝑌𝑎𝑏𝑠
∑ ∑ 𝑌𝑎𝑏𝑠,𝑓,𝑡𝑇𝑡−1
𝐹𝑓=1
𝐹∙𝑇
(7)
Para este proceso de detección de picos significativos, se empleará la función
“findpeaks” perteneciente a la Toolbox de MATLAB “Signal Processing Toolbox”, la cual
además de tener como parámetro de entrada el vector en el que buscar los picos
significativos, que en este caso se corresponde con cada frame del espectrograma, permite
especificar diferentes argumentos para controlar los picos buscados. En este caso los
parámetros que deben especificarse requieren emplear las siguientes entradas:
“Sortstr”: permite indicar cómo ordenar los picos encontrados. Puesto que
en este caso se buscan los más energéticos, se empleará un orden
descendente, indicando a continuación de esta entrada “Descend”.
“MinPeakDistance”: distancia mínima entre picos significativos. Este
parámetro permitirá limitar que solo se devuelva un pico por frame
correspondiente a una posible sibilancia. A partir del análisis del
espectrograma se observa que 5 bins de separación son suficientes para no
identificar más de un pico por sibilancia.
“Npeaks”: establece el número de picos máximo que buscar. En este caso
no se requiere gran cantidad de picos, solo aquellos con una energía muy
destacable respecto al resto del espectrograma, pues son los que podrían
pertenecer a una sibilancia. Se ha empleado 5 como valor.
“Threshold”: diferencia de amplitud entre un bin respecto a sus vecinos
(anterior y posterior) para ser considerado un pico significativo. Este umbral
será determinado en la fase de evaluación y de él dependerá en gran
medida la eficacia de la detección.
Esta etapa la realiza la función “DeteccionPicos.m”, que recibirá como entrada el
vector con los valores temporales “toy”, el vector con los valores de frecuencia “foy”, el
módulo del espectrograma “Yabs” y el valor “Umbral” empleado en “findpeaks”. Por su
parte, se obtendrán como salidas las siguientes matrices:
“picos”: matriz con 5 filas (número máximo de picos que pueden ser
detectados por frame, definido anteriormente) y tantas columnas como
frames tenga el espectrograma. Los picos obtenidos en cada iteración del
bucle que recorrerá el espectrograma por frames y contendrá “findpeaks”,
serán almacenados en la columna correspondiente (ejemplo en figura 5.4).
“picos_ind”: misma estructura que la matriz anterior. En este caso
almacenará las posiciones de los picos detectados dentro de un frame. De
43
esta forma, podrán ubicarse dentro del espectrograma los picos detectados,
pues se dispone de su posición respecto a la frecuencia y la posición
respecto al vector de tiempos vendrá dado por la columna en la que se
encuentren dentro de la matriz “picos_ind” (ejemplo en figura 5.5).
“picos_frec”: misma estructura que “picos” y “picos_ind”, en los que a
diferencia de estos se almacenará la frecuencia asociada a los picos
detectados (ejemplo en figura 5.7).
“YabsPicos”: amplitudes del espectrograma correspondientes
exclusivamente a los picos detectados, siendo el resto de bins cero.
Figura 5.4. Ejemplo de matriz "picos" (frames 11 a 20) para “M01_p5dB.wav”
Figura 5.5. Ejemplo de matriz "picos_ind" (frames 11 a 20) para “M01_p5dB.wav”
Figura 5.6. Ejemplo de matriz "picos_frec" (frames 11 a 20) para “M01_p5dB.wav”
Mediante las tres matrices anteriores será posible disponer de toda la información
para el acceso a los bins correspondientes en etapas posteriores del procesado, puesto
que se dispone directamente de los valores de amplitud y frecuencia de los picos, así como
44
la posición exacta dentro de cada frame (columnas) y su posición en frecuencia en el
espectograma (valores almacenados en “picos_ind”).
En la figura 5.7 se representan los picos obtenidos para la señal ejemplo
“M01_p5dB.wav” en el espectrograma, que al igual que para la representación de su
espectrograma en la figura 5.2, se ha obtenido con una ventana de Hanning de 512
muestras con solape del 50% para una frecuencia de muestreo de 8000 Hz.
Figura 5.7. Espectrograma con los picos detectados en “M01_p5dB.wav”
Para el caso de la señal ejemplo “M09_0dB.wav” los picos obtenidos se muestran
gráficamente en la figura 5.8, siendo el espectrograma el resultado de aplicar una ventana
de Hanning de 256 muestras con un solapamiento del 50% con frecuencia de muestreo de
8000 Hz.
45
Figura 5.8. Espectrograma con los picos detectados en “M09_0dB.wav”
5.1.1.3 Creación de trayectorias
Las sibilancias, como se ha comentado anteriormente, pueden diferenciarse en el
espectrograma como picos o componentes muy energéticas en un rango de frecuencias
estrecho (banda estrecha) superpuestos a la respiración humana. Además, como se ha
visto las sibilancias son sonidos adventicios continuos, por lo que para ser consideradas
como tal tendrán una duración mínima, que para el algoritmo aquí desarrollado será de 250
ms en base a diversas fuentes, entre ellas [7,18], así como una frecuencia fundamental en
el rango de 100 a 1000 Hz [4].
La creación de trayectorias llevada a cabo [18, 19]. está basada en el agrupamiento
de los picos detectados que cumplan con la cercanía en tiempo y en frecuencia entre ellos.
En cuanto a la cercanía en tiempo, se establecerá como límite el efecto Haas [19], por el
que dos sonidos independientes que alcancen el oído con una separación inferior a 50 ms,
serán interpretados como un único sonido. Por otra parte, el límite de separación en
frecuencia para que dos picos significativos consecutivos detectados puedan pertenecer a
la misma trayectoria será de ±30 Hz [18].
No obstante, la creación de una trayectoria no implica la existencia de una
sibilancia, pues como se ha citado al inicio de este apartado. Para que una trayectoria sea
46
considerada como sibilancia, debe superar la duración mínima y que su frecuencia
fundamental esté en el rango establecido.
La comprobación de esta continuidad temporal se realizará mediante una ventana
deslizante centrada en t, que abarcará 𝑡 ± 50 𝑚𝑠, suponiendo una anchura total de no más
de 100 ms, basada en [26]. Esta recorrerá todos los frames de la matriz “picos” (o
“picos_frec”) comprobando si existen picos dentro de esa ventana, en el resto de frames.
De no ser así, el pico será descartado pues no cumplirá con el efecto Haas en ningún caso,
al no estar dentro de la ventana definida. Si existen picos en los frames dentro de la
ventana, se cumplirá la continuidad temporal y se pasará a comprobar la continuidad en
frecuencia de ±30 Hz.
En resumen, el método llevado a cabo para la creación de trayectorias es el
siguiente:
i) Se toman los picos que estén dentro de los límites de la ventana deslizante
centrada en 𝑡 con y con límites 𝑡 ± 50 𝑚𝑠.
ii) Se busca el máximo absoluto de la ventana (“Emax”), cuya frecuencia 𝑓𝐸𝑚𝑎𝑥 se
usará como umbral en base a la cual verificar la cercanía en frecuencia. Este
máximo estará en la posición 𝑡𝐸𝑚𝑎𝑥 que se econtrará comprendido en (8),
puesto que se encuentra dentro de la ventana centrada en 𝑡 (instante del frame
actual considerado).
iii) Se comprueba si algún pico del frame actual situado en el instante 𝑡 cumple con
la cercanía en frecuencia (9) respecto al máximo absoluto encontrado en la
ventana. De ser así, los picos pertenecerán a la misma trayectoria.
iv) Terminado el proceso en el frame 𝑡, la ventana se desplazará una posición
siendo ahora el frame en el que se realiza la comprobación el frame
correspondiente a la posición 𝑡 + 1, y volverá a realizarse el mismo proceso.
𝑡𝐸𝑚𝑎𝑥 − ∆𝑡 ≤ 𝑡 ≤ 𝑡𝐸𝑚𝑎𝑥 + ∆𝑡 (8)
𝑓𝐸𝑚𝑎𝑥 − ∆𝑓 ≤ 𝑓(𝑡) ≤ 𝑓𝐸𝑚𝑎𝑥 + ∆𝑓 (9)
Cabe destacar que este proceso puede producir trayectorias con nulos intermedios,
si en esas posiciones bien no se han detectado picos erróneamente o se han detectado,
pero han sido descartados en la etapa de creación de trayectorias al carecer de cercanía
en frecuencia. Sin embargo, si la distancia entre picos no nulos es inferior a 50 ms,
formarán parte de la misma trayectoria.
Para solucionarlo y completar las trayectorias se aplica interpolación en aquellas en
las que sea necesario, conociendo que cada fila corresponde a una trayectoria, se buscará
47
en cada una de ellas los ceros intermedios que existan. En caso afirmativo, se procede a
realizar la interpolación como la media entre los valores no nulos más próximos entre sí.
De tal forma que para un nulo que se presente en el instante t, 𝑓(𝑡) = 0 y 𝐸(𝑡) = 0,
comprendido en el intervalo de duración de la sibilancia, se obtiene su valor en frecuencia,
𝑓(𝑡) y su valor de energía 𝐸(𝑡) mediante las ecuaciones (10) y (11). En primer lugar, se
interpolará comenzado por el nulo ubicado en un instante inferior, para posteriormente si
hay más de un nulo que interpolar, el siguiente pico se pueda obtener como la interpolación
entre ambos.
𝑓(𝑡) =𝑓(𝑡−1)+𝑓(𝑡𝑓>0)
2 (10)
𝐸(𝑡) =𝐸(𝑡−1)+𝐸(𝑡𝑓>0)
2 (11)
La creación de trayectorias está implementada en la función
“CreacionTrayectorias.m”, que recibe como parámetros de entrada los vectores de tiempos
y frecuencia “toy” y “foy”, respectivamente, así como las matrices “picos” y “picos_ind”,
resultado de la función previa “DeteccionPicos.m”. Como parámetros de salida tendrá, las
matrices “trayectorias”, “trayectorias_frec” y “trayectorias_ind”, que contendrán los valores
de los picos que sí forman parte de una trayectoria, es decir, respectivamente el resultado
de “picos”, “picos_ind” y “picos_frec” tras aplicar los conceptos de cercanía en tiempo y en
frecuencia. Asimismo, para visualizar el espectrograma resultante de la creación de
trayectorias durante el desarrollo de la implementación del código en MATLAB se tiene
como salida “YabsTrayectorias” para trayectorias aún no interpoladas, e
“YabsTrayectoriasInt” tras la interpolación.
En la figura 5.9, se muestra la matriz “trayectorias” resultante para “M01_p5dB.wav”
en los frames 11 a 20, en la que siendo comparada con la matriz “picos” de la figura 5.4,
se observa cómo los picos seleccionados en base al método de agrupación para formar
parte de la misma trayectoria han sido los más energéticos en cada caso. Asimismo, se
han obtenido once trayectorias, de las cuáles solo dos deberían corresponderse con
sibilancias, tal y como se observó en su espectrograma (figura 5.2). El resto serán
consecuencia de una alta energía de la respiración que deberá ser descartada en la fase
de detección de sibilancias del siguiente apartado.
48
Figura 5.9. Ejemplo de matriz "trayectorias" (frames 11 a 20) para M01_p5dB.wav
A continuación, siguiendo con los ejemplos anteriores, se muestra el espectrograma
resultante (figura 5.10) con las trayectorias para “M01_p5dB.wav” con una ventana de
Hanning de 512 muestras, solapamiento del 50% y una frecuencia de muestreo de 8000
Hz.
Figura 5.10. Espectrograma con trayectorias detectadas en “M01_p5dB.wav”
49
Respecto al ejemplo de la señal “M09_0dB.wav” en el que se aplica una ventana
de Hanning de 256 muestras, solapamiento del 50% y frecuencia de muestreo de 8000 Hz,
se observa la omisión de diferentes picos. Sin embargo, conociendo que, para estos
parámetros, cada bin en frecuencia se corresponde con 16 ms, para que por el efecto Haas
no provoque una división de la trayectoria, la separación entre picos no nulos que debe ser
inferior a 50 ms, lo que se corresponde con un máximo de hasta tres bins. Puesto que esto
se cumple, la interpolación permitirá la reconstrucción de la trayectoria.
Como ejemplo de ello, la figura 5.11 muestra la trayectoria correspondiente que
conocemos que corresponde por su ubicación en tiempo y frecuencia con la segunda
sibilancia de este audio.
Figura 5.11. Espectrograma con segunda sibilancia sin interpolar de “M09_0dB.wav”
A continuación, se muestra cómo se lleva a cabo el proceso de interpolación
gráficamente para los picos omitidos en la trayectoria correspondientes a los frames 484 y
485 y tiempos 7.728 y 7.744 segundos, respectivamente. En figura 5.12 y figura 5.13
también se presentan los nulos correspondientes a estas posiciones en las matrices
“trayectorias” y “trayectorias_frec”.
50
Figura 5.12. Matriz "trayectorias", frames 482 a 487
Figura 5.13. Matriz "trayectorias_frec", frames 482 a 487
En primer lugar, se interpolará la posición 484, a partir del valor anterior y posterior
más próximos a esta (en este caso las posiciones 483 y 486), aplicando las ecuaciones
(10) y (11) para frecuencia y energía (amplitud) en cada caso.
Figura 5.14. Resultado primera interpolación, matriz “trayectorias” frames 482 a 487
Figura 5.15.Resultado primera interpolación, matriz “trayectorias_frec” frames 482 a 487
A continuación, aplicando de nuevo la interpolación para la posición 485 a partir de
los valores de las posiciones 484 (ya interpolada) y 486, se completan los nulos de la
trayectoria detectada (figura 5.16 y figura 5.17). Mediante la sucesiva búsqueda de las
51
posiciones en las que las trayectorias están incompletas y realizando el mismo proceso, se
obtiene la trayectoria completa tal y como se presenta en la figura 5.18.
Figura 5.16. Resultado segunda interpolación, matriz "trayectorias" frames 482 a 487
Figura 5.17. Resultado segunda interpolación, matriz "trayectorias_frec” frames 482 a 487
Figura 5.18. Espectrograma con segunda sibilancia interpolada de “M09_0dB.wav”
Por último, en la siguiente figura (figura 5.19), se representan las trayectorias
finales. Nuevamente, se observan picos que han formado distintas agrupaciones por su
52
cercanía tanto en tiempo como en frecuencia y por ello siguen formando parte de las
posibles trayectorias candidatas a sibilancias. No obstante, esto deberá resolverse en la
etapa final de la detección descrita en el siguiente apartado.
Figura 5.19. Espectrograma con trayectorias detectadas en “M09_0dB.wav”
5.1.1.4 Detección de sibilancias
Las sibilancias, como ya se ha ido comentando en apartados anteriores, presentan
continuidad en el tiempo, que en función de las fuentes consultadas será como mínimo 80,
100 o 250 ms. En el presente trabajo, puesto que se trata de una monitorización continua
de las sibilancias que ocurran durante la noche y puedan no ser detectadas durante una
auscultación tradicional en la consulta médica, resulta una herramienta interesante para
aquellos casos más graves que necesiten de una atención rápida tras la vista de los
resultados. Dado que la gravedad de las sibilancias está relacionada con su sonoridad y
su duración temporal, se perseguirá la detección de sibilancias con una duración mínima
de 250 ms [7] en la banda de 100 a 1000 Hz [5].
Por tanto, este código desarrollado en “DeteccionSibilancias.m” tendrá como
parámetros de entrada “toy”, “foy”, “trayectorias” y “trayectorias_ind”. A partir de
“trayectorias” se buscará el número de valores no nulos por trayectoria (por filas), lo que
53
coincidirá con las posiciones de la trayectoria en cuestión. De esta forma, con el frame
(columna) inicial y final donde se encuentra la trayectoria, obtendremos la duración de la
misma, determinando una trayectoria candidata a sibilancia si esta es mayor a 250 ms. En
caso afirmativo, se calcula la frecuencia fundamental como la media de la frecuencia en
todos sus frames. Si esta se encuentra en el rango de 100 a 1000 Hz, la trayectoria será
considerada sibilancia.
Finalmente, esta función devolverá tres matrices: “sibilancias”, “sibilancias_info” e
“YabsSibilancias”.
“sibilancias”: compuesta por tantas filas como sibilancias se hayan
detectado y el número de columnas coincidente con el número de frames.
Por tanto, contendrá las filas de “trayectorias” que se correspondan con
sibilancias.
“sibilancias_info”: contiene información relevante sobre las sibilancias tras
la etapa de detección. Estará formada por un número de filas igual al número
de sibilancias detectadas y cuatro columnas. Las dos primeras contendrán
el frame inicial y final de ocurrencia de la sibilancia en cuestión, la tercera
almacenará su duración en tiempo y la cuarta su frecuencia fundamental