Grupo 1

Grupo 1

de Franco Bostal -
Número de respuestas: 5

Buenas! ¿Cómo andan? 

En la consulta de la clase pasada les compartía el la problemática que me surgió con uno de los tipos de vocalizaciones. 

Este es el plot de un vocalización proveniente de un audio que ya tenia, en rojo está la f0 y en azul la fd. Tal vez la fd se pueda arreglar (vimos en clase como estimar los puntos mal estimados con na.approx), pero la f0 está más complicada. 


Este es el plot de una vocalización sacada de un audio de Xenocanto.


También podría hacer el mismo trabajo (na.approx), pero es (demasiado) artesanal.

La pregunta que tengo es la siguiente: ¿puede ser que esta vocalización sea un sonido que se va acercando al "ruido blanco", en donde no hay preponderancia de una frecuencia, sino que la energía tiende a estar distribuida en muchas frecuencias?

Aunque el audio de xenocanto parece dar un mejor resultado (me parece a mi), no es mucho mejor. El otro día hablábamos de que tal vez falte información de las freq más bajas, pero no creo que sea esta la razón; les dejo un plot de la vocalización de xenocanto sin filtro:


Lo que se me ocurre es poder determinar la f0 y la fd "a ojo", mirando el espectrograma (algo que también habíamos hablado en la consulta). ¿Qué opinan?

Saludos

Fran

En respuesta a Franco Bostal

Re: Grupo 1

de Franco Bostal -
Les dejo un par de secuencias

#espectrograma filtrado
spectro(grave3fil, wl=2048, ovlp=85, collevels=seq(-40,0,1), flim=c(0,4))
#f0
G3ff<-fund(grave3fil, wl=1024, ovlp=85, fmax=850, 
           plot=FALSE, threshold = 10)
points(G3ff, col='red', pch=19)
#fd
G3df <- dfreq(grave3fil, ovlp=85, wl=1024, clip=0.1, 
              bandpass = c(1000, 3000), plot=FALSE)
points(G3df, col='blue', pch=19)
En respuesta a Franco Bostal

Re: Grupo 1

de Martin Rocamora -
Hola Franco. Sí, me acuerdo perfecto de que la vocalización grave era bien problemática. El archivo de Xenocanto tiene un comportamiento muy similar al tuyo, por lo que se confirma que no es un problema de tus grabaciones. Qué bueno que seguiste la sugerencia de Lucía y pudiste confirmarlo.

Respecto a tu pregunta. Claramente el sonido de la vocalización no es puramente tonal, sino que tiene una componente de ruido importante. Eso se hace evidente no solo en el espectrograma sino también en la forma de onda. Recuerdo que en el tramo de la vocalización aparece un comportamiento bien ruidoso en la forma de onda. Pero eso no quita que haya un componente tonal en el sonido y que valga la pena tratar de identificar su frecuencia fundamental.

Además del ruido hay otra dificultad. Si la serie armónica estuviera completa, uno debería ver más componentes tonales en la banda de frecuencia debajo de 1 kHz y en la banda entre 1 kHz y 1.5 kHz. Pero en esas bandas parece que los componentes están muy atenuados y no es posible distinguirlos. Eso se puede deber a que el mecanismo de producción de sonido tenga anti-resonancias en esas regiones de frecuencia. Suena razonable, pensando en que puede resultar difícil para un animal de las dimensiones del loro generar frecuencias tan bajas. A simple vista, en ambas grabaciones, la frecuencia fundamental de la serie parece estar en el entorno de los 100 Hz (ver comentarios a continuación).

Mi sugerencia es la siguiente. En primer lugar trataría de mejorar la estimación de frecuencia dominante, que coincide con uno de los componentes armónicos. En segundo lugar, haría una serie de gráficas restringiendo las frecuencias hasta 2 kHz. Al parecer hay un componente armónico en el entorno de 1 kHz. Por lo que trazaría una línea horizontal sobre 1 kHz, y algunas otras líneas horizontales en intervalos de 100 Hz (por ej. 800, 600, 500, 200 y 100 Hz). Eso nos va a dar una mejor idea de a qué armónico corresponde cada componente de frecuencia. Hay que recordar que la distancia en frecuencia entre dos armónicos sucesivos coincide con la frecuencia fundamental. ¿Cuánto es aproximadamente esa distancia para los componentes que están en torno a 1 kHz? ¿Y para los componentes en torno a 2 kHz? ¿Cuántos componentes parecen entrar entre 1 y 2 kHz? Finalmente consideraría los valores estimados de la frecuencia dominante. ¿A qué armónico corresponde la frecuencia dominante? ¿Son consistentes los valores de frecuencia dominante con la estimación de frecuencia fundamental? Con esas observaciones y algunas medidas sería posible deducir aproximadamente la frecuencia fundamental de la serie que forma parte del sonido.

Espero haber sido claro. La seguimos.

Saludos
En respuesta a Martin Rocamora

Re: Grupo 1

de Franco Bostal -
Martín
Creo que pude solucionar el problema.
Hice un análisis del espectral y, a ojo, fui probando valores de f0 para dividir por cada pico detectado:

#en un intervalo (quiero que se vean las 3 primeras freq armónicas bien)
spec.G5<-spec(Grave5, f=48000, from=0.13, to=0.16)
#detección de picos
fp.G5<-fpeaks(spec.G5, threshold = 0.15, freq=100) #freq=100 porque la fund está en torno a los 100 Hz
#veamoslo entre 0 y 10
fp.G5<-fpeaks(spec.G5, threshold = 0.15, freq=100, xlim=c(0,10))
fp.G5
#       freq       amp
#[1,] 0.900000 0.1712397
#[2,] 1.033333 0.2097062
#[3,] 1.166667 0.2647838
#[4,] 1.933333 0.8848011
#[5,] 2.066667 0.2721693
#[6,] 2.200000 0.7748684
#[7,] 2.333333 0.5352229
#[8,] 2.666667 0.2559464
#[9,] 2.833333 1.0000000
#[10,] 2.933333 0.2028395
#[11,] 3.233333 0.3029168
#[12,] 3.366667 0.2268818
#[13,] 3.500000 0.4224586
#[14,] 3.666667 0.2243622
#[15,] 3.833333 0.2015280
#[16,] 4.133333 0.2039790
#[17,] 4.533333 0.1830728
#[18,] 4.700000 0.4437322
#[19,] 5.033333 0.1821511
#[20,] 5.300000 0.2321690
#[21,] 5.633333 0.4607090
#[22,] 5.733333 0.5095206
#[23,] 5.866667 0.2123260

#parece que la fundamental esta en torno a los 0,133333 Kz
fp.G5[,1]/0.133333
#veamos en 0,03 (y vamos sumando 3 de a poco)
fp.G5[,1]/0.033333333
#[1]  27  31  35  58  62  66  70  80  85  88  97 101 105 110 115 124 136 141 151
#[20] 159 169 172 176
#la fundamental es 0.033333333 KHz

¿Qué te parece? Calcule la fd también con dfreq y coincidió con fpeaks ; con el indicio de que la fd está en torno a 2.833333  KHz, limite la función:
G5df <- dfreq(Grave5, ovlp=75, wl=1024, clip=0.1, 
              bandpass = c(2600, 2900), plot=FALSE)

Saludos