En la Parte 1 preparamos el conjunto de datos y en la Parte 2 construimos a mano características de 33 dimensiones y entrenamos un pequeño modelo de regresión logística multinomial. En esta tercera y última parte desplegamos el modelo en un Raspberry Pi Pico, transmitimos características en vivo desde un micrófono y comentamos qué funcionó y qué no funcionó.
Resumen de arquitectura en tiempo de ejecución: un PC captura audio, extrae vectores de 33 dimensiones y envía una línea CSV por ventana a través de USB-CDC. El Pico recibe y analiza la CSV, aplica z-score usando estadísticas de entrenamiento, calcula una capa lineal y softmax, y estabiliza las salidas con una pequeña máquina de estados con histéresis. Si alguna clase de alarma está activa, un LED se enciende como indicador visual.
Captura en vivo y emisor en Python: reutilizamos la lógica de extracción de la Parte 2 para garantizar la misma ordenación de características que en el entrenamiento. El script envía mensajes de control PING y RESET y una línea CSV por fragmento. El preprocesado incluye normalización por pico, preénfasis opcional, ventanas de 25 ms con salto de 10 ms y ventana Hann. Las 33 características incluyen medias y desviaciones de 12 bandas Goertzel con normalización interna, además de RMS, centroide espectral, rolloff, ZCR y flatness. Un buffer circular y la temporización por hop permiten obtener una decisión aproximadamente cada salto una vez que la primera ventana está completa. La comunicación con el Pico se hace por USB-CDC a 115200 baudios.
Firmware de inferencia en C++: en cada vector entrante el firmware realiza cuatro tareas sencillas. Primero parsea la línea CSV en un arreglo de flotantes del tamaño FEATS. Segundo aplica z-score usando MU y SIGMA calculados en entrenamiento. Tercero ejecuta la regresión logística con bias y pesos y aplica softmax estable con la técnica de max-log. Cuarto actualiza una FSM por etiqueta con umbrales y conteo de frames consecutivos para evitar parpadeos. Si algún estado de alerta está activo, el LED se pone a 1, en caso contrario a 0.
Detalles prácticos del firmware: se implementó softmax numéricamente estable. Las FSM por etiqueta vienen con parámetros por defecto: smoke_alarm con umbral de encendido más estricto, doorbell y baby con requisitos de actividad moderados, y la clase other nunca enciende el LED. Además el firmware responde a comandos USB como PING para comprobación de salud y RESET para limpiar el estado de las FSM.
Demostración en vídeo: se grabó un breve clip mostrando los logs en el terminal mientras se reproducen audios de timbre, bebé y alarma de humo. En la demo se observa la etiqueta dominante en la parte superior, las banderas active que indican las decisiones de la FSM y la correlación del estado del LED con las clases de alarma.
Latencia frente a estabilidad: hay dos perillas que afectan la latencia percibida. El tamaño del fragmento determina la rapidez de decisión, fragmentos más cortos son más rápidos pero más ruidosos. La FSM con parámetros th_on, th_off y need_on controla el compromiso entre detecciones rápidas y falsos positivos. Un ajuste equilibrado que funcionó en pruebas es fragmentos de 0.8 segundos con hop de 0.2 segundos y requisitos de need_on diferentes por clase: smoke_alarm puede necesitar 1 frame, doorbell 2 frames, baby 2 a 3 frames.
Limitaciones conocidas y siguientes pasos: existe shift de dominio cuando las clases proceden de una sola fuente, lo que dificulta el cambio de sala o micrófono. La clase baby tiene recall débil en audio real y a menudo se confunde con doorbell u other. La clase other es potencialmente infinita y siempre hace falta añadir negativos difíciles. En esta demostración la extracción de características se hace en el PC; el Pico solo ejecuta la inferencia, por lo que un próximo paso sería portar la extracción al dispositivo para completar el pipeline on-device.
Lecciones aprendidas: modelos pequeños y explicables como regresión logística son excelentes para microcontroladores por ser rápidos, fáciles de depurar y predecibles. Mantener la paridad de características entre entrenamiento y runtime es obligatorio; cualquier desajuste en orden o normalización puede dominar las salidas. Las FSM importan tanto como el clasificador para la experiencia de usuario en el mundo real, y los umbrales son decisiones de producto. La diversidad de datos suele mejorar la robustez más que ajustes de modelo. Finalmente, la latencia percibida es una propiedad del pipeline completo: tamaño de fragmento, hop y FSM importan más que las FLOPs del clasificador.
Punteros al repositorio: el emisor en Python se encuentra en python/simulation.py y contiene extracción de características en vivo y envío por USB-CDC. El firmware con la inferencia, FSM y control de LED está en firmware/main.cpp. Los parámetros del modelo y las normalizaciones auto-generadas están en firmware/model_params.hpp. Si pruebas el proyecto, sería muy útil recibir feedback sobre cómo se comporta en tu micrófono y habitación y contribuciones con datos más diversos.
Sobre Q2BSTUDIO: somos una empresa de desarrollo de software y aplicaciones a medida especializada en soluciones a medida para empresas. Nuestro equipo ofrece servicios de software a medida, inteligencia artificial aplicada, ia para empresas, agentes IA y consultoría en power bi. También cubrimos ciberseguridad, servicios cloud aws y azure y servicios inteligencia de negocio. Desarrollamos aplicaciones a medida que integran modelos de inteligencia artificial en dispositivos edge como Raspberry Pi Pico, implementamos pipelines fiables, y ofrecemos soporte para despliegue seguro en la nube y on-premise.
Por qué elegir Q2BSTUDIO: combinamos experiencia en desarrollo a medida y software a medida con pericia en inteligencia artificial y ciberseguridad para entregar soluciones completas. Podemos ayudar a portar la extracción de características al dispositivo, optimizar modelos para MCU, diseñar máquinas de estados para estabilidad y reducir latencia. También ofrecemos integración con servicios cloud aws y azure, desarrollo de agentes IA y cuadros de mando con power bi como parte de servicios inteligencia de negocio.
Palabras clave para búsquedas: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA, power bi.
Gracias por leer esta serie. Si te interesa que Q2BSTUDIO te ayude a llevar un prototipo a producción, o quieres colaborar añadiendo datos más diversos al repositorio, contáctanos y crearemos juntos una solución a medida que cumpla tus requisitos de rendimiento, seguridad y coste.