Buscando un microcontrolador para aplicaciones de Audio DSP

Actualmente estoy investigando un sistema que tenga la capacidad de reproducir múltiples archivos de sonido desde una tarjeta SD, agregarlos y luego enviar la señal a un DAC. Básicamente, estoy buscando especificaciones sobre qué tan rápido debería ser el puerto SPI de cualquier microcontrolador DSP dado para reproducir 16 pistas (o alternativamente 1 pista * 16) simultáneamente, la frecuencia de muestreo es de calidad de CD estándar de 44.1 kHz para cada pista. Y si alguien conoce un buen microcontrolador (con una sólida documentación de desarrollo) para esta aplicación...

Esta hazaña es el único cuello de botella que puedo ver actualmente en el diseño general del sistema, si puedo superar este obstáculo de reproducción de 16 pistas, todo es cuesta abajo desde aquí.

EDITAR:

El equipo tendrá pistas de audio preestablecidas en la tarjeta SD almacenadas como .wav en FAT32. El equipo también tiene la capacidad de grabar mediante un ADC y almacenar .wav en la tarjeta SD. También habrá una función de bucle, pero no creo que requiera memoria interna adicional, ya que puede transmitirse directamente desde la tarjeta SD.

Respuestas (3)

Hagamos algunas matemáticas:

16 tracks * 44 ksample/s *2 channels *16 bit = 22.528 Mbps

Esta es la velocidad mínima que necesita para la interfaz SPI, si desea transmitir todos los datos a través de un solo puerto serie. Se puede hacer, con un reloj adecuado, pero necesita una tarjeta SD rápida ( ver aquí para la velocidad ).

Luego está el microcontrolador: debe agregar 16 pistas y enviarlas a través de un DAC, por lo que tiene 44 * 2 kmuestras para cada pista, o

44 10 3 2 dieciséis = 1408 10 3

Las sumas de 16 bits para cada muestra (probablemente con algo de escala para evitar el desbordamiento) dan como resultado aproximadamente 1,4 millones de operaciones por segundo, que pueden ser manejadas por un buen microcontrolador de 32 bits. Probablemente un Cortex-M3, o mejor M4 (pero M3 probablemente esté mejor documentado) pueda funcionar para usted.

Acabo de ver esto que puede ser sincronizado hasta 204 MHz, tiene 4 interfaces SPI, hasta 40 MB/s, y también tiene una unidad de punto flotante que puede ayudar en el proceso de acumulación (pero puede ser demasiado lento). También puede usar la estructura de doble núcleo para manejar por separado el procesamiento y la salida.

Pero para el DAC, creo que debería optar por un convertidor externo, diseñado específicamente para audio (lo que probablemente significa 16 bits).

Actualizar

No está tan claro cómo vas a administrar las 16 pistas diferentes en la SD:

  • ¿Qué pasa con la precarga de pistas en la memoria interna de la MCU?

Compruebe la interfaz I 2 S , que es un protocolo serie de 4 hilos especialmente diseñado para aplicaciones de audio.

Pregunta importante:

Dijiste que también quieres grabar pistas y guardarlas en la tarjeta SD: ¿quieres hacer eso al mismo tiempo? Necesita el controlador para codificar el audio en WAV y almacenarlo, y el ancho de banda de escritura de la tarjeta SD es menor.

La función de bucle NECESITARÁ algo de memoria intermedia (también puede usar la memoria interna) porque el bucle requiere una operación en tiempo real y la tarjeta SD introducirá demasiada latencia. Es posible que necesite una memoria RAM externa y también puede pensar en almacenar algunos datos allí para reducir las demoras.

Gracias por contestar, dale en el clavo. Estoy familiarizado con los conjuntos de chips AVR/Atmega, nunca antes había tocado Cortex. ¿Existe un chip Atmega comparable a este Cortex-M3? Lo admito, tengo curiosidad por los microcontroladores Cortex.
Específicamente Atmega32 (ya que tengo una placa de desarrollo para eso).
Los AVR de 8 bits no tienen nada parecido al rendimiento requerido para esa aplicación.
@Oliver mira aquí
Aclaración: Entrada = RCA Estéreo, Salida = RCA Estéreo (calidad CD). Así que asumo que son 16 bits por canal.
@Oliver Entonces, ¿todo tiene que multiplicarse para los dos canales?
@Oliver: clabachio vinculado al sitio de Atmel para Cortex-M3. En un proyecto anterior, probamos un ARM7TDMI de Atmel a 72 MHz, pero no funcionó. Cambié a NXP, también 7TDMI, pero solo a 60 MHz, y eso fue lo suficientemente eficaz donde el ATmel a 72 no lo fue. No sé si esto ha cambiado, pero quizás también quieras echar un vistazo al sitio de NXP Cortex-M3 .

La serie dsPIC33E de Microchip es un controlador + DSP, con hasta 512K flash, 52K RAM, cuatro módulos SPI de 15 Mbps, DMA y puede funcionar a 60 MIPS. Las características de DSP incluyen MAC de hardware, multiplicación de ciclo único de (16 × 16) bits, cambio de barril, inversión de bits y dos acumuladores de 40 bits.

Alrededor de $12 en cantidades individuales en Digi-Key.

En una nota de fuera de juego: ¿Cómo configuraría una placa de desarrollo para algo como esto? usar un adaptador SMT a estilo de orificio pasante y luego usar un puerto USB para conectarlo a la computadora? Necesito trabajar con protoboards para la creación inicial de prototipos.
Microchip fabrica una "placa de desarrollo de audio" utilizando un 512K dsPIC33E, que Digi-Key vende por $149 . Tienen algunas versiones en DIPs de 28 pines , aunque solo cuentan con 128K de flash y 16K de RAM.
@Oliver, Por cierto, muchos de los chips de la serie dsPIC33E pueden actuar como host o esclavo USB, ya que tienen USB 2.0 OTG integrado. Sin embargo, solo está clasificado para velocidad completa (12 Mbbs), no para alta velocidad (480 Mbs).
Con un presupuesto de desarrollo de $ 250 (limitaciones universitarias), lo más probable es que necesite construir una placa de desarrollo yo mismo...

Eche un vistazo a la serie XCore www.xmos.com . Tienen una pequeña curva de aprendizaje, pero son extremadamente potentes y vienen con herramientas de desarrollo (relativamente) baratas y un IDE gratuito. También hay una comunidad en xcore.com.