Pedaleras digitales: qué, cómo, cuándo y dónde

¡¡Hola!!:

Mi nombre es Carlos Best y vivo en Argentina, en la provincia de Mendoza. Soy guitarrista profesional desde hace ya unos cuantos años y debido a esto siempre estoy buscando nuevas formas de hacer sonar a mi viola. Por esto mismo me introduje en el tema de los efectos caseros de guitarra. Después de construir  exitosamente (y otras veces no tanto, ja!!!) un montón de efectos analógicos que iba encontrando en la red me di cuenta de que no eran lo suficientemente versátiles; especialmente los que se relacionan con los retardos de nota o delays .

Por eso traté de comprar una multiefectos digital que supliera todas mis necesidades. Y como en este país, si no te engancha el corralito, tenés el dólar 1 a 5 o te bajan el sueldo; obviamente que no pude. Entonces pensé (de vez en cuando lo hago): si tuve éxito con los pedales analógicos... ¿por qué no habría de intentar con tecnología digital?

Una de las razones que me motivó a esto, además de mis conocimientos de electrónica y assembler, fue que también tengo algunos amigos ingenieros en electrónica y en sistemas (claro: ningún principiante es tan lanzado como para hacerse el constructor de multiefectos casi de la nada)

Entonces, me di a la tarea de buscar material sobre el tema. Buscando y buscando me di cuenta que no había nada. ¡¡¡¡PERO NADA DE NADA!!!!!. Y ahora que mas o menos recopilé algunas cositas me pareció bien traducirlas y distribuirlas para que le sean de algún provecho a otros. Y que esta gran red de personas conectadas entre si se mantenga libre y gratuita. (perdón, me puse poético J)

Con respecto a la terminología, lo único que puedo decir es que no la conozco toda así que traté de que la traducción se mantuviera lo más entendible. Seguro que si me equivoqué en algo, alguien que sepa más que yo me mandará un mail a la dirección cocobest@softhome.net corrigiéndome. Tambien si construyen el proyecto me gustaría que me mandaran algo con como les fue, que código y herramienta usaron, una copia del firmware etc. Yo prometo hacer lo propio en cuanto termine de ajustar todo.

Otra cosa que debo hacer notar es que los precios fueron extraídos del original, no son los precios para Argentina.

Gracias por leer esto (yo pocas veces lo hago J) y que les aproveche!!!!!!.


Una comparación entre microcontroladores y DSPs

Recientemente tuve la oportunidad de escribir sobre algunos de mis temas favoritos: microcontroladores, procesadores de señal digital (DSP’s) y componentes de señal mezclada como los convertidores analógico-digitales (a partir de ahora A/D) o los convertidores digital-analógico (ídem: D/A)
Esta oportunidad surgió cuando un hombre que estaba tratando de hacer un multi-efectos para guitarra estaba buscando información sobre como implementar efectos de audio digital usando microcontroladores. Este tipo tenía dificultades en conseguir aplicaciones o algoritmos para efectos de guitarra así que me mandó un mail y aquí estamos. Y mientras más pienso en su pregunta, mas convencido estoy de que la respuesta mostrará las diferencias entre un microcontrolador (lo que quería usar) y un DSP (lo que debería usar, particularmente tratándose de procesamiento de señal de audio)
Déjenme primero establecer una base para este articulo. Este tipo quería usar o un PIC16F873 (de la empresa Microchip) o un Scenix SX28AC, no un DSP; pero permítanme elegir uno, solo a nivel comparativo. Como estoy familiarizado con los DSP voy a elegir el Motorola DSP56364, un chip usado comúnmente en muchísimas aplicaciones de procesamiento de señales de audio. La figura uno muestra una comparación de estos tres dispositivos

 

Procesador

Precio
(US $)

MIPs Máximos

I/O de

propósito general

RAM de

programa

RAM de

datos

Forma

PIC16F873

5.81(1)

5
(20 MHz)

24

4096 × 14

192 × 8

28-pines

SX28AC

4.05(1)

75
(75 MHz)

20

2048 × 12

136 × 8

28-pines

DSP56364

11.00(2)

100
(100 MHz)

16

512–1280
×24

100- or
112-pin

