
¿Alguna vez te has preguntado cómo las máquinas comprenden los matices del sonido? En mi publicación anterior, exploramos el análisis espectral y aprendimos cómo los espectrogramas revelan el contenido frecuencial de las señales de audio mediante la Transformada de Fourier de Tiempo Corto (STFT). Ahora, profundizaremos en representaciones espectrales avanzadas para el análisis de audio, incluyendo los espectrogramas de Mel, CQT y HCQT, y cómo pueden utilizarse para el análisis perceptual del audio y la extracción de características. Estas herramientas son esenciales para la construcción de modelos de aprendizaje automático en tareas como la clasificación de audio, un campo que actualmente estoy explorando.
¿Por qué la extracción de características?
El análisis espectral nos proporciona un mapa visual de las frecuencias del audio, pero para el aprendizaje automático, necesitamos características compactas y significativas que capturen la esencia del sonido. Los espectrogramas en bruto son ricos en información, pero su alta dimensionalidad los hace ineficientes para su uso directo en modelos. Al refinarlos en representaciones perceptualmente relevantes o musicalmente significativas, podemos extraer características alineadas con la forma en que escuchamos o interpretamos el audio. Esto es crucial para aplicaciones como la clasificación de géneros, la detección de tono o el reconocimiento de sonidos ambientales.
Representaciones espectrales avanzadas
Vamos a explorar tres representaciones espectrales avanzadas que abordan las limitaciones de los espectrogramas basados en STFT: los espectrogramas de Mel, la Transformada de Q Constante (CQT) y la CQT Armónica (HCQT). Cada una de estas herramientas ofrece ventajas únicas para el análisis y la extracción de características de audio.
Espectrograma de Mel (MEL) y Espectrograma Log-Mel (LMS)
¿Qué son?
El espectrograma de Mel adapta la STFT a la escala de Mel, una escala perceptual del tono que refleja cómo los humanos perciben las diferencias de frecuencia (por ejemplo, somos más sensibles a cambios en frecuencias bajas). Comprime el eje de frecuencia en intervalos de Mel, reduciendo la dimensionalidad y priorizando la percepción auditiva. El espectrograma Log-Mel lleva esto más allá al aplicar una transformación logarítmica a la amplitud, imitando la respuesta logarítmica de nuestro oído al volumen.
¿Por qué utilizarlos?
- Relevancia perceptual: Se alinean con la audición humana, siendo ideales para el análisis de voz y música.
- Preparación para Machine Learning: Los espectrogramas Log-Mel son compactos y ampliamente utilizados como entrada para modelos de aprendizaje profundo.
Ejemplo en Python
```python
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
from google.colab import drive
# Montar Google Drive
drive.mount('/content/drive')
# Cargar audio
y, sr = librosa.load('/content/drive/My Drive/audio_files/sample.wav')
# Calcular espectrograma de Mel
S = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=128)
S_db = librosa.power_to_db(S, ref=np.max) # Espectrograma Log-Mel
# Graficar
plt.figure(figsize=(14, 5))
librosa.display.specshow(S_db, sr=sr, x_axis='time', y_axis='mel')
plt.colorbar(format='%+2.0f dB')
plt.title('Espectrograma Log-Mel de Violín')
plt.show()
```
- n_mels=128: Número de bandas Mel (ajustable según tus necesidades).
- Salida: Tiempo vs. frecuencia Mel, con el color representando la amplitud logarítmica.

