Sonic Visualiser conoce a Toretto y su familia de cosenos

misc notes

Recuerdo que una vez preguntaron (realmente lo imaginé) qué era eso de las ventanas que aparecen en Sonic Visualiser durante el análisis del espectro. Desde luego, me vino a la mente, la primera vez que intenté comprender de qué va esto de las ventanas en audio y por supuesto, el enfoque de tratar de meter cosas en iteraciones y bucles, como todo músico que adora los patrones.

Muchas ventanas (Hann, Blackman, Nuttall, etc) son un combinado de chifa de cosenos.

Escucha la Ventanita silenciosa de los Embajadores Criollos (versión 5.2.1). Ve al menú File y luego hazle click en Preferences y selecciona la pestaña de temible nombre Analysis:

Sonic Visualiser - Preferences

Para analizar audio digital, los algoritmos de DSP no toman toda la señal de golpe, sino que la dividen en pequeños bloques de queso llamados frames.

El problema es que al cortar esos bloques álficos aparecen discontinuidades y abruptos en los extremos. Como la DFT interpreta cada frame como un período de la señal periódica (qué repetitivos sonamos), esos saltos generan un problemilla fregado llamado fuga espectral, que consiste, de modo periódico, en la energía que se derrama hacia frecuencias del vecindario.

Preludio

Por otra parte, hay un primer duelo en la Panamericana: la resolución temporal, qué tan rápido detectamos los cambios en el motor, contra la resolución frecuencial, qué tan cerca podemos estacionar dos frecuencias sin que choquen.

En otras carrocerías, lo que pasa es que un frame largo mira más carretera y permite separar mejor las frecuencias, pero reacciona más lento ante los cambios. Un frame corto toma curvas más rápido, aunque pierde detalle para distinguir vecinos cercanos.

Además, los frames suelen solaparse (overlap). Por ejemplificar, una FFT de 2048 muestras puede avanzar 512 o 1024 muestras antes de tomar la siguiente curva. Así evitamos dejar huecos en la pista. Pero esa carrera la dejamos para otra vuelta.

Para resolver el problema es que se idearon las ventanas y si te pones a leer (hay muchas, pero yo voy a tocar solo algunas que penden de SV) y parten de una idea muy antigua en trigonometría: el coseno. Y sí, estamos en Familia como en rápidos y furiosos.

El coseno

Para este par de vueltas, si has estado muy alejado de trigonometría deberás repasar u ojear algo básico. Por ejemplo, el curso corto de cálculo Serge Lang. Recordamos que cos(α)=xR=xx2+y2\cos (\alpha) = \frac{x}{R} = \frac{x}{\sqrt{x^2 + y^2}} , donde RR es la distancia desde el origen R2\mathbb{R}^2 hasta el punto (x,y)(x,y), y xx es obviamente la coordenada en el eje de abscisa.

Normalmente nos preguntaremos ¿por qué no hacemos las cosas con seno envés de coseno?. La respuesta fácil es, claro, una es un desfase de la otra. También es un buen ejercicio matutino antes de un tamalito, reescribir en términos de seno lo que veremos ahora. Recordamos por el momento, que por ahí hay una identidad que rapea 1cos(2x)=2sin2(x)1- \cos(2x) = 2 \sin^2(x). En un toque respondemos su rima.

Listo, es menester continuar la travesía de ultraventanal.

Necesitamos unos coeficientes, primero. Es simple, a0,a1,,awa_0, a_1, \ldots, a_w serán números reales (a gusto del comensal). Y nuestros ingredientes secretos son unas pizcas de armónicos cosenoidales:

cos(2πnN1),cos(4πnN1), \cos \left(\frac{2 \pi n}{N-1}\right), \cos \left(\frac{4 \pi n}{N-1}\right), \ldots

Toca hablar de la totalidad de puntos en las muestras, a este número (es fijo por si acaso) lo denotaremos como NN, y cada uno de los puntos que van avanzando serán nn, es decir los índices.

Lo único que nos faltaba es armar por vez primera el sandwich Ω\Omega de 4 pisos:

Ω(n)=a0a1cos(2πnN1)+a2cos(4πnN1)a3cos(6πnN1)+a4cos(8πnN1).\begin{align*} \Omega(n) &= a_0 - a_1 \cos\left(\frac{2\pi n}{N-1}\right) \\ & + a_2 \cos\left(\frac{4\pi n}{N-1}\right) \\ & - a_3 \cos\left(\frac{6\pi n}{N-1}\right) \\ & + a_4 \cos\left(\frac{8\pi n}{N-1}\right). \end{align*}

