Osciladores "bandlimited" vs "oversampling" ¿qué es mejor?

  • 1
cris'andt'emo
#1 por cris'andt'emo el 29/07/2014
Hola ti@s. Estoy haciendo prototipos de unos sintes en pure data y no sé que técnica es mejor para evitar el aliasing en las señales, si construirlas mediante tablas de ondas o hacer oversampling. ¿Alguien sabe qué es mejor y por qué? ¿Tendría sentido hacer oversampling tras una señal construida con una tabla de ondas o sería un gasto innecesario de recursos?

Gracias de antemano y saludos.
Subir
OFERTASVer todas
  • -26%
    AKAI MPC Key 61
    1.290 €
    Ver oferta
  • -35%
    Set de grabación completo de Focusrite
    184 €
    Ver oferta
  • beyerdynamic DT-770 Pro
    138 €
    Ver oferta
Nox
#2 por Nox el 31/07/2014
Siguiendo esto, a ver si aparece un experto y aclara algo :comer:

Saludos.
Subir
cris'andt'emo
#3 por cris'andt'emo el 31/07/2014
Saludos Nox. A ver si alguien se anima :-)
Subir
Roberto Aramburu
#4 por Roberto Aramburu el 05/08/2014
Dudo que una sea mejor que la otra para evitar el aliasing, solo que si creo que el oversampling es más caro computacionalmente. Si vas a usar muchas voces en tu sinte yo diría que usar osciladores band limited es la mejor opción.
Subir
cris'andt'emo
#5 por cris'andt'emo el 06/08/2014
Gracias por responder, compañero. De momento las señales las genero mediante tablas de ondas y me dan buen resultado, para hacer prototipos es suficiente.
De todos modos tengo esa curiosidad. Si saco tiempo haré algunas pruebas y echaré un vistazo a la cantidad y amplitud de armónicos indeseados que se generan con un método y con otro. No sé cuando será pero lo compartiré por aquí.
Subir
Roberto Aramburu
#6 por Roberto Aramburu el 06/08/2014
Me encantaría verlo.
Otra cosa es que tengo entendido que los osciladores band limited y los osciladores por tabla de onda no son lo mismo.
Por lo que he visto en Max los osciladores que son band limited son "inteligentes" en el sentido que de que limitan la cantidad de armónicos conforme sube la frecuenca (de alguna manera) y los wavetables no.
Si vas a usar wavetables implementa un filtro anti aliasing.
Subir
cris'andt'emo
#7 por cris'andt'emo el 07/08/2014
No trabajo con MAX y no conozco en qué punto diverge con pure data, pero es muy probable que tengas razón e implemente mejoras de éste tipo.
Los osciladores los creo mandando un mensaje interno aplicando el teorema de Fourier con la función 'sinesum', creando un array y especificando la amplitud de cada armónico. Así creo una tabla con un número concreto de señales y limito la cantidad de armónicos que se generan en las señales.
Subir
Nox
#8 por Nox el 07/08/2014
cris'andt'emo escribió:
...creando un array y especificando la amplitud de cada armónico. Así creo una tabla con un número concreto de señales y limito la cantidad de armónicos que se generan en las señales.

:-k Y digo yo, si puedes especificar la amplitud de cada armónico a priori, haz que dependa de la frecuencia de muestreo y así cumplir siempre nyquist, a parte de eso, si no haces algo raro al leer la tabla no deberías tener aliasing.
Subir
cris'andt'emo
#9 por cris'andt'emo el 08/08/2014
Sí, esa es la forma en la que creo los osciladores bandlimited y tengo mucho menos alliasing. De todos modos siempre se genera algún "birdie" en altas frecuencias, por eso abrí el hilo y tengo la duda de qué método es mejor y si no sería un gasto innecesario de recursos el hecho de hacer oversampling tras crear los osciladores de éste modo.
Subir
Nox
#10 por Nox el 08/08/2014
En ese caso yo no dudaría, lo que te dice Ardot, métele un filtro y listo.
Subir
vagar
#11 por vagar el 10/08/2014
cris'andt'emo escribió:
Estoy haciendo prototipos de unos sintes en pure data y no sé que técnica es mejor para evitar el aliasing en las señales, si construirlas mediante tablas de ondas o hacer oversampling. ¿Alguien sabe qué es mejor y por qué?


