domingo, 10 de diciembre de 2017

Visualizaciones ad hoc de sonido con R

Cuando se utilizan herramientas estándar para realizar visualizaciones, por configurables que sean es fácil que no logremos plasmar al 100% con ellas nuestra idea original. Peor aún resulta caer en una estética identificable por falta de personalización; imaginas un gráfico de Excel base como portada de una publicación?.

En este corto artículo quería aprovechar un contacto inicial con el intrincado mundo del procesamiento de señales de audio con R, para hacer un par de visualizaciones ad hoc más a medida de lo que ofrecen las herramientas típicas.

Digo que es un mundo intrincado por la disparidad de paquetes preparados para tratar sonido, ninguno de los cuales me ha parecido lo bastante cómodo y completo como para obviar los demás: tuneR, seewave, sound, phonTools,... así que he acabado usando varios de ellos.

Como forma de onda de prueba he escogido el canto de un pájaro (Zonotrichia capensis), incluído como 'tico' en el paquete seewave. El muestreo está hecho a 22KHz y 16 bits.


Si dibujamos el oscilograma completo de la forma habitual, con este nivel de zoom tenemos una sucesión de manchas.



Vamos a mejorar la representación de la forma de onda incluyendo información enriquecida con un gradiente de intensidades. El color o densidad muestra la distribución de amplitudes, tanto positivas como negativas, que se producen en el intervalo temporal que genera cada línea.



Con el gráfico tradicional los máximos de cada tramo enmascaran el reparto de amplitudes, permitiendo ver solo la envolvente del sonido. Esta nueva imagen no sólo es visualmente más atractiva sino que aporta información extra.

A continuación con la función spectrogram() de phonTools vemos como varía el contenido en frecuencia del sonido con el tiempo. Se dibuja la evolución enventanada de la FFT con el sempiterno mapa de colores 'Jet'.



Es notable la pureza espectral del canto del ave, con un único armónico de relevancia como es habitual en los sonidos de tipo silbo. El pajarillo hizo tres modulaciones en frecuencia descendente y una final semi ascendente.

Sofisticamos el espectrograma con una representación en falso 3D (waterfall) de aire analógico/retro, situando el eje temporal en vertical. La información numérica sigue presente pero se expresa de forma más minimalista que con las gráficas de ejes clásicos.



El coloreado de las propuestas mejoradas se ha hecho con curvas en Photoshop. No he vectorizado el código porque los bucles anidados ya se ejecutan muy rápido.

~~~

El estilo del nuevo espectrograma posiblemente resulte familiar porque aparecía en la portada del disco 'Unknown pleasures' de Joy Division, que mostraba pulsos sucesivos del primer púlsar descubierto pocos años antes.



El tratamiento puede en realidad aplicarse a cualquier imagen, llegando a obtener resultados curiosos si se usa sobre fotografías. En alta resolución haciendo clic en la imagen.



Quizá dedique un artículo más profundo al tema del audio con R, en particular hacer algunos ejercicios de síntesis FM, aplicar envolventes ADSR y tratamiento del sonido como una serie temporal.

~~~

Repositorio con el código R y archivos auxiliares: GitHub.

2 comentarios:

  1. buenas tardes quisiera aprender a graficar espectros de cantos con R
    tienes algún post al respecto. gracias

    ResponderEliminar
    Respuestas
    1. Si te vale el canto de un grillo, éste:

      https://www.elmomentodecisivo.com/2018/07/analisis-del-canto-de-un-grillo-con-r.html

      Salu2!

      Eliminar

Por claridad del blog, por favor trata de utilizar una sintaxis lo más correcta posible y no abusar del uso de emoticonos, mayúsculas y similares.