Recientemente escribí un script de Matlab para desarrollar / simular salidas PWM para luces RGB basadas en la entrada de audio muestreada. Hice este script con planes para construir un dispositivo que pueda ejecutar el algoritmo y así controlar las luces RGB.
Una breve explicación del script (también lo publicaré a continuación) es la siguiente.
-
Filtra la señal entrante en 3 bandas de frecuencias de rango bajo, medio y alto.
-
Crea marcos de 0.05 segundos de duración (creo) para mantener valores RGB para La duración basada en las 3 señales filtradas. Bajo = Azul, Medio = Verde, Alto = Rojo.
-
Use un detector de picos ("golpes") de tipo en la señal muestreada original para buscar aumentos de volumen en la canción. Se registran las áreas de alto volumen.
-
Añadir golpes a los marcos. Para ser honesto, no estoy seguro de que me guste la forma en que lo implementé y podría cambiarlo en el futuro, aunque todavía estoy tratando de encontrar una manera mejor. Pretendo que los "baches" cambien el color DESDE el color de fondo (creado a partir de los 3 rangos filtrados) y luego desaparezca el color del "bump" al color de fondo hasta que aparezca el siguiente "bump".
-
Dibuja un montón de cuadrados y muestra una imagen para (con suerte, correctamente) simular los colores y la duración que producirán las luces. Cada columna de color debe representar una longitud de "intervalo" (lo tengo a 0.05 segundos) de color. Con esto debería poder visualizar la salida esperada del LED?
Es una descripción general rápida del script que deseo implementar en hardware. Sinceramente, no estoy seguro de que funcione, pero no tengo forma de saberlo en este momento.
Tengo muy poca experiencia con el trabajo con hardware y estoy perdido y tengo algunas preguntas. Planeo obtener la señal analógica de dispositivos como un conector de audio del teléfono.
En el script de Matlab he decidido muestrear en calidad de CD 44.1 kHz, pero no estoy seguro de cómo lograrlo en hardware. Algunos han sugerido un ADC dedicado que, según estoy de acuerdo, puede ser una buena idea, pero no estoy seguro de cómo comprar uno. ¿No estoy seguro si necesitaría muestrear a 16 bits para mi propósito? ¿Cuáles son algunos ADC que podrían funcionar para este propósito?
Si tengo un ADC dedicado, necesitaré una forma de transferir la información a otro dispositivo. ¿Cuál es un buen método para hacer esto? Querré realizar el filtrado de la señal muestreada, así como algunos análisis de datos para determinar el valor de 3 pines de salida PWM en un momento dado.
Sobre el tema del filtrado, ya que estoy comenzando con una señal analógica, ¿sería más fácil filtrarla antes de muestrear con un ADC o digitalmente? Me inclino hacia lo digital pero no tengo idea de cómo implementar filtros digitales en un microcontrolador.
También me preocupa la velocidad y el tamaño de la memoria del microcontrolador requerido para procesar los datos. Suponiendo que puedo descubrir cómo conectar un ADC con un microcontrolador para el procesamiento, necesitaría ajustar digitalmente la señal en 3 bandas, así como conservar la señal sin filtrar para el análisis. También necesito poder mantener un promedio de las últimas mil muestras a la vez (¿es un filtro de promedios una buena forma de hacer esto? O un simple total_value / samples_taken ¿una mejor implementación?) En mi diseño actual, planeo actualice los valores PWM para los LED cada 0.05 segundos. ¿Qué tipo de microcontroladores podrían realizar estas tareas, así como interactuar con un ADC?
En general, estoy buscando hardware que pueda realizar las operaciones anteriores y no estoy seguro de qué funcionará o dónde empezar a buscar. Gracias de antemano por cualquier ayuda.