Haciendo prácticas con generadores de tonos en el DAW, y desempolvando lo aprendido en los años de universidad, estaba haciendo algunas reflexiones sobre las dificultades que entraña tratar con sonidos en software, donde todo son muestras y se pierde el ancho de banda de las señales originales (Nyquist,...).
Lo muestro con un ejemplo: quiero generar un tono de pulsos como base para luego aplicarle procesados. En el mundo analógico, con un ancho de banda de los circuitos casi ilimitado para la aplicación, es sencillo construir un oscilador que genere pulsos cuadrados abruptos de gran ancho de banda.
Si quiero programar este mismo tren de pulsos por software, no podemos generar muestras siguiendo pulsos a Vmax y Vmin alternativamente, porque corresponderían a una señal no filtrada paso bajo y por lo tanto el aliasing es terrible. Para programar un simple tren de pulsos cuadrados sin aliasing, tenemos que operar cogiendo hasta el armónico soportado por la frecuencia de muestreo usada; es decir que para generar la señal más simple y básica que existe en el mundo analógico, por software tenemos que hacer un montón de operaciones trigonométricas para obtener muestras libres de aliasing.
Éste es un tren de pulsos limitado en banda (lo he generado con un plugin muy simple que permite las dos opciones, limitado en banda y sin limitar: Tone Generator de Socalabs). Suena bien, a tren de pulsos cuadrados:
En cambio si usamos la opción de no limitarlo en banda (en las muestras puede verse que aquí simplemente oscilan entre Vmin/Vmax), la señal no sirve para nada porque está llena de aliasing y suena terrible:
Comparando espectros puede verse todo el aliasing que invade el espectro cuando las muestras siguen pulsos ideales sin un filtrado paso bajo previo:
Supongo que todo lo que digo es bastante obvio pero nunca me había parado a pensarlo y me hace concluir que programar audio por software, al tratarse en todo momento de muestras sujetas a la limitación del ancho de banda que nos da la frecuencia de muestreo usada, no debe ser un camino de rosas precisamente, sino que se tiene constantemente la espada de Nyquist encima. Alguna reflexión al respecto?
Salu2!
Lo muestro con un ejemplo: quiero generar un tono de pulsos como base para luego aplicarle procesados. En el mundo analógico, con un ancho de banda de los circuitos casi ilimitado para la aplicación, es sencillo construir un oscilador que genere pulsos cuadrados abruptos de gran ancho de banda.
Si quiero programar este mismo tren de pulsos por software, no podemos generar muestras siguiendo pulsos a Vmax y Vmin alternativamente, porque corresponderían a una señal no filtrada paso bajo y por lo tanto el aliasing es terrible. Para programar un simple tren de pulsos cuadrados sin aliasing, tenemos que operar cogiendo hasta el armónico soportado por la frecuencia de muestreo usada; es decir que para generar la señal más simple y básica que existe en el mundo analógico, por software tenemos que hacer un montón de operaciones trigonométricas para obtener muestras libres de aliasing.
Éste es un tren de pulsos limitado en banda (lo he generado con un plugin muy simple que permite las dos opciones, limitado en banda y sin limitar: Tone Generator de Socalabs). Suena bien, a tren de pulsos cuadrados:
En cambio si usamos la opción de no limitarlo en banda (en las muestras puede verse que aquí simplemente oscilan entre Vmin/Vmax), la señal no sirve para nada porque está llena de aliasing y suena terrible:
Comparando espectros puede verse todo el aliasing que invade el espectro cuando las muestras siguen pulsos ideales sin un filtrado paso bajo previo:
Supongo que todo lo que digo es bastante obvio pero nunca me había parado a pensarlo y me hace concluir que programar audio por software, al tratarse en todo momento de muestras sujetas a la limitación del ancho de banda que nos da la frecuencia de muestreo usada, no debe ser un camino de rosas precisamente, sino que se tiene constantemente la espada de Nyquist encima. Alguna reflexión al respecto?
Salu2!