Este proyecto implementa un clasificador SVM para la detección de vocales utilizando un microcontrolador STM32F3. El sistema adquiere audio mediante un micrófono MEMS INMP441, extrae características MFCC y clasifica la vocal utilizando Máquinas de Vectores de Soporte (SVM).
- Adquisición de Audio: Interfaz I2S con micrófono MEMS INMP441 a 8 kHz.
- Procesamiento de Señal:
- Extracción de 13 coeficientes MFCC por frame.
- Hop de 32 ms (256 muestras).
- Ventanas de 256 ms (8 hops).
- Cálculo de medias y desviaciones estándar de los coeficientes MFCC.
- Clasificación:
- Implementación de múltiples clasificadores SVM "uno contra el resto" usando la librería CMSIS-DSP.
- Interfaz de Usuario:
- Botón de usuario (B1) para iniciar/detener la grabación.
- LED de estado que indica el estado de la grabación.
- Comunicación UART para depuración y reporte de resultados.
clasificador_vocales_svm/
├── Inc/ # Cabeceras de la aplicación
│ ├── app.h # Cabecera principal de la aplicación
│ ├── clasificador_svm.h # Definiciones del clasificador SVM
│ ├── mfcc_features.h # Definiciones de extracción de MFCC
│ └── ... # Otras cabeceras del sistema
├── Src/ # Código fuente
│ ├── app.c # Lógica principal de la aplicación
│ ├── clasificador_svm.c # Implementación de los clasificadores SVM
│ ├── mfcc_features.c # Implementación de extracción de MFCC
│ └── ... # Código de inicialización y HAL
├── STM32CubeIDE/ # Configuración del IDE
├── Drivers/ # Controladores HAL y CMSIS
└── README.md # Documentación del proyecto
- Microcontrolador STM32F3xx
- Micrófono MEMS INMP441
- LED de estado (LD2)
- Botón de usuario (B1)
El sistema está configurado para una frecuencia de muestreo de 8 kHz.
- Tamaño del hop: 256 muestras (32 ms)
- Número de hops por frame: 8
- Duración total del frame: 256 ms
- Número de coeficientes MFCC: 13
- Umbral de detección de señal: 7.5 X nivel de ruido (RMS)
- Filtro de ruido: Suavizado exponencial con alpha = 0.01
- Compilar y flashear el firmware en el microcontrolador usando STM32CubeIDE.
- Presionar el botón de usuario (B1) para iniciar la adquisición de audio. Se mostrará el mensaje "Iniciando grabacion" o "Grabacion detenida" por UART cada que se presione el botón.
- El LED de estado se iluminará mientras el sistema está grabando.
- El sistema procesará el audio en bloques de 256 ms y clasificará las vocales detectadas.
- Los resultados se mostrarán por UART en el siguiente formato:
Donde
Vocal: XXes el número de la vocal detectada.
Para visualizar los escaneos y resultados emitidos por el microcontrolador, debes configurar correctamente tu terminal serial. El sistema opera a una velocidad muy alta para transferir los vectores flotantes a tiempo. El puerto debe estar ajustado concretamente a un Baudrate de 460800 bps (8 bits de datos, sin paridad, 1 bit de parada).
Puedes usar los siguientes programas con interfaz gráfica comúnmente recomendados:
- PuTTY: En Connection type selecciona
Serial. En Serial line especifica tu puerto (ej.COM3) y cambia el Speed (baudrate) a460800. - Tera Term o RealTerm: Asegúrate de seleccionar el número de puerto COM correspondiente e ir a la configuración Serial Port para asignar la misma tasa de audios (460800).
En distribuciones robustas como Ubuntu/Debian, el puerto de tu placa frecuentemente se instanciará sobre /dev/ttyACM0 (o ttyUSB0). Puedes valerte de utilidades de terminal como screen o picocom.
Ejemplo con screen:
sudo screen /dev/ttyACM0 460800(Para salir de la interfaz screen presiona Ctrl+A seguido de K)
Opcionalmente, usando el robusto y ligero picocom:
sudo picocom -b 460800 /dev/ttyACM0- La función
app_run()es el bucle principal de la aplicación. - Las interrupciones de GPIO y I2S manejan la adquisición de datos y el control del sistema.
- Se utiliza la biblioteca CMSIS-DSP para el procesamiento eficiente de señales.
| Función | Tiempo de ejecución |
|---|---|
mfcc_features_compute |
1400 µs |
clasificador_svm_predict |
130 - 160 µs |
- MFCC´s, Ivan Meza Ruiz
- Intuitive understanding of MFCCs, Emmanuel Deruty
- Mel-Frequency Cepstral Coefficients Explained Easily, Valerio Velardo
- Mel Frequency Cepstral Coefficient and its Applications: A Review, IEEE, Open Access
- Aprendizaje Supervisado, Máquinas de Soporte Vectorial, Pablo Huijse Heise