Resolución de bits y muestreo de audio en MATLAB

Cuando grabamos audio con el micrófono del computador para procesarlo en MATLAB aparecen dos parámetros fundamentales: la frecuencia de muestreo (cuántas muestras por segundo se toman) y la resolución en bits (con cuántos niveles se representa cada muestra). En este post te explico qué significa cada uno, qué valores se usan en la práctica, cómo configurarlos en MATLAB y en Windows, y cómo calcular el tamaño de una grabación.

Frecuencia de muestreo: cuántas fotos por segundo

Una señal de audio es continua, pero el computador solo puede guardar números. La tarjeta de sonido "toma una foto" del voltaje del micrófono muchas veces por segundo. Esa cantidad es la frecuencia de muestreo fs, medida en hertz (muestras por segundo).

La regla que manda aquí es el teorema de Nyquist: para reconstruir una señal sin distorsión, fs debe ser mayor que el doble de la frecuencia más alta que contiene. Si muestreamos a 8000 Hz, solo podemos representar frecuencias de hasta 4000 Hz.

fsFrecuencia máxima (fs/2)Uso típico
8000 Hz4 kHzTelefonía, voz básica
16000 Hz8 kHzReconocimiento de voz
44100 Hz22,05 kHzCD de audio, música
48000 Hz24 kHzVideo, DVD, audio profesional
96000 Hz o más48 kHz o másEstudios de grabación

En MATLAB, la función audiorecorder usa por defecto 8000 Hz, 8 bits y un canal si no le indicas otra cosa. Por eso es común pensar que 8000 Hz es "lo mínimo", aunque en realidad es solo el valor por defecto: puedes elegir otros valores siempre que tu tarjeta de sonido los soporte.

Resolución en bits: cuántos niveles por muestra

Cada muestra se convierte en un número entero. Con N bits hay 2N niveles posibles:

  • 8 bits → 256 niveles
  • 16 bits → 65 536 niveles
  • 24 bits → 16 777 216 niveles

Más bits significan menos ruido de cuantización y mayor rango dinámico (la diferencia entre el sonido más fuerte y el más suave que se puede registrar). Una aproximación útil es:

Rango dinámico ≈ 6,02 · N + 1,76 dB

  • 8 bits ≈ 50 dB (se nota el ruido de fondo)
  • 16 bits ≈ 98 dB (calidad de CD)
  • 24 bits ≈ 146 dB (en teoría; en la práctica lo limita el ruido del micrófono y de la electrónica)

Lo que ofrece la tarjeta de sonido en Windows

En Windows puedes ver qué formatos acepta tu micrófono en Configuración de sonido → Propiedades del dispositivo de grabación → Opciones avanzadas. En el equipo de la imagen, las opciones van de 16 bits a 24 bits y de 44 100 Hz a 192 000 Hz:

Ese formato es el que usa Windows cuando el dispositivo está en "modo compartido". Si MATLAB pide un formato diferente (por ejemplo, 8000 Hz), el sistema normalmente convierte la señal de forma automática.

Cómo grabar en MATLAB con una resolución concreta

fs     = 44100;   % frecuencia de muestreo (Hz)
nBits  = 16;      % resolución: 8, 16 o 24
canales = 1;      % 1 = mono, 2 = estéreo

rec = audiorecorder(fs, nBits, canales);
disp('Habla ahora (3 segundos)...');
recordblocking(rec, 3);
disp('Fin de la grabación');

x = getaudiodata(rec);          % muestras en double entre -1 y 1
t = (0:length(x)-1) / fs;       % eje de tiempo en segundos
plot(t, x); grid on;
xlabel('Tiempo (s)'); ylabel('Amplitud');

audiowrite('mi_voz.wav', x, fs, 'BitsPerSample', nBits);
sound(x, fs);                   % reproducir

Si quieres saber qué dispositivos de entrada ve MATLAB, usa audiodevinfo.

Ejemplo: ¿cuánto pesa una grabación?

El tamaño de un archivo WAV sin comprimir se calcula así:

bytes = fs × (bits / 8) × canales × segundos

  • 10 s, 8000 Hz, 8 bits, mono: 8000 × 1 × 1 × 10 = 80 000 bytes ≈ 78 KB
  • 10 s, 44 100 Hz, 16 bits, estéreo: 44 100 × 2 × 2 × 10 = 1 764 000 bytes ≈ 1,7 MB
  • 10 s, 96 000 Hz, 24 bits, estéreo: 96 000 × 3 × 2 × 10 = 5 760 000 bytes ≈ 5,5 MB

Por eso, para prácticas de procesamiento de voz, 8 kHz o 16 kHz a 16 bits en mono suele ser suficiente y mantiene los vectores pequeños.

Errores comunes

  • La grabación sale en silencio: el micrófono está silenciado o MATLAB usa otro dispositivo. Revisa los permisos de micrófono de Windows y el ID del dispositivo con audiodevinfo.
  • La voz suena "metálica" o sin agudos: la frecuencia de muestreo es muy baja (8 kHz recorta todo lo que pasa de 4 kHz).
  • Mucho ruido de fondo: grabaste con 8 bits o el nivel de entrada es muy bajo. Usa 16 bits y sube la ganancia en Windows sin llegar a saturar.
  • La señal está recortada (plana arriba y abajo): la ganancia es muy alta; bájala hasta que los picos queden por debajo de ±1.

Preguntas frecuentes

¿Es mejor siempre grabar a 24 bits y 192 kHz?

No necesariamente. Los archivos son mucho más grandes y el cálculo es más lento. Para voz y prácticas de laboratorio, 16 bits y 16–48 kHz son más que suficientes.

¿Qué pasa si muestreo por debajo de Nyquist?

Aparece aliasing: las frecuencias altas "se disfrazan" de frecuencias bajas que no existían. Por eso las tarjetas de sonido incluyen un filtro antialiasing antes del convertidor.

¿Por qué getaudiodata devuelve valores entre −1 y 1?

Porque por defecto convierte las muestras enteras a tipo double normalizado. Con getaudiodata(rec,'int16') obtienes los valores enteros originales.

Con la grabación lista, el siguiente paso es analizar sus frecuencias: lo explico en adquisición de audio y FFT en MATLAB. Y si quieres generar señales de prueba, mira onda senoidal en MATLAB.

Conclusión

La frecuencia de muestreo define qué tan agudos pueden ser los sonidos que captas (hasta fs/2) y la resolución en bits define cuánto ruido y rango dinámico tiene cada muestra. En MATLAB los controlas con audiorecorder(fs, nBits, canales), y con la fórmula del tamaño sabrás de antemano cuánta memoria ocupará tu grabación.

No hay comentarios