Explicación
En este proyecto de Micropython, quería construir un analizador de espectro de sonido barato / pequeño para identificar tonos específicos durante las pruebas. Inicialmente intenté conectar el sensor de sonido Adafruit con un ADC y RPI, pero luego enfrenté muchos problemas de tiempo y, por lo tanto, fui al microcontrolador ARM-M4, que es una solución bastante buena y directa. En git-hub, encontré un código FFT escrito en el ensamblador ARM por Peter Hinch, que me permitió obtener un cálculo de espectro de frecuencias a bordo de una matriz, basado en el algoritmo Cooley-Tukey.
Lasiguienteimagenilustraelespectro(arriba)enunahabitaciónsilenciosa,lagráficacentralmuestralosgradientescalculadosdeldominioylaúltimareactividaddelostonosespecíficos.Elsistemacapturacontinuamente2**10muestrasen0.1s>10Hz-5kHz,calculalaFFTyreenvíalamatrizdesalidaalaPCen15ms.
El problema se encuentra en los tonos armónicos que aparecen exactamente a 1,2,3,4,5, .. kHz (el gráfico se tomó en una habitación silenciosa). El segundo problema aparece cuando hay un poco más de ruido; los picos (gráfico inferior) aparecen alrededor de los tonos armónicos +/- 240Hz, ¿alias? La gráfica inferior muestra la reactividad de los tonos.
Intentado:
- No hay poder; todas las frecuencias cero, excepto algunas frecuencias bajas muestran una amplitud menor.
- Configuración de la FFT para muestras de 0.5s / 0.1s / 0.05s / 0.01s y 512/1024/2048; pero muestra los mismos picos a la misma frecuencia.
- Tres canales ADC diferentes en el Pyboard.
- Conexiones 3V3 y GND.
- 2-5V regulado externo con conexión a tierra compartida (computadora portátil sin cargo). (lo empeora; más ruido)
¿Cuál es la causa más probable de este comportamiento? Circuito de placa / Electretamplificador / código FFT / alimentación USB?
¿Alternativas?
¿Alguien tiene experiencia o tiene una mejor alternativa para un análisis de espectro a bordo barato?
- Amplificador de sensor de sonido Me (LM386).
- Amplificador del sensor de sonido Grove (LM386).
- Amplificador del sensor de sonido Adafruit (MAX4466).