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.

Digital Delay block diagram

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.
VCO block diagram

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.

Delta mod/demod

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.

CVSD mod/demod

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.

Big shift register

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.

Circular buffer


This page hosted by GeoCities Get your own Free Home Page