1792–2560
× 24

Nota: (1) es el precio por una compra de 100 unidades. (2) es el precio de la unidad individual. (Precios de casas de electrónica estadounidenses: Radio Shack, etc.)

Figura 1 - Aquí se puede ver la variedad posible de procesadores para una aplicación multi-efectos de guitarra


He aquí  algunas de las características de cada dispositivo

    PIC16F873 - Conversión A/D de 10 bits con 5 canales, dos PWM, tres timers y USART

    SX28AC – “Periféricos Virtuales” implementados en el software (PWM, USART, timers, conversión A/D de 8 bits, etc.)

    DSP56364 – Interfase de audio extendida, interfase de huésped serial, interfase directa con DRAM/SRAM, multiplicador-acumulador de 24x24,  shifter de barril de 56 bits, y clocking basado en PLL.

Como se puede ver, los microcontroladores son baratos, pequeños y flexibles. En contraposición los DSP son más grandes, mas caros, pero más específicos.

Sintonía Fina

Ahora, enfoquemos nuestra atención a la tarea a resolver. Las especificaciones del proyecto no me fueron facilitadas así que voy a especular. Supuestamente esta aplicación es solo para uso privado y no tiene intencionalidad comercial, ¿ok? Así que asumo que debe ser barato y contar al menos con los siguientes efectos: delay, reverb, eco (Nota del traductor: delay con tiempos que superan los 500 ms, mas o menos), chorus y distorsión; me enfocaré solo en los primeros cuatro, ya que como he descubierto recientemente el término “distorsión” es muy amplio y puede significar cualquier cosa. Por eso mismo me centraré en los primeros cuatro,  que me parecen suficientes para una discusión general.

La figura dos muestra los cuatro tipos de procesamiento de señal a ser logrados.

Como se puede ver, los ítems desde B hacia D utilizan el mismo algoritmo del ítem A pero con un elemento de ganancia y un bloque de sumatoria.

Así que todos los efectos pueden ser logrados con una ligera variación del algoritmo A, solo hay que:

    tomar el resultado mas reciente del convertidor A/D,

    almacenarlo,

    recuperar un resultado anterior,

    multiplicarlo por algún valor de ganancia “G” (si se necesita),

    sumar los dos resultados juntos (si se necesita)

    y mandar el resultado al conversor D/A.

Aunque la multiplicación por una etapa de ganancia parezca que es para aumentar el nivel de la señal, la intención en realidad es reducir la amplitud. Por lo tanto, G (la ganancia) es generalmente mucho mas chica que 1. Si se permite que sea más grande, el valor máximo de ganancia puede ser 1.5 o 2 pero no más grande. Si G es mayor o igual a 1 en el caso del reverb, se oirá feedback y los valores del convertidor A/D se agrandarán hasta que todo resulte en saturación digital (NT: algo que no suena muy bien)

