RGB LED analizador de espectro de audio - ¿Paso de banda o FFT?

0

Estoy a punto de construir una mesa de café que tenga una matriz de LED RGB, como en este video. enlace

Quiero que la matriz muestre un espectro de audio que debe calcularse en tiempo real desde una fuente de audio variable a través de un conector de audio de 3,5 mm. (por ejemplo, teléfono inteligente, PC, reproductor de mp3)

También debería mostrar patrones visuales aleatorios y / o programados. (no relacionado con la entrada de audio)

Así que pensé en usar un microcontrolador AVR como unidad principal de este proyecto.

El mcu se programará una vez, y no tiene que comunicarse con otros dispositivos.

Los buttens se utilizarán para cambiar entre modos y / o animaciones.

Entonces, la idea básica está ahí, pero hay algunas cosas sobre las que no estoy seguro:

  1. ¿Debo crear un panel de filtro de paso de banda para obtener los datos del espectro y procesarlos a partir de ahí con el mcu o buscar la solución FFT (software completo)? ¿Cuál es más rápido / más efectivo? ¿Importa la diferencia de velocidad en este tipo de proyecto? (Sí, sé que hay un par de preguntas con el mismo tema, y he leído algunas de ellas, pero creo que las respuestas no son muy específicas para mí)

  2. ¿Cómo selecciono la cantidad de bandas para mi analizador de espectro (columnas de la matriz)? ¿Importa la cantidad de bandas que elijo (ya que quiero diseñar la placa de controlador de matriz RGB LED y la tabla con sus dimensiones basadas en mi selección)?

Gracias por su ayuda y por favor, extienda mi mal inglés.

    
pregunta Ace

1 respuesta

2

Personalmente, me gustaría ir (y en el pasado se fue) la ruta FFT. Sin embargo, no usaría un AVR de 8 bits, usaría algo un poco más rápido.

Mi arma personal de elección es el PIC32, que tiene el poder más que suficiente para hacer un buen trabajo de la FFT, pero además hay otras buenas opciones, como una de los chips ARM de 32 bits de Atmel (por ejemplo, SAM3X , como en el Arduino Due), o muchos de los otros chips ARM que hay por ahí.

El truco con FFT es que necesita una buena velocidad de muestreo rápida y suficiente memoria para almacenar un búfer de muestra complejo. Digamos que quieres 1024 muestras (que te darían 512 cubos de FFT para jugar), a 16 bits por muestra, más 16 bits adicionales para el complejo componente de FFT, estás hablando de un mínimo de 4 KB de RAM solo para el almacenamiento de muestras. Además, si quieres que sea suave, entonces quieres usar DMA para leer las muestras en un búfer mientras ejecutas FFT en otro búfer, por lo que un búfer de ping-pong aumentaría eso a 8KB.

Con FFT, obtienes la mitad del número de cubos , o rangos de frecuencia, como muestras. El rango de frecuencia es también la mitad de la frecuencia de muestreo. Entonces, si tiene 1024 muestras grabadas a 48KHz, eso le da un rango de frecuencia de 0-24KHz, con (24000/512 =) 46.875Hz por cubo.

La reducción a 128 muestras le daría 64 depósitos, cada uno a 375Hz por depósito.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas