FFT + sonido filtrado = señal de disparo

Estoy tratando de FFT el sonido de entrada en vivo y filtrarlo para tener solo 350 a 500 HZ. Entonces, mi objetivo es encender la luz LED solo cuando algún sonido tiene una frecuencia entre 350-500. Miré los códigos FFT, pero no sé cómo filtrarlos y enviar la señal de salida.

Soy muy nuevo en la placa arduino. Puede suponer que no sé nada sobre la placa arduino o la programación en C. Sea lo más específico posible. Gracias.

¿Por qué no un filtro de paso de banda?
¡Oh! ¡eso es lo que usé en MATLAB! Bueno, si explico lo que hice hasta ahora... porque mi profesor y yo no sabíamos cómo programar una placa arduino, comenzamos con MATLAB y usé FFT y un filtro de paso de banda para obtener el espectro de frecuencia. Sin embargo... No sé cómo implementar el código de MATLAB en el código de arduino... Además de eso, no sé cómo activar la señal de salida :( así que de todos modos, hay un código llamado filtro de paso de banda para arduino como bueno ah... me gustaría que alguien pudiera traducir mi código MATLAB a código arduino...
No, me refiero a un filtro de paso de banda de pasivos. Luego pones un convertidor de frecuencia a voltaje al final y activas eso.
Um.. Gracias por tu información. Todavía no entiendo, pero investigaré sobre 'filtro de paso de banda de pasivos' y 'convertidor de frecuencia a voltaje' y veré qué puedo hacer: D, pero esto es algo que puedo hacer con la placa arduino, ¿verdad? Quise decir el código de la placa arduino.
Tal vez. Pero FFT puede necesitar un poco más de empuje del que puede obtener de un Arduino que no sea Due.
Su código MATLAB debe estar basado en un prototipo de filtro de alguna forma, entonces, ¿cuál era?

Respuestas (2)

Sugeriría construir algún tipo de filtro de paso de banda seguido de un detector de picos y un comparador. Puede construir un filtro de paso de banda RLC o quizás un filtro de paso de banda activo con un par de amplificadores operacionales y algunos componentes pasivos. ¿Qué tan pronunciado debe ser el corte en el filtro? Si necesita un corte muy pronunciado, probablemente necesite un filtro activo.

Alternativamente, puede ejecutar la señal a través de un filtro de paso bajo RC, muestrearla con el Arduino ADC y filtrarla con un filtro de paso de banda DSP. Sé que Matlab tiene una caja de herramientas para construir filtros FIR e IIR; Sugeriría usar eso para calcular los coeficientes de filtro correctos. No creo que Arduino le dé suficientes ciclos para hacer una FFT en tiempo real, y aún tendría que hacer el filtrado de paso bajo y el muestreo con una FFT.

Hola, primero, gracias por el comentario :D ¿Cuál es la diferencia entre RLC y DSP? Estaba tratando de descargar las bibliotecas ADC y FFT y descargué la biblioteca FFT. No sé a dónde me llevará, pero al menos encontré algo, pero no tuve suerte con ADC. ¿Hay una biblioteca ADC que pueda descargar? Como realmente no entiendo bien el programa, esperaba poder descargar esas dos bibliotecas y comenzar a codificar desde allí. Y sí, cuando usé MATLAB, usé la caja de herramientas de paso de banda para filtrar mi sonido.
RLC = resistencia, inductor, capacitor. Un filtro construido con componentes pasivos. Puede encontrar calculadoras en línea para determinar los valores correctos de los componentes. Creo que TI también podría tener algún software de cálculo de filtros que puede probar. Y si desea realizar el procesamiento de señales en un Arduino, probablemente tendrá que desechar la biblioteca ADC y trabajar en metal desnudo. La mayoría de las bibliotecas de Arduino que he visto son terriblemente ineficientes.

"Solo 350 Hz a 500 Hz" es una imposibilidad práctica. Cualquier filtro que erradique totalmente las frecuencias por debajo y por encima de cierto límite tardará un tiempo infinito en procesar la señal, por lo que dado que no ha especificado los parámetros fuera de banda, es un poco difícil recomendarlo. El conocimiento de filtrado digital que tengo podría ayudar un poco: -

ingrese la descripción de la imagen aquí

Como soy un tipo de electrónica, el filtro LP digital emula un filtro RC simple. Este filtro se puede configurar para un límite de paso bajo de 500 Hz y si la frecuencia de muestreo (la tasa a la que está recolectando muestras de ADC) es (digamos) 10 kHz, T = 100 x 10 6 , y CR será 1 2 π F = 318x10 6 .

Eso le da un filtro de paso bajo de primer orden y puede mejorar esto conectando en cascada algunos más para darle una caída más pronunciada. Para obtener un filtro de paso alto, use la misma topología y tenga en cuenta que la salida de paso alto está disponible como se muestra a continuación: -

ingrese la descripción de la imagen aquí

Hay algunas otras campanas y silbatos que se pueden aplicar para hacer que la inclinación del filtro sea más ajustada, pero no entraré en eso aquí porque probablemente no sea necesario o sea demasiado profundo. Tenga en cuenta que "tiempo de muestra" y "tiempo de retardo" son exactamente iguales en los dos diagramas. ¡No fui muy consistente al nombrarlos!

Una vez que haya filtrado adecuadamente la señal, debe calcular el RMS de la señal resultante y establecer un umbral para la activación. Esto puede alimentar una salida Arduino (o cualquier MCU) para enviar una señal al mundo exterior.

Para completar, muchos libros de filtros digitales mostrarán el filtro así: -

ingrese la descripción de la imagen aquí

Es matemáticamente lo mismo, pero está reorganizado como se muestra en muchos artículos sobre filtros digitales IIC (respuesta de impulso infinito). Prefiero las imágenes anteriores porque se relacionan más directamente con el filtro CR analógico simple. Buena suerte.

Gracias por la amable y bien explicada respuesta. Como no soy ingeniero eléctrico... no lo entendí del todo, pero dejaré que mi amigo lo vea y, con suerte, podrá implementarlo :D
@Bri: me alegro de ser de ayuda.