La lección anterior demostró el aliasing con matemáticas y gráficas. Ahora vamos a oírlo. El navegador incluye la Web Audio API, un motor de audio digital que sintetiza y reproduce sonido en tiempo real. Su núcleo es el AudioContext, que expone una propiedad sampleRate — casi siempre 44100Hz — que fija la frecuencia de muestreo de todo lo que suene. Su frecuencia de Nyquist es, por tanto, 22050Hz: cualquier componente por encima de ese valor no puede representarse honestamente y se plegará.
Por qué un oscilador ingenuo aliasea
Generar un tono puro parece trivial: rellenar un búfer con s[n]=sin(2πfn/fs). Y para frecuencias bajas funciona perfecto. Pero si pedimos una frecuencia por encima de la de Nyquist, esa misma fórmula produce muestras indistinguibles de las de un tono más grave. Con fs=44100Hz, un tono "de 30kHz" generado ingenuamente no suena a 30kHz (que además sería inaudible): se pliega a ∣30000−44100∣=14100Hz, un silbido agudo pero perfectamente audible que nunca pedimos.
El siguiente fragmento genera y reproduce un tono a partir de una frecuencia dada; súbela por encima de 22050Hz y el tono, en lugar de desaparecer, "baja" de nuevo al rango audible:
const ctx = new AudioContext();
const fs = ctx.sampleRate; // típicamente 44100 Hz
const nyquist = fs / 2; // 22050 Hz
function tono(frecuencia, segundos = 1) {
const N = Math.floor(fs * segundos);
const buffer = ctx.createBuffer(1, N, fs);
const datos = buffer.getChannelData(0);
for (let n = 0; n < N; n++) {
datos[n] = 0.2 * Math.sin(2 * Math.PI * frecuencia * n / fs);
}
const fuente = ctx.createBufferSource();
fuente.buffer = buffer;
fuente.connect(ctx.destination);
fuente.start();
// frecuencia audible real (alias si supera la de Nyquist):
const aparente = frecuencia <= nyquist
? frecuencia
: Math.abs(frecuencia - fs);
console.log(`pedida ${frecuencia} Hz -> se oye ${aparente} Hz`);
}
tono(14100); // suena a 14100 Hz (correcto)
tono(30000); // ¡también suena a 14100 Hz, por aliasing!
Los dos tonos, uno legítimo y otro aliaseado, producen la misma altura: la prueba auditiva de que el submuestreo no distingue entre ambos. Los sintetizadores profesionales evitan esto con osciladores band-limited (BLIT, PolyBLEP) que recortan los armónicos por encima de Nyquist antes de que puedan plegarse.
1 de 6
El laboratorio Muestreo de audio te deja fijar la frecuencia de un tono y la frecuencia de muestreo y pulsar "reproducir": cuando subas el tono más allá de la frecuencia de Nyquist oirás cómo, en vez de callar, desciende de nuevo al rango audible. Es el aliasing convertido en experiencia sonora.
Laboratorio: Muestreo de audio: escucha el aliasing con Web Audio