Como sabemos, para evitar el aliasing lo que hay que hacer es limitar la señal en banda. Ni la tabla de ondas ni el oversampling son técnicas que intrínsecamente consigan ese efecto por sí mismas.

Una tabla de ondas es sencillamente una señal precalculada, que puede estar limitada en banda o no. Por ejemplo, podrías cargarla con una onda cuadrada pura, o con una onda cuadrada ya prefiltrada a 20 kHz. En el segundo caso no necesitas filtrar la señal a la salida, por lo que es computacionalmente menos costoso, pero más inflexible para variar la frecuencia, sintetizar distintas notas, hacer pitch bend, etc.

El oversampling simplemente te permite que la pendiente del filtro antialiasing de salida sea menos crítica, por lo que puedes implementar filtros computacionalmente menos costosos. Por contra tienes que calcular más muestras de la señal, lo cual es poco costoso si son ondas sencillas como cuadradas, sierras o triangulares, pero muy costoso si son funciones trigonométricas o exponenciales.

Lo normal es emplear ambas técnicas simultáneamente: reducir la carga del sobremuestreo usando tablas de ondas complejas interpolando las muestras que necesites por algún método barato, por ejemplo linealmente. También en el método de tabla de ondas puede que tengas que recurrir al sobremuestreo para sintetizar frecuencias no almacenadas.

Como casi siempre en ingeniería no hay una respuesta correcta, la solución óptima va a ser siempre un compromiso entre la naturaleza de las señales que quieras sintetizar, la funcionalidad que quieras dar en cuanto a rango y densidad de frecuencias fundamentales disponibles y los requisitos hardware (CPU, RAM) que quieras imponer.
Subir
1
cris'andt'emo
#12 por cris'andt'emo el 10/08/2014
Gracias por la aclaración, ha resuelto realmente la duda que tenía. Respecto a las tablas de ondas, me refiero al proceso del que hago uso para crear las señales de banda limitada y solo he estado usando senos para generar otras señales. Creo que ha habido un poco de confusión en cuanto al proceso y el concepto de oscilador bandlimited.

Le voy a dar al botón del dedo para arriba de tu respuesta pese a ser enemigos hispasónicos :-)
Un saludo y gracias de nuevo.
Subir
vagar
#13 por vagar el 10/08/2014
Si yo tuviera "enemigos hispasónicos" no habría respondido en este hilo. No voy a volver sobre el desacuerdo en fondo y, sobre todo, formas del otro hilo, la vida es corta y ya trae suficientes problemas de serie como para encima tener que dilapidar energía en mantener rencilias mezquinas, y más con este calor. :sobar: Espero que la información te sirva a ti y a otros que puedan leer este hilo y os pongo un enlace a otro donde se cita algo de bibliografía sobre DSP:

https://www.hispasonic.com/foros/primeros-pasos-programando-plugins-lv2/464255
Subir
cris'andt'emo
#14 por cris'andt'emo el 10/08/2014
Era por romper un poco el hielo entre ambos: en los tiempos que corren todos tenemos problemas más importantes por los que preocuparnos.

Gracias de nuevo por la aportación. Echaré un vistazo al enlace.
Subir
Wikter
#15 por Wikter el 12/11/2014
Jarl... Se puede hacer un filtro antialiasing con un lp resonante que resuene a la frecuencia del oscilador, sin auto oscilar, aunque las técnicas que comentáis son más adecuadas para casos en que hay que subir mucho de octava.
También hay que recordar lo del multimuestreo, aunque a los acérrimos de la síntesis les parecerá una osadía plantear el uso de muestras...
Subir
Hilos similares
Nuevo post

Regístrate o para poder postear en este hilo