Para el delay, el valor mas viejo del A/D puede ser simplemente enviado al D/A (sin cálculos por parte del procesador.

Para el eco y el chorus, los valores mas viejos de A/D son combinados con el valor más reciente y luego el resultado es enviado al D/A. La única diferencia es que el chorus utiliza 2 o más voces con tiempos de retardo más cortos.

Para el reverb, los valores mas viejos de A/D son recuperados y enviados directamente al D/A, multiplicados por una etapa de ganancia y luego combinados con el valor más reciente de A/D. Luego esta suma es almacenada en memoria. Como ya mencioné, los valores viejos deben ser multiplicados por una ganancia no mayor a 1 para que el reverb se mantenga estable. Mucho reverb (valores menores a 1 pero cercanos a él) puede causar que la señal sature, así que mucho cuidado se habrá de tener al programar este código. (NT:  muchas veces los acoples de guitarra y la saturación son  efectos deseados y utilizados como una herramienta de expresión más. Pero hay que tener en cuenta que el sonido que normalmente oímos en las grabaciones está logrado con válvulas en el caso de la saturación y con un tanque de resortes en el caso de los acoples que hace el reverb. Y esto no puede ser simulado tan fácilmente en un entorno digital)

¡¡¡¡¡SUBÍ EL VOLUMEN!!!!!

Tomemos uno de estos efectos, miremos mas de cerca  y pongamos atención a sus detalles. Pensemos que nuestro chorus debe de proveer de (al menos) dos señales con delay (un poquito retrasadas con respecto a la fundamental), cada una con un volumen individual y ajustable; y que luego deben ser combinadas con la señal principal de la guitarra. Por lo tanto, el dispositivo a usar debe de ser capaz de proveer un chorus que suene como tres instrumentos distintos (NT: “chorus” en inglés quiere decir “coro”.

En este caso, por cada sample (en castellano: muestra) del A/D, el procesador deberá realizar las siguientes operaciones:

·         Tomar la muestra mas reciente del A/D (pongámosle un nombre pa´ no confundirnos: “ME” –o sea: Muestra de Entrada-)

·         Almacenarla en memoria

·         Sacar de la memoria una Muestra “X” mas vieja (“MX”)

·         Multiplicar MX por una ganancia G para obtener MXG (MX x G = MXG)

·         Para la segunda voz sacar otra vez de la memoria otra Muestra vieja que ahora llamaremos “Y” (“MY”)

·         Multiplicar MY por una ganancia G  para obtener MYG (MY x G = MYG)

·         Sumar ME, MXG y MYG (ME + MXG + MYG)

·         Enviar el resultado al D/A

·         Y que todo el proceso esté terminado antes de que la próxima muestra de entrada (ME2) sea producida

Y ahora la pregunta crítica: ¿podés resolver todas estas tareas con el procesador que has elegido? (NT: o sea... ¿tu Pic16xxxx común se la banca? ;)

Esta no es una pregunta fácil de resolver, ya que no todo depende de cuanto pueda trabajar el microcontrolador; sino también de la tasa de conversión y la resolución del A/D y del rango de ganancia que G cubrirá.

Sin irnos en detalles mayores podemos decir que el mínimo de tasa de conversión y la resolución que deberá tener el A/D serán de 32 Khz. y 16 bits respectivamente. Personalmente, no creo que una conversión o resolución que baje de esos valores pueda brindar efectos de calidad. Como nota aparte puedo decir que los fabricantes de multiefectos utilizan normalmente convertidores A/D con tasas de sampleo de 44.1 o 48 Khz. y resoluciones de 20 bits o más (NT: para comparar se puede citar como ejemplo al Winamp más clásico y a la mayoría de los mp3 que utilizan sampleo de 44.1 Khz. y resolución de 128 Kbits por segundo; aunque el sistema de Mpeg layer 3 no se aplique específicamente al tema en discusión)

Pienso que G puede ser probablemente una variable de 4 bits (para proveer de 16 niveles de volumen), aunque 6 bits seria mejor (64 niveles), pero no más de 8 bits (1 byte = 256 niveles). Desafortunadamente, el oído humano no es lineal y una simple aproximación para la variable G no sería adecuada. Por Ej., muchos controles de volumen cambian en forma escalonada en incrementos de 1 o 0.5 dB. Pero en este caso, si G va cambiado de a 1, el nivel de la señal cambiara al doble y esto es un incremento de 6 dB.

Para Simplificar las cosas, asumiré que G tiene 8 bits y provee un rango de 0 a 255. también de que proveerá de una ganancia menor que 1. La figura 3 muestra la relación escalón / dB que tendrá G 

Valor de G

Múltiplo

Volumen (dB en relación con el original)

255

128

64

32

16

8

4

2

1

0

 

0.996

0.500

0.250

0.125

0.063

0.031

0.016

0.008

0.004

0.000

 

–0

–6

–12

–18

–24

–30

–36

–42

–48

Infinito

 

Figura 3 – Valores de G y niveles de volumen


Esta aproximación no es la mejor porque cuando G baja a 4 o más el incremento en la ganancia es mas que 1 dB. De todos modos estos números son a nivel especulativo.

Con todo esto, y volviendo al caso de chorus, el procesador debe multiplicar un numero de 16 bits por un numero de 8 para producir un resultado de 16 bits (ME x G = MXG) y repetirlo una vez más (MY x G = MYG). Después deberá sumar los tres números de 16 bits que corresponden a la señal limpia y a las dos señales procesadas (MXG + MYG + ME) y todo esto deberá ser completado en un tiempo de 31 ms (microsegundos) o menos. Esta cantidad de tiempo significa que cada procesador puede ejecutar los siguientes números de instrucciones:

Procesador

PIC16F873

SX28AC

SX28AC

DSP56364

Numero de instrucciones

155

2325 con un clocking de 75-MHz

1550 con un clocking de 50-MHz

3100

Existen un montón de algoritmos para multiplicar un numero sin uso del microprocesador como por ejemplo los mchips que traen multiplicadores incluidos.  Pero para poder realizar el proceso en los que no los traen, el chip deberá realizar entre 150 y 240 instrucciones para multiplicar  ME x G = MXG y MY x G = MYG (los números de 16 bits/2 bytes correspondientes a la muestra vieja y el numero de 8 bits/1 byte que es la ganancia). Y esto deja afuera al PIC16F873 (que ni siquiera aguantó hasta llegar a la sumatoria de las tres señales).

El SX28AC es aun un contendiente a vencer. Considerando que el chorus se va a comer alrededor de 200 instrucciones para las dos multiplicaciones y algunas mas para la adición final podemos redondear en 250 instrucciones para todo el proceso. Esto significa que alrededor del 16 % de las instrucciones del microcontrolador están siendo ocupadas al momento de usar el chorus (asumiendo que el clock esta en 50 MHz. Sería 11% si el clock está en 75 MHz) O sea que todavía puede dar pelea. Pero porque todavía no hemos tenido en cuenta otras cosas que el procesador debe manejar.

Con respecto a los procesos matemáticos, el DSP56364 no tiene problemas. Contiene un multiplicador-acumulador de 24x24 que puede multiplicar dos números de 24 bits con una sola instrucción para el procesador. Aquí es donde la capacidad real del DSP se hace evidente.

Todavía hay un tema que no he tocado que es muy importante: ¿exactamente que tipo de A/D y D/A vamos a usar y como serán operados? He pensado bastante sobre este problema y todavía no encuentro la respuesta más convincente para el Scenix. Es posible que este micro opere con cualquier convertidor standard; pero hay varios temas críticos con respecto a esto que no pueden dejarse librados al azar.

¡¡¡EL TIMING LO ES TODO!!!

Primero que nada, el tiempo entre muestras del A/D debe de exacto dentro de un ciclo de instrucciones. Por ejemplo, si el microcontrolador gatilla al A/D para que se ponga en modo hold (reposo), este debe hacerlo con una tasa periódica de 31,250 microsegundos (si estamos trabajando con una tasa de conversión de 32 Khz.) Si el A/D se mantiene inactivo aunque sea solo en la primera instrucción del siguiente ciclo, la tasa señal-ruido caerá a 68 dB (con un clock de 50 MHz y una señal de entrada de 3 Khz.) o por decirlo de otra manera, bajando el rendimiento a, mas o menos, 11 bits. Por mas de que se pueda discutir la perfomance real que debe tener un efecto en el mundo real para sonar bien, el punto aquí es que el A/D debe de ser preciso.

Puede ser remotamente posible codificar el software del SX28AC para que un A/D como el Burr-Brown ADS8320 pueda ser usado correctamente en esta aplicación. Desafortunadamente, este dispositivo es caro comparado con los A/D de audio y no está diseñado para aplicaciones de este genero. Y el periodo entre muestras también se aplica a la señal cerrojo suministrada al D/A.

El segundo problema es la forma de operación del A/D. En el caso del D/A, es posible controlar el reloj interno y actualizar rápidamente mandando una señal cerrojo. Aunque de todos modos el A/D debería de tener un reloj que admita que cada bit se setee durante el proceso de conversión. Por ejemplo, el ADS8320 requiere un reloj de 500 nanosegundos. Por suerte, este reloj no tiene que ser tan preciso (en tiempo) como la señal de sampleo. Así que si el reloj de conversión varia algunos ciclos es aceptable.

Burr-Brown ha equipado algunos de sus ADS8320 con algunos A/D’s de 16 bits que contienen un reloj interno que nos quita el problema del clocking. Lo único que hay que hacer es tomar el resultado mas reciente del A/D, gatillarlo para la siguiente conversión y moverse al paso siguiente. Desafortunadamente, estas unidades son multi-canal, más grandes y mucho más caras que los ADS8320’s comunes. Otros fabricantes ofrecen dispositivos similares, aunque de todos modos el precio se mantiene constante en concordancia con los requerimientos (de ir a modo “hold” en un momento preciso con relación a la conversión anterior).

Otra opción es usar un “glue logic” externo para manejar el A/D, así como la interfase entre el A/D y el microcontrolador (cosa de que el resultado del A/D esté ahí cuando se lo necesita) Una ventaja mas sería que también ayudaría a la interfase con el D/A. Aunque como desventaja trae que añadiría a la etapa de diseño un poco mas de tiempo y unos mangos mas a la lista de materiales. Como mínimo el dispositivo a usar seria un 74xxxx, pero seria preferible usar un PLD o un FPGA pequeño.

Usar el glue logic tiene como ventaja la posibilidad de usar convertidores más baratos, debido a que ya no hacen falta chips tan precisos. Por ejemplo los convertidores delta-sigma son fáciles de conseguir y dan una alta perfomance por el precio que pagas en caja. De todos modos deben de ser operados por un reloj libre de jitters y de alta frecuencia.

Estos semiconductores son universalmente seriales y soportan un set limitado de interfases seriales standard, siendo la más popular la IIS (I2S) No obstante, quizás sea necesario un PLD. Pero un FPGA pequeño nos daría interfase a un códec AC ’97, por que provee un gran numero de posibilidades que son muy útiles en este tipo de aparatos (por ejemplo: un conversor barato de audio que provee conversión A/D y D/A estereo por menos de 2 dolares)

ALMACENAMIENTO

Hay un tema pendiente que todavía no hemos discutido. Todos los procesadores que hemos discutido aquí no pueden almacenar una cantidad considerable de datos, particularmente los micros. Así que... ¿cuánta capacidad de almacenaje necesitamos?

He investigado sobre el rango de delay de los efectos comunes que se incluyen en las pedaleras pero no he podido recaer en ningún numero concreto. Parece ser que los delays  que están en el rango de los 100 ms son los mas utilizados. Aun así elegiré uno de 250 ms. (NT: me parece que este tipo se equivoco o yo no entendí bien lo que quiso decir. Los delays más comunes como el Boss DD3, o los de pedaleras como la Digitech RP-7 etc. tienen un rango máximo de delay que va desde unos 800ms hasta 3 SEGUNDOS ENTEROS de retardo)

Para 250 ms de almacenamiento, con una tasa de conversión de 32 Khz., y una resolución A/D de 16 bits, se necesitan 16 KB’s de almacenamiento. Ahora el problema es que es muy difícil de encontrar SRAM’s chicas (debido a que las grandes son bastante baratas). Desafortunadamente, al ser grandes, requieren de un numero de dirección y pins de datos más grandes. Por Ej., para escribir o localizar 16 k de memoria, el microcontrolador debe de proveer de una dirección de 14 bits. Y si la RAM tiene un puerto de dirección paralela y un puerto de datos paralelo de 8 bits se deben usar 22 pins de I/O (o añadir otro glue logic)

No obstante, este problema no ocurre con el DSP porque está diseñado para comunicarse directamente con los conversores delta-sigma a través de varias interfases (personalmente recomiendo la IIS), aunque también puede hacerlo con los códecs de interfase AC ’97 que poseen una interfase un poco más compleja. También soporta SRAM’s así como también DRAM’s. De hecho, la interfase con los dispositivos de memoria es fácil y extremadamente flexibles. (NT: otro poroto mas pa’l lado del DSP. Parece que los estuviera tratando de vender ;)

PRECIOS

La figura cuatro muestra la lista de materiales para las tres distintas configuraciones del sistema. Los precios generalmente consisten en el precio unitario en lotes de a cien (exceptuando el DSP). La RAM es un poco cara pero todas las configuraciones la necesitan.

 

SX28AC + Sin A/D-D/A

SX28AC + Con
A/D-D/A

DSP56364 + Con A/D-D/A

Dispositivo

Costo (US$)

Dispositivo

Costo (US$)

Dispositivo

Costo (US$)

SX28AC

4.05

SX28AC

4.05

DSP56364

11.00

128k × 8 SRAM

4.05

128k × 8 SRAM

4.05

128k × 8 SRAM

4.05

ADS8320ECT

14.10

PCM1800

3.25

PCM1800

3.25

PCM56

8.25

PCM1744

2.45

PCM1744

2.45

Glue Logic

?

Glue Logic

?

27C256

2.00

Total:

30.45 + glue

Total:

13.30 + glue

Total:

22.75

Figura 4 – Lista de componentes basica para las distintas configuraciones

 También el DSP funciona solo con una RAM aunque trabaja internamente con números de 24 bits. El hardware del DSP puede ser programado para guardar datos en 8, 16 o 24 bits; almacenando y recuperando datos automáticamente cuando se trata de direcciones de memoria mayores a 8.

Un dato a tener en cuenta es que a diferencia del Scenix, el Motorola necesita de una EEPROM externa para almacenar su programa; cosa que aumentara el precio en la factura de componentes.

Por supuesto que también hay que añadir al precio pedales, pulsadores, perillas, faders, etc.

Una diferencia es también el consumo de energía. Parece que el DSP consume más. De todos modos es posible setearlo para que vaya a modo sleep o stand-by, cosa que con el Scenix no sucede.

El sistema hecho con Scenix es mas barato pero el ahorro es mínimo. Honestamente no creo que pueda realizar las operaciones necesarias para todos los efectos ya que esta severamente limitado en funcionalidad. Es posible hacer un sistema “usable”, pero es como querer poner 10 kilos de peso en un bolso de solo 5. Se deberá ser muy creativo, cuidadoso y meticuloso para resolver todas las limitaciones y problemas que vengan del chip. (NT: ¡¡¡¡Y todo por ahorrarte unos mangos!!!! :D )

En mi sincera, opinión el DSP hará que todo el diseño sea más simple y funcional, dejando mucho mas tiempo para tocar con los efectos que para armarlos (que es la verdadera consigna de esto.)

He usado las familias de Motorolas DSP56X’s y DPS563X por casi 10 años. Un consejo: no dejen que los pines los confundan. La circuitería es muy simple y se parecen mas a microcontroladores con esteroides que a misteriosos DSP’s. No son para cualquier aplicación, pero cuando se necesita, ¡¡¡relucen!!!

Adicionalmente, siempre los he programado como a microcontroladores. El código es simple y real y prácticamente no usa el hardware de procesamiento de señal. El 92% as 95% del soft esta reservado generalmente a la interfase de usuario y al código de inicialización. Las rutinas de procesamiento de señal actuales son muy fáciles de codificar y, a la inversa, mucho mas pequeñas. Lo bueno es que, después de que todo ya está armado, podes jugar con el código y probar cualquier tipo de procesamiento de señal que se te ocurra.

NOTAS FINALES

El DSP56362 es también un buen candidato para esta aplicación. La data  de RAM onboard es de 11k x 24 bits, que proveería  de 340ms de almacenamiento a 3 2 Khz. o de 250ms a 44.1 Khz. Así que Ram  externa no sería necesaria. Este DSP es 6$ mas caro pero te ahorrás 4$ por la RAM. Y también tiene mas pins I/O (pins de entrada y salida), así como también otras características (como un puerto de salida S/PDIF) Combinado con la EEPROM y el códec AC ’97 sale 21$ a diferencia de los 19$ del otro chip.

Hay un montón de DSP que pueden ser usados para este proyecto. Texas Instruments, Analog Devices y Motorola manufacturan una gran variedad. Cirrus Logic Cristal semiconductors tiene una división especial para DSP’s de procesamiento de audio, así como también AKM Semiconductors.

Finalmente, no todos los efectos de guitarra necesitan un A/D, DSP o  D/A. ¡¡¡¡Pero eso significa volver a lo analógico!!!!

 

 

www.guitarraonline.com.ar
Webmasters: Pablo pablo@guitarraonline.com.ar
Marcelo Roascio mroascio@guitarraonline.com.ar
Publicidad: Laura Goldar lauragoldar@gmail.com