Arduino bot que puede encontrar una señal de sonido específica

Estoy trabajando en mi proyecto de diseño senior. Es un robot controlado por Arduino. Estoy tratando de descubrir la mejor manera de implementar la localización de sonido. Parece sencillo, al menos dos micrófonos, transforma la señal de Fourier, calcula la diferencia de fase.

Mi problema es que me gustaría poder concentrarme en una frecuencia en particular, por lo que no se trata solo de encontrar la fuente con la mayor amplitud. ¿Alguien tiene alguna recomendación sobre cómo hacer algo como esto. No he usado micrófonos nunca, ¿alguien puede recomendarme uno bueno?

Me gustaría que tuviera un rango bastante decente, como una pequeña sala de estar o dormitorio. Estoy pensando en usar una frecuencia muy baja para no tener que preocuparme por una tasa de muestreo tan alta.

Estoy usando un Arduino Uno para cualquiera que esté familiarizado con él. Estoy haciendo ingeniería informática, por lo que estoy bastante familiarizado con los términos de EE, pero todavía estoy aprendiendo sobre el procesamiento de señales este semestre, sé que debería usar algún tipo de filtrado de paso de banda, pero ¿cuál sería la mejor manera de hacerlo?

Si conoce algún ejemplo que hayan hecho otras personas, o esquemas, sería muy útil.

¿Ha consultado algunos documentos sobre el tema para obtener información sobre lo que funciona y lo que no funciona en situaciones de la vida real?
Hagas lo que hagas, necesitarás calibrar el sistema por adelantado. Tienes razón, la amplitud no es la indicada...
He estado investigando mucho, pero realmente no he encontrado un buen material de referencia que esté haciendo algo similar a lo que estoy tratando de hacer. Si encuentras algún buen material, por favor publícalo.
Si desea detectar una sola frecuencia en una señal, no necesita una FFT completa. Simplemente calcule cómo esa señal se correlaciona con un seno y un coseno de esa frecuencia. Esos son dos valores que también te dan la fase.

Respuestas (2)

El " algoritmo de Goertzel " requiere menos recursos (RAM, espacio de código) y menos ciclos de CPU para una sola frecuencia específica.

Wiki tiene un buen conjunto de enlaces para profundizar.

He usado Goertzel en ATMega328P y P8X32A con excelentes resultados. Buena suerte con tu proyecto.

Tarde pero... una biblioteca de Arduino: github.com/jacobrosenthal/Goertzel

La mejor solución es utilizar formación de haces acústicos. Sugeriría publicar en DSP stackexchange, pero puedo darle algunos consejos.

La teoría básica es tener una matriz de micrófonos que separe los micrófonos 1/2 longitud de onda entre sí (obviamente, la longitud de onda depende de la frecuencia de interés).

Esta matriz de micrófonos se puede utilizar para crear un filtro espacial. Luego es posible escanear digitalmente buscando la dirección con la intensidad máxima de la señal. El algoritmo más simple se llama el método de retraso y suma. Matlab tiene una práctica caja de herramientas de matriz en fase para ayudar con la implementación.

Todavía hay algunos trucos de los que debe preocuparse, como el ancho de banda de la señal de entrada. Para la formación de haces, generalmente necesita una banda estrecha para calcular, por lo que es posible que deba implementar un filtro de paso de banda en la señal acústica de entrada porque las señales acústicas son de banda ancha (20 Hz - 20 kHz).

Un buen recurso para comenzar: http://research.ijcaonline.org/volume61/number11/pxc3884758.pdf