Procesamiento de audio: muestreo y aliasing

En esta entrada exploramos el efecto del muestreo y el aliasing en señales de audio. Veremos cómo la frecuencia de muestreo influye en la calidad del sonido y cómo el submuestreo puede provocar la pérdida o distorsión de información en la señal.

📉 ¿Qué es el muestreo?

El muestreo consiste en tomar muestras discretas de una señal continua en el tiempo. Según el teorema de Nyquist-Shannon, la frecuencia de muestreo debe ser al menos el doble de la frecuencia máxima presente en la señal original para evitar aliasing.


import numpy as np
from scipy.signal import resample
import matplotlib.pyplot as plt

# Cargar señal
fs = 8000  # Frecuencia original
t = np.linspace(0, 1, fs)
signal = np.sin(2 * np.pi * 1000 * t)  # Señal de 1 kHz

# Submuestreo a 2000 Hz
num_samples = int(len(t) * 2000 / fs)
resampled = resample(signal, num_samples)

plt.figure(figsize=(8, 4))
plt.plot(t, signal, label="Original (8 kHz)")
plt.plot(np.linspace(0, 1, num_samples), resampled, label="Muestreada (2 kHz)")
plt.legend()
plt.xlabel("Tiempo [s]")
plt.ylabel("Amplitud")
plt.title("Efecto del muestreo")
plt.show()
    

🎧 Efecto del aliasing

El aliasing ocurre cuando una señal contiene componentes de frecuencia mayores que la mitad de la frecuencia de muestreo. Estas frecuencias se reflejan hacia el rango audible, generando sonidos falsos o distorsionados.

Ejemplo visual de aliasing en señales de audio
Ejemplo del efecto del aliasing en una señal sinusoidal.

📊 Visualización espectral

Podemos visualizar el efecto del aliasing usando un espectrograma:


from scipy.signal import spectrogram

f, t, Sxx = spectrogram(signal, fs)
plt.pcolormesh(t, f, 10*np.log10(Sxx))
plt.title("Espectrograma de la señal original")
plt.ylabel("Frecuencia [Hz]")
plt.xlabel("Tiempo [s]")
plt.show()
    

Al reducir la frecuencia de muestreo, el espectrograma muestra cómo se pierden las componentes altas, o aparecen nuevas frecuencias falsas.

⬅ Volver al inicio