Tp-espectrograma
de PEREZ JUAN MANUEL - Buenas, tengo una preguntilla. Hay veces en que al usar specgram(), el resultado es una imagen casi completamente roja, como si hubiera una gran intensidad en todas las frecuencias. La profesora dió una explicación que no puedo recordar bien. Era acerca de que la función usa escala logarítmica en colores, y eso provoca este "error". La verdad es que no recuerdo cual es la explicación completa y correcta. Espero que alguien me pueda explicar nuevamente el concepto. Gracias!
![](https://campusold.fi.uba.ar/pluginfile.php/37913/mod_forum/attachment/17099/fig3a.jpg)
![](https://campusold.fi.uba.ar/pluginfile.php/37913/mod_forum/attachment/17099/fig3a.jpg)
Re: Tp-espectrograma
de PELLE PATRICIA ALEJANDRA - La verdad que la profesora no se acuerda demasiado qué fue lo que te dijo. La explicación completa es así: specgram hace dos cosas, primero calcula el espectrograma y después lo dibuja. Si vos no querés que dibuje, por ejemplo para hacer el gráfico como más te guste a vos, tenés que invocarlo así:
[B,f,t] = specgram(.... lo mismo de siempre... );
donde t y f son vectores que te van a servir para graficar, y B es la matriz del espectrograma, o sea una matriz que en sus columnas tiene cada una de las DFT calculadas (la mitad de la DFT, de 0 a Nfft/2). Si querés la podés graficar vos mismo, y sacarte la duda de si el problema es el logaritmo. Specgram cuando grafica hace esto (lo dice en el help)
imagecs(t,f,log(abs(B)))
vos podés hacer esto:
imagecs(t,f,abs(B))
pero en este caso te va a dar una imagen muy distinta, porque el logaritmo te cambia "la cara" de las cosas.
Si te da todo rojo, es porque tenés muchas amplitudes altas. O también puede ser que haya un -infinito en algún lugar. Si hacés el logaritmo de algo que vale cero, eso da -infinito, y entonces no le queda más remedio que dibujar todo el resto muy alto, o sea, te puede dar todo rojo. Si querés también podés dibujar así:
imagecs(t,f,log(abs(B+0.00001))),
que no cambia demasiado el gráfico como si lo hace la escala lineal, y te asegurás que nunca haya un cero por ahí dando vueltas. Espero que sea eso lo que te haya dicho antes. Saludos, nos vemos
Patricia
[B,f,t] = specgram(.... lo mismo de siempre... );
donde t y f son vectores que te van a servir para graficar, y B es la matriz del espectrograma, o sea una matriz que en sus columnas tiene cada una de las DFT calculadas (la mitad de la DFT, de 0 a Nfft/2). Si querés la podés graficar vos mismo, y sacarte la duda de si el problema es el logaritmo. Specgram cuando grafica hace esto (lo dice en el help)
imagecs(t,f,log(abs(B)))
vos podés hacer esto:
imagecs(t,f,abs(B))
pero en este caso te va a dar una imagen muy distinta, porque el logaritmo te cambia "la cara" de las cosas.
Si te da todo rojo, es porque tenés muchas amplitudes altas. O también puede ser que haya un -infinito en algún lugar. Si hacés el logaritmo de algo que vale cero, eso da -infinito, y entonces no le queda más remedio que dibujar todo el resto muy alto, o sea, te puede dar todo rojo. Si querés también podés dibujar así:
imagecs(t,f,log(abs(B+0.00001))),
que no cambia demasiado el gráfico como si lo hace la escala lineal, y te asegurás que nunca haya un cero por ahí dando vueltas. Espero que sea eso lo que te haya dicho antes. Saludos, nos vemos
Patricia