Transformada de Q Constante (CQT)
¿Qué es?
La Transformada de Q Constante (CQT) es una alternativa a la STFT que usa una escala logarítmica de frecuencia, donde la resolución en frecuencia es constante con respecto a la frecuencia central (factor Q constante). A diferencia de la STFT, en la que el tamaño de la ventana es fijo, la CQT varía su tamaño de ventana: es más grande para bajas frecuencias y más corta para altas frecuencias.
¿Por qué utilizarla?
- Ventaja musical: Su escala logarítmica coincide con los intervalos de notas musicales (por ejemplo, octavas), lo que la hace perfecta para tareas relacionadas con el tono, como el reconocimiento de acordes o la transcripción musical.
- Mejor resolución: Captura detalles de bajas frecuencias (por ejemplo, notas de bajo) mejor que la STFT.
Ejemplo en Python
# Calcular CQT
C = librosa.cqt(y, sr=sr)
C_db = librosa.amplitude_to_db(abs(C), ref=np.max)
# Graficar
plt.figure(figsize=(14, 5))
librosa.display.specshow(C_db, sr=sr, x_axis='time', y_axis='cqt_note')
plt.colorbar(format='%+2.0f dB')
plt.title('Transformada de Q Constante de Violín')
plt.show()
Transformada de Constante Armónica Q (HCQT)
¿Qué es?
La Transformada de Constante Armónica Q (HCQT) extiende la CQT analizando estructuras armónicas. Calcula CQTs en múltiples armónicos (por ejemplo, frecuencia fundamental y sus sobretonos) y los apila en una representación tridimensional.
¿Por qué utilizarla?
- Aplicaciones relacionadas con el tono: HCQT sobresale en la separación del contenido armónico (por ejemplo, notas de piano) del ruido o elementos percusivos, ideal para la detección de tono o la separación de fuentes.
- Avance en investigación: Es avanzada y menos común, mostrando técnicas de vanguardia.
Nota sobre la Implementación
Librosa
no proporciona directamente HCQT (Transformada de Cuatroier Constante-Q Armónica), pero puedes aproximarla calculando manualmente las CQT para múltiplos armónicos o utilizando bibliotecas externas como nnAudio
. A continuación, se muestran ejemplos simplificados utilizando ambas bibliotecas:
Con Librosa
:
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# Cargar archivo de audio
y, sr = librosa.load('/content/drive/My Drive/audio_files/sample.wav', sr=22050) # Reemplaza con la ruta de tu archivo
hop_length = 512 # Número de muestras entre frames sucesivos
harmonics = [1, 2, 3] # Armónicos a analizar (fundamental + sobretonos)
# Calcular HCQT para el fundamental (h=1)
fmin = librosa.note_to_hz('C1') * 1 # Convertir la nota C1 a Hz (~32.7 Hz)
n_bins = 60 # Total de bins (5 octavas: 60/12 = 5)
# Verificar el límite de Nyquist (previene el aliasing)
nyquist_limit = fmin * (2 ** (n_bins / 12))
if nyquist_limit < sr / 2:
# Calcular la Transformada de Fourier Constante-Q
cqt = librosa.cqt(y, sr=sr, hop_length=hop_length,
fmin=fmin, n_bins=n_bins, bins_per_octave=12)
else:
raise ValueError("¡Límite de Nyquist excedido! Ajusta los parámetros.")
# Convertir la magnitud de CQT a decibelios (normalizado a la amplitud máxima)
cqt_db = librosa.amplitude_to_db(np.abs(cqt), ref=np.max)
# Generar el eje de frecuencia de CQT (escala logarítmica)
frequencies = librosa.cqt_frequencies(n_bins=n_bins, fmin=fmin, bins_per_octave=12)
# Graficar el espectrograma
plt.figure(figsize=(14, 5))
librosa.display.specshow(cqt_db, sr=sr, hop_length=hop_length,
y_axis='cqt_hz', x_axis='time', # Eje de frecuencia logarítmica
fmin=fmin, bins_per_octave=12,
vmin=-80, vmax=0) # Rango en dB y opcionalmente añadir , cmap='viridis'
plt.colorbar(format='%+2.0f dB', label='Amplitud (dB)')
plt.ylim(frequencies[0], frequencies[-1]) # Establecer límites del eje de frecuencia
plt.title('Violín Harmonic-CQT (Fundamental) - Librosa')
plt.xlabel('Tiempo (s)')
plt.ylabel('Frecuencia (Hz)')
plt.show()
Limitaciones:
- Tedious manual setup.
- No native harmonic stacking.
- Limited to CPU computation.
Para un cálculo eficiente de HCQT, utilizamos nnAudio
, una biblioteca basada en PyTorch que aprovecha la aceleración por GPU. Primero, instálala:
pip install nnAudio
Luego, ejecuta el siguiente código:
import torch
from nnAudio.features.cqt import CQT
import matplotlib.pyplot as plt
# Parámetros
sr = 22050 # Tasa de muestreo
hop_length = 512 # Tamaño del hop
n_bins = 60 # Número de bins de frecuencia (reducido para evitar problemas de Nyquist)
fmin = 32.7 # Frecuencia mínima (C1 en Hz)
harmonics = [1, 2, 3] # Armónicos a calcular
# Cargar audio (usando librosa)
y, _ = librosa.load("/content/drive/My Drive/audio_files/sample.wav", sr=sr)
# Convertir a tensor de PyTorch
y_tensor = torch.tensor(y).float()
# Calcular HCQT para cada armónico
hcqt = []
for h in harmonics:
cqt = CQT(sr=sr, hop_length=hop_length, n_bins=n_bins,
fmin=fmin * h, bins_per_octave=12, output_format='Magnitude')
cqt_output = cqt(y_tensor) # Forma: (1, n_bins, tiempo)
cqt_db = 20 * torch.log10(torch.clamp(cqt_output, min=1e-5)) # Evitar log(0)
hcqt.append(cqt_db)
# Graficar el armónico fundamental
if hcqt:
plt.figure(figsize=(14, 5))
plt.imshow(hcqt[0].squeeze().numpy(), aspect='auto', origin='lower', cmap='viridis', vmin=-80, vmax=0, interpolation='bilinear')
plt.colorbar(format='%+2.0f dB')
plt.title('Violín Harmonic-CQT (Fundamental) - nnAudio')
plt.xlabel('Tiempo')
plt.ylabel('Frecuencia (bins)')
plt.show()
Advantages
Aceleración por GPU: Cálculos más rápidos para conjuntos de datos grandes.
Soporte nativo para armónicos: Configuración de parámetros simplificada.
Integración con PyTorch: Compatibilidad directa con pipelines de aprendizaje profundo.


