Diseño de filtro de audio de paso bajo

Quiero que mi proyecto Arduino escuche la música ambiental y sincronice la salida del espectáculo de luces con el ritmo.

Parece que hacer la detección de BPM correctamente es diabólicamente difícil en el software, pero si tu música es lo suficientemente tonta por naturaleza y usas un poco de hardware, puedes hacer trampa y salirte con la tuya.

Entonces, mi plan es conectar una placa de conexión de micrófono/amplificador operacional a un filtro de paso bajo pasivo simple de primer orden y muestrear la entrada en una interrupción cada 5 ms aproximadamente. Audacity me dice que un ritmo de bajo dura alrededor de 15 ms, por lo que cada 5 ms debería ser suficiente para asegurarme de que no, er, "pierdo el ritmo".

Si mi muestra de paso bajo está por encima de un umbral de volumen, registraré el tiempo desde el último latido, haré algún tipo de cálculo de promedio ponderado sobre las últimas muestras y eso me permitirá predecir cuántos ms faltan para la siguiente. beat (algunos otros trucos de software pueden ser necesarios para tener en cuenta las caídas de graves y los breakbeats ).

En primer lugar, ¿tengo más o menos la idea correcta?

En segundo lugar, ¿alguien puede decirme qué valores de orden de magnitud necesitaré para la resistencia y el capacitor? Me imagino que quiero que mi frecuencia de corte sea algo así como 500-1000Hz. También reúno la resistencia del resto de mi circuito, pero no estoy seguro de dónde medir esa resistencia. Jugar un poco con esta herramienta me da respuestas que parecen razonables (500 Hz = 330 Ω/1uF), pero no sé lo suficiente como para saber realmente.

Un esquema de ejemplo que muestre dónde mido la resistencia del circuito existente y dónde va el filtro de paso bajo en el contexto del resto sería muy útil.

No creo que su detección de BPM vaya a funcionar muy bien. Debería intentar simularlo en una computadora primero.
No había pensado en eso, pero sería fácil de hacer, buen consejo.
Puedes hacerlo con LTspice. Guarde su archivo de audio como un archivo WAV y apunte una fuente de voltaje en su esquema a este archivo. La simulación llevará MUCHO tiempo, probablemente al menos 4 veces la duración de su archivo de audio. Sin embargo, esto sigue siendo bastante rápido en comparación con la secuencia "construir/codificar/compilar/programar/probar".

Respuestas (4)

Una buena parte del contenido espectral de la mayoría de la música está por debajo de 500-1000 Hz, y con una caída de filtro de primer orden bastante débil de 6 dB/octava, su forma de onda no se verá afectada. Se requeriría un filtro de orden mucho más alto, preferiblemente con un corte mucho más bajo (440 Hz es el concierto A, los golpes de bajo deberían estar muy por debajo de eso), con detección de envolvente (un diodo y una tapa).

Como no le importa la fidelidad real del audio, un filtro pasivo debería ser suficiente, aunque el orden requerido puede reducir significativamente su amplitud y reducir la resolución efectiva.

Apéndice:

Solo para reiterar las preocupaciones de los demás, el principal problema de filtrar audio de esta manera es que si tiene un golpe muy fuerte (por ejemplo, choque de platillos), aún pasará por su LPF (filtro de paso bajo) y le dará picos que usted puede interpretar mal. Otro problema sería la incapacidad de lidiar con mucho rango dinámico (la música se vuelve más suave o más fuerte); aunque es posible que pueda agregar algún umbral variable.

Como ha dicho correctamente, este enfoque funcionará mejor con Techno, pero aún así podría no ser muy bueno.

Derp. Leí completamente mal el gráfico de frecuencia que hice, estoy mirando más a 50-60 Hz. ¿Tal vez quiero un filtro de paso de banda en su lugar?
@Rob, un filtro de paso bajo estaría bien. El audio ya estará limitado en banda a 20-20k. Agregué algo más a mi respuesta también
Sin embargo, no veo por qué un choque de platillos aparecería como un pico por debajo de mi corte de 60 Hz. ¿Hay armónicos significativos de gama baja incluso para platillos?
@Rob, hay algunos, pero el punto principal es que son relativamente fuertes y, a menos que tenga un LPF de orden bastante alto, pueden pasar (y otros golpes fuertes) y aún así tener una amplitud lo suficientemente alta como para confundirse con un golpe de bajo.
Ah, ya veo, estás diciendo que lo crítico es tener un corte agudo en mi frecuencia objetivo. No estoy demasiado orgulloso de usar un IC opamp con un filtro de paso bajo de orden superior incluido, tal vez con un potenciómetro para ajustar la frecuencia de corte. Ahora a ver si existe...

Odio vincularme a wikipedia para obtener respuestas, pero aquí hay una buena explicación: http://en.wikipedia.org/wiki/Low-pass_filter en Filtros electrónicos de paso bajo

Sin embargo, tengo algunas preocupaciones con tu plan. Un filtro de primer orden le dará una caída de −6 dB por octava. Esto significa que si establece su frecuencia de corte en 500Hz, solo tendrá una caída de 6db por 1khz. En la música, están sucediendo muchas cosas en la frecuencia inferior a 5khz que aún pasarás por una cantidad decente. El filtrado digital (cálculo de promedio ponderado) que está haciendo puede ayudarlo, pero no está seguro.

Puede obtener una mejor respuesta de frecuencia yendo a un filtro de orden superior. De cualquier manera, creo que será mucho más feliz con un filtro de paso bajo opamp. También puede buscar algún filtrado digital, no hay nada de qué asustarse.

500 Hz a 5000 kHz es 1 década , no octava (sería 500-1000)
Opps, son 20db por década, 6db por octava, lo cambié.
Leí la entrada de Wikipedia, pero se vuelve muy teórica muy rápidamente, lo que creo que nubla mi comprensión práctica. ¿Los filtros de paso bajo del amplificador operacional existen como partes discretas o tengo que hacer los míos?
@Robert: puede comprarlos como partes discretas, pero probablemente sea mejor para este propósito especial solo hacer los suyos. Los amplificadores operacionales vienen (en su mayoría) en paquetes simples, dobles o cuádruples. Debe colocar los condensadores y las resistencias para hacer un filtro, y no olvide encender el opamp.

Acordamos que la sustancia de la música ocurre por encima del rango base, entonces, ¿por qué no enviar dos señales, ejecutar lpf en una y luego ejecutar una puerta dura en la otra? De esa forma, captura tanto los graves rítmicos como los sonidos máximos. :)

Se agradecerían algunos detalles más en su respuesta. Probablemente sería útil definir "lpf" y "hard gate".

Si espera recuperar una forma de onda de 200 Hz (abajo en los graves), necesita muestrear MÍNIMAMENTE a 400 Hz para el caso ideal, pero 450 Hz sería mejor. Si su filtro no es bueno (y probablemente no lo sea), tendrá un alias que arruinará sus algoritmos de detección.

NECESITA que su frecuencia de muestreo sea al menos el doble de la frecuencia de corte de su filtro para evitar el aliasing. Cuanto más crudo sea el filtro, más rápido más allá de ese ideal matemático necesitará muestrear. Con un filtro de pared de ladrillo IDEAL de 500 Hz, debe muestrear a intervalos de 1 ms.