La gran familia

Muy probablemente ves que sigue un patrón de alternancia. ¿No se te hace curioso que estamos jugando a cambiar coeficientes? Gran parte de ventanas consiste en ello y es lo que calibra el compromiso entre fuga y resolución.

Bueno, sucintamente lo podemos amalgamar en una sola pieza como

Ω(n)=a0+t=1w(1)tatcos(2tπnN1).\begin{equation} \Omega(n) = a_0 + \sum_{t=1}^w (-1)^{t}a_t \cos \left(\frac{2 t \pi n}{N-1}\right). \end{equation}

Tranquilo, ese ww, es la cantidad de términos de nuestra ventana, no exageremos con w100w \ge 100. Esta es la evolución general, el ancestro de toda la familia, nuestro motor V100V-100 del Dodge de los 70s.

Un filósofo dijo que los autos tienen el mismo chasis, pero cambia cómo repartimos los HP entre distintos armónicos.

En fin, ya nos hicimos con la pieza de museo prehistórico (¿qué falta de respeto no?), volveremos sobre ella luego.

Hann de rápidos y no furiosos con su sandwich de dos pisos

Veamos el inicio de la saga Ω(n)=1\Omega(n) = 1, aquí pasó todo: 0nN10 \le n \le N-1 . Esta ventana es conocida como rectangular y todas las demás vienen despues de ella (realmente no porque no es coseno, pero es útil tomarla como punto de partida). Lo que hace es simplemente dejar intacta la amplitud de cada frame.

Por ejemplo, una muestra de audio puede tener N=2048 puntos, pero nosotros la veremos como N=9N = 9 para visualizar el comportamiento de la ventana. La primera ventanita es Hann. El nn es la posición dentro de la muestra. Necesitamos evaluar entonces para nn desde 00 hasta N1N-1:

Ω(n)=12(1cos(2πn8)).\Omega(n) = \frac{1}{2} \left( 1 - \cos \left(\frac{2 \pi n}{8} \right) \right).

Soltaré a continuación la tabla de la iluminación (usa tu Casio o tu lápiz):

Sample index nnCosine term cos(2πn8)\cos(\frac{2\pi n}{8})Hann Window Ω(n)\Omega(n)
00110.0000.000
110.7070.7070.1460.146
22000.5000.500
330.707-0.7070.8540.854
441-11.0001.000
550.707-0.7070.8540.854
66000.5000.500
770.7070.7070.1460.146
88110.0000.000

Observa la imagen arriba, en n=0n=0 y n=8n=8 son cero y el centro es exactamente el máximo 11. Bien, lo que hará esta ventana es multiplicar la señal original punto por punto.

xΩ(n)=xorigins(n)Ω(n)x_{\Omega}(n) = x_{\text{origins}}(n) \Omega(n)

Ese origins fue por el juego que debes adivinar.

Así, en el centro la señal permanece inalterada, en los bordes se va a reducir mucho y en los extremos se evapora como agua frente al metal al rojo vivo.

Por cierto, no estaré pegando más ventanas desde Sonic Visualiser, hazlo tú y observa la previsualización de lo que hacen. Para muestra un botón de la familia.

Antes de cerrar este apartado, respondemos al verso coseno. Por la identidad que rapea, sea 12(1cos(2x))\frac{1}{2}\left(1 - \cos(2x) \right), deducimos que 12(2sin2(x))\frac{1}{2} \left(2 \sin^2 (x) \right), que es igual a sin2(x)\sin^2(x). Entonces Hann dice

Ω(n)=sin2(πnN1),\Omega(n) = \sin^2 \left( \frac{\pi n}{N-1} \right),

con lo que la batalla de gallos ha terminado.

Más miembros de la familia que no conducen autos

Faltó comunicar con algo más de fortuna el por qué tanto afán con las ventanas. Bueno, lo que cambia a primera vista luego de hacerle rayos x con una FFT a una señal, son los lóbulos, la repartición de la cuenta.

El lóbulo principal (el centro de Lima, o más específico, el Cerro San Cristóbal, es decir, alrededor de la frecuencia original) si es ancho, las frecuencias cercanas en Hertz no son tan distinguibles, si por el contrario es más fino, hay mejor resolución para ver las frecuencias que están bastante pegadas.