Los ejes están etiquetados de manera diferente, pero las configuraciones básicas de programación para graficar son las mismas.
¿Qué nos dicen estas representaciones?
- Mel/Log-Mel: Resalta frecuencias perceptualmente significativas (por ejemplo, formantes de voz o timbre musical).
- CQT: Revela la estructura musical (por ejemplo, transiciones de notas en una melodía).
- HCQT: Aísla patrones armónicos (por ejemplo, sobretonos de un acorde), distinguiendo sonidos afinados del ruido.
Estas características son más específicas que los espectrogramas STFT básicos, lo que las convierte en entradas poderosas para modelos de aprendizaje automático.
Reflexión
Explorar estas representaciones espectrales ha sido una experiencia transformadora para mí. Inicialmente, dependía mucho del STFT, pero descubrir los espectrogramas Mel me mostró cómo alinear el análisis con la percepción humana puede mejorar significativamente la precisión de la clasificación, algo que estoy probando actualmente con varios conjuntos de datos de audio. Implementar CQT fue una revelación por su precisión musical, aunque trabajar con HCQT llevó mis habilidades de programación al límite. Pasé horas revisando artículos de investigación y experimentando con el apilamiento armónico para hacerlo bien. Estos desafíos han profundizado mi comprensión de la extracción de características de audio y han aumentado mi entusiasmo por aplicar estas técnicas a modelos de aprendizaje automático.
Conclusion
Las representaciones espectrales como los espectrogramas Mel, CQT y HCQT nos llevan más allá de los espectrogramas básicos, ofreciendo características perceptualmente y musicalmente relevantes para el análisis de audio.
En esta publicación, hemos explorado representaciones espectrales avanzadas para el análisis de audio, incluyendo espectrogramas Mel, CQT y HCQT, y hemos visto cómo pueden usarse para el análisis de audio y la extracción de características. Estas herramientas nos llevan más allá de las formas de onda y los espectrogramas básicos, ofreciendo características esenciales para tareas de aprendizaje automático.
Recursos adicionales:
- Documentación de Librosa: librosa.org/doc
- nnAudio: nnAudio 0.2.0
- Deep Learning 101 for Audio-based MIR, ISMIR 2024 Tutorial por Geoffroy Peeters et al. (2024).
- Z. Rafii, “The Constant-Q Harmonic Coefficients: A timbre feature designed for music signals [Lecture Notes],” en IEEE Signal Processing Magazine, vol. 39, no. 3, pp. 90-96, mayo 2022, doi: 10.1109/MSP.2021.3138870.
- K. W. Cheuk, H. Anderson, K. Agres y D. Herremans, “nnAudio: An on-the-Fly GPU Audio to Spectrogram Conversion Toolbox Using 1D Convolutional Neural Networks,” en IEEE Access, vol. 8, pp. 161981-162003, 2020, doi: 10.1109/ACCESS.2020.3019084.