DESCARGO
Revisión: 0
Fecha: 23 Ago 1997
La página de efectos digitales
Delay, eco, reverberancia
- El diagrama en bloques es sencillo, algo más complicado que el
analógico, dado que tenemos que lidiar con varios timings.
Tendremos, como es de esperar, un filtro antialias en la entrada; un
conversor A/D, un bloque de memoria donde haremos el retardo en sí,
y un filtro de interpolación a la salida, para reconstruir la
señal analógica, y, ya de paso, limitar la respuesta en altas
frecuencias si queremos lograr un efecto de eco.
Básicamente conozco dos sistemas, la elección de uno u otro
dependerá del método de conversión A/D D/A a utilizar.
Si elegimos el método CVSD (Continuously Variable Slope Delta
Modulation), obtendremos un stream serie de datos que representan la
pendiente de interpolación respecto del valor anterior de la
señal; por lo que la memoria deberá estar organizada como un
gran registro de desplazamiento, con una entrada y una salida series. El
tiempo de demora depende de la frecuencia de muestreo y de la longitud del
bloque de memoria, en bits. Como es conocido, un conversor A/D basado en
CVSD no puede funcionar a la tasa de Nyquist, por lo que la elección
de la frecuencia mínima de trabajo dependerá de la
relación señal/ruido que podamos tolerar, y la máxima
de la calidad y tecnología de los componentes utilizados (tiempo de
acceso de las memorias, velocidad del comparador, etc.). El delay obtenido
es la longitud del registro de desplazamiento multiplicada por el
período de la señal de reloj.
El otro sistema utiliza un conversor que entrega los datos en paralelo, por
lo que el dato convertido representa el valor de la señal en ese
instante de tiempo, en la escala discreta correspondiente al ancho de
palabra del conversor. Este puede ser de cualquier tecnología
(flash, SAR, sigma-delta), siempre que el dato entregado se ajuste a la
descripción anterior.
El dato leído es transferido en paralelo a la memoria, que se
construye como un buffer circular, y luego se lee un dato de otra
posición que se envía a la salida. El tiempo de demora es la
diferencia entre ambas posiciones de memoria, es decir, si escribo en la
posición 2000, y leo de la posición 1000, estoy leyendo un
dato que fue escrito hace 1000 períodos de reloj. La misma
situación se obtiene si escribo en la posición 500 y leo en
la posición 2500, en un buffer de 3000 palabras; por lo que
calculamos el delay como la diferencia entre la posición de lectura
y la de escritura, multiplicada por el período de la señal de
reloj.
El reloj a utilizar deberá ser de varias fases, a fin de seleccionar
el inicio de conversión, lectura de los datos, grabación de
los datos, actualización de punteros, etc. El reverb obtenido con
este sistema carece de realismo, sonando muchas veces "metálico";
por lo que recomiendo el sistema analógico de
resortes.
Flanger, Chorus
- Una vez implementado el sistema de delay, (como se describió en el
párrafo anterior), se puede modular el tiempo de demora para lograr
efectos flanger o chorus reemplazando el oscilador de reloj por un VCO
modulado por un LFO (Low Frequency Oscillator), de forma preferentemente
triangular para el flanger y senoidal para el chorus, aunque la triangular
funciona igualmente aceptable si hay buena relación
señal-ruido.
Pitch shift
- Es posible realizar uno de estos bichos con un chorus,
en el cual el LFO es un diente de sierra lineal.
No obstante, el efecto no es del todo agradable. La implementación
con dos chorus en contrafase resulta teóricamente posible, no
obstante no la he probado y no creo que estas técnicas
sean las apropiadas para esta tarea.
Explicaciones adicionales
Modulación delta y CVSD
- La conversión A/D mediante modulación delta consiste en
aproximar la señal analógica mediante una rampa generada (por
ejemplo) con la carga de un capacitor. Si la rampa supera el valor de la
señal al momento indicado por el reloj, se invierte el signo de la
rampa. El valor entregado es la salida del comparador, es decir, el signo
de la rampa. Esencialmente, este sistema codifica en el ancho del pulso de
salida del comparador el valor medio (en el intervalo de muestreo) de la señal analógica,
por lo que la conversión D/A es simplemente un integrador alimentado
por el último dato (generalmente se usa un RC de iguales
características que el A/D). Esto tiene sus problemas, como se ve,
se debe trabajar a una frecuencia de muestreo mucho mayor que la de la
señal para que la rampa pueda seguirla fielmente, ya que si la
señal sube o baja más rápido que la rampa, ésta
no puede seguirla. Además, si no hay señal de entrada, la
rampa alterna entre uno y otro signo.
Para evitar estos problemas, se
introduce la memoria y el CVSD, que consiste en variar continuamente la
pendiente de la rampa, según fueron los 2/3/4 últimos
valores; es decir, si la señal sube muy rápido, aumento la
pendiente de la rampa, si no varía demasiado la disminuyo. La
demodulación de CVSD requiere reproducir el circuito A/D a la
salida, integrando la rampa resultante.
Existen algunos circuitos comerciales que implementan esta
conversión, no obstante, no pude conseguirlos y experimenté
una versión discreta con excelentes resutados.
Memoria como registro de desplazamiento
- Con las memorias que tienen pines de entrada y pines de salida de datos,
puede construírse un largo registro de desplazamiento.
Se conectan en cascada los pines de salida con los de entrada, quedando
como entrada serie el pin de entrada de la primera memoria, y como salida
serie el pin de salida de la última memoria. Un contador
generará las direcciones a cada pulso de reloj, un reloj de varias
fases generará los pulsos de read y write y los de RAS y CAS si las
memorias son dinámicas. Así, a cada pulso de clock, un dato
es escrito en la posición indicada por el contador. Al cabo de C
períodos de clock (C es el número de cuentas del contador hasta
repetir el ciclo), este dato es leído y sale por el pin de data-out
de una memoria, para ser escrito en la siguiente. El dato parece
avanzar una posición de memoria a cada pulso de clock, atravezando las siguientes, hasta
llegar a salir de la última N períodos de clock más
tarde, donde N es la longitud total de la memoria.
Buffer circular
- Se implementa fácilmente con un contador que genera las
líneas de address de las memorias. No obstante, la longitud del
buffer deberá ser una potencia de dos (2 elevado al número de
líneas de address). La dirección así apuntada
será por ejemplo la de escritura, la cual será incrementada
cada vez que se avance el contador.
La diferencia entre la posición de lectura y la de escritura suele
guardarse en un registro, el cual, a su tiempo, se sumará al
contador que barre el buffer para obtener la nueva posición, en este
caso, la de lectura.
This page hosted by
Get your own Free Home Page