Después, tenemos los lóbulos laterales, las ondulaciones es cuando se desparrama el Huaycoloro que dijimos arriba. Estás en el camino oscuro de la fuerza, la fuga de Bach en fantasmas. En esta familia, la síntesis ventanal-proteica viene así:

VentanaLóbulo principalLóbulos lateralesResolución frecuencialFuga espectral
RectangularMuy estrechoAltosExcelente resolución en frecuencia.Mucha fuga espectral.
HannMás anchoBajosBuen equilibrio entre resolución y suavizado.Reduce considerablemente la fuga espectral.
HammingSimilar a HannMás bajosResolución similar a Hann.Menor fuga espectral que Hann.
BlackmanMás anchoMucho más bajosMenor resolución en frecuencia.Espectro mucho más limpio.
Blackman-HarrisMuy anchoExtremadamente bajosBaja resolución en frecuencia.Fuga espectral mínima.
NuttallMuy anchoExtremadamente bajosBaja resolución en frecuencia.Excelente supresión de la fuga espectral.

(Esas anchuras se parecen un poco a las clases de Tailwind para uppercase, solo quería decirlo).

Tiempo versus Frecuencia del Dogde Charger

Antes de proseguir con la pintura, en SV hay dos previsualizaciones, a la izquierda está en el dominio del tiempo (V /time), y la derecha el dominio de la frecuencia, también ves como (dB / freq). Lo que hablamos de lóbulos nos referimos a la derecha.

Si comparamos Hann de arriba con la ventana Nuttall de aquí:

Sonic Visualiser - Nuttall window Vemos que el pico principal es más ancho en frecuencia. Los lóbulos laterales son muchísimo más bajos. Cosa que ocurre al revés en Hann, donde el pico principal es más estrecho en frecuencia y los lóbulos laterales son más altos.

  • lóbulos laterales más bajos implica menos fuga espectral.
  • lóbulo principal más ancho implica menor resolución frecuencial.

Dependiendo si quieres ganar la carrera contra Brian O’Conner o Dominic Toretto, el auto termina destruido por el tren. Algunas afinan el motor para separar frecuencias cercanas; otras prefieren una pista limpia reduciendo los fantasmas espectrales.

Los ingredientes de los pisos de la hamburguesa

Todo truco de magia que ves arriba tiene sus jueguitos. Yo simplemente te pasaré los coeficientes. Luego tú haces el tuning de colores a tu vehículo con carrocería por defecto:

Ventanaa0a_0a1a_1a2a_2a3a_3a4a_4
Hann0.50.50.50.5
Hamming0.540.540.460.46
Blackman0.420.420.500.500.080.08
Blackman-Harris0.358750.358750.488290.488290.141280.141280.011680.01168
Nuttall0.3557680.3557680.4873960.4873960.1442320.1442320.0126040.012604
Flat Top (Harris)1.01.01.931.931.291.290.3880.3880.0320.032

Los signos ±\pm están en la forma general, despreocúpate. La última Flat Top no se despliega en Sonic Visualiser (pertenece a otra familia de ajustes para medir amplitud precisa).

¿Para qué tantas?

Imaginemos que tenemos más coeficientes, unos w=100w = 100 cambios de palanca, te dejaré esta pregunta ¿Está bien manejar así en un carrera Drag? Bien, todo esto va de que una ventana es un conjunto de decisiones.

Los coeficientes a0,a1,,awa_0,a_1,\dots,a_w son los controles, si los movemos, influimos en el comportamiento:

Más términos coseno implica más control sobre los lóbulos laterales.

¿Cómo hacemos de mecánicos? Bueno, diseñar una ventana consiste en elegir (tin marín de don pingüe) esos coeficientes buscando un equilibrio entre limpieza espectral y capacidad de separar frecuencias. Un poder siempre tiene irresponsabilidad (es al revés o así no es).

En efecto, es cine. Pero todas son distintas formas de hacer el mismo sandwich. Primero tomamos la señal, multiplicamos por una forma suave y decidimos cuánto queremos sacrificar entre ver detalles finos o evitar que aparezcan fantasmas espectrales como Gasparín.

Y colorín colorado, este cuento aún está por comenzar. Ahora tengo que tunear mi Honda Civic del 2000 en miniatura, porque tuve fe.

Profile Photo of Edgar Delgado Vega
About the Author
Edgar Delgado Vega
Mathematical music geek, open-source tool builder, quirky thinker.
© 2026 Edgar Delgado Vega