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.
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.
"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: -
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 , y CR será = 318x10 .
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: -
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í: -
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.
Ignacio Vázquez-Abrams
Bri
Ignacio Vázquez-Abrams
Bri
Ignacio Vázquez-Abrams
Andy alias