FFT Beat Detection Circuit

5

Hace más de un año que trato de descubrir tanto el aspecto electrónico como el aspecto de software de mi proyecto.

De alguna manera he logrado lograr que la idea general funcione, Los golpes que he venido en el camino me están estresando francamente.

Descripción y objetivo del proyecto:

Básicamente, un dispositivo de detección de latido con un factor de forma muy pequeño.

Estoy usando un Arduino Uno como dispositivo de creación de prototipos, pero tengo un Arduino Mega, Sparkfun Micro y varias otras placas de desarrollo se puede usar si es necesario.

Quiero que el microcontrolador lea audio analógico, lo convierta a FFT o FHT o Cualquier otro dato fácilmente traducible, lea las frecuencias más bajas donde se encuentra el Se presenta la música, y finalmente se mide el tiempo entre cada patada para calcula el BPM de la canción.

El rango de frecuencia donde está presente el Kick en la música es alrededor del rango de 45Hz a 55Hz y es más distinguible en esa área cuando lo miras en un analizador de espectro.

Esto también debería ser correcto cuando se realiza FFT / FHT con un microcontrolador Debido a la naturaleza de la conversión de analógico a digital en bruto a FFT / FHT.

Sin embargo, puede diferir y es más probable que difiera si se usa un micrófono para escuchar el audio.

Lo que he logrado con éxito:

  • Ensamblar un circuito que permite inyectar audio a una entrada analógica del arduino. El circuito se puede encontrar aquí:

diagrama de bloques http://interface.khm.de/wp-content/uploads /2008/11/arduinoaudiofig1.gif

  • Implementando la biblioteca FHT de Open Music Labs para convertir el audio analógico a un espectro de frecuencias. La biblioteca se puede encontrar aquí: enlace

Por lo tanto, los dos componentes más importantes del proyecto están en su lugar.

Con qué tengo problemas:

  • Obtengo un pico constante en el área de frecuencia más baja del espectro que está presente en todo momento. Este es un problema porque el Kick de la música está en esa área.

Cosas que he probado:

  • Un chico en youtube trató de ayudarme dándome instrucciones simples y me dijo que usara un condensador de 1uF entre la entrada de Audio Surce y la entrada analógica, además de probar un pull-up o un resistor de pull-down. en la entrada analógica.

Resultados (cita):

  

Cuando se usa un pull-up, el pico de frecuencia baja aumenta, cuando se usa un   desplegable, la baja frecuencia desaparece.

     

Así que el desplegable es el camino a seguir.

     

SIN EMBARGO, con el presente desplegable, los armónicos del tono sinusal son   introducido pero sin pico en el área de frecuencia inferior siempre que no haya sonido   presente.

     

Con el menú desplegable NO presente, los armónicos desaparecen, pero el pico es   presente.

  • Implementando los filtros FIR e IIR. Resultados: el audio sigue reaccionando a todas las frecuencias.

¿Qué más puedo probar antes de lanzar este proyecto por la ventana?

Los enfoques y las sugerencias deben estar limitados por componentes y preferiblemente orientados al software.

El órgano de la luz debe tener un bajo consumo de energía y muy pocos componentes físicos, y si se requieren componentes físicos, deben ser pequeños y montados en la superficie.

    
pregunta xaid

1 respuesta

4

Creo que el chico de YouTube podría haber estado en el camino correcto, pero la confusión es que la "conexión a tierra" suele estar centrada entre dos suministros para la mayoría de los circuitos analógicos y coexistente con la fuente más baja para la mayoría de los circuitos digitales. Entonces, ya sea que lo hayas subido o bajado, el nivel de DC ya se recortó, y todo lo que se agregó a eso (tu música) también se recortó automáticamente.

En vez de eso, necesitas tirarlo a un punto a mitad de camino. La forma más fácil de hacerlo es simplemente tirar hacia arriba y hacia abajo al mismo tiempo, utilizando dos resistencias. Eso debería centrarlo bien, con el nivel exacto determinado por la relación de las dos resistencias.

También a considerar:

  • La frecuencia de corte es 1 / (2 * pi * R * C) en hercios, donde R es la combinación paralela de los dos resistores en ohmios y C es el condensador en faradios. Querrá ser aproximadamente 1/10 de la frecuencia más baja que desee detectar.
  • Las dos resistencias en paralelo (y la única que usaste antes) cargarán la fuente de audio. Si es mayor que unos pocos kohms, no me preocuparía por eso.
  • Las dos resistencias en serie tomarán corriente de la fuente de alimentación. Si estás corriendo desde la pared y has satisfecho el punto anterior, eso no será un problema. Las baterías pueden ser diferentes.

Actualización:

De una discusión bastante larga en los comentarios y un enlace a un foro diferente ( enlace ), parece que el problema tiene que ver con el desplazamiento de DC. El esquema original intenta resolver esto, pero incluye un ajuste innecesario que es fácil equivocarse. Aquí hay una mejor manera de hacerlo:

simular este circuito : esquema creado usando CircuitLab

Asegúrate de mantener R1 y R2 iguales. La frecuencia de corte se describe arriba.

El propósito del ajuste original parece ser ajustar la compensación de CC para que coincida con el ADC, pero espero una variación suficiente de otras fuentes para que sea más fácil simplemente cerrarla y usar un paso alto digital para finalizar el trabajo.

Algunos otros cambios:

  • Cambié a resistencias de 10k en lugar de 100k. Esto proporciona una impedancia de fuente más baja al ADC para el nivel de CC. Esto requiere un límite más grande para el mismo corte, que generalmente no es un problema.
  • Agregué una resistencia para completar el filtro anti-alias básico. Use la misma ecuación para la frecuencia de corte para ubicarla aproximadamente el doble de la frecuencia más alta que le interesa (10x sería mejor, pero eso podría estar pidiendo demasiado al ADC con este tipo de filtro), luego ejecute el ADC al menos 10 veces más. frecuencia de corte.

Como se muestra, las frecuencias de corte son de ~ 1.5Hz y ~ 48kHz, por lo que querrá probar el canal ADC al menos a 500kHz. ¿Por qué no 48kHz como audio estándar? Porque este filtro se quita muy lentamente. Solo en frecuencias mucho más altas, finalmente atenúa el ruido lo suficiente como para no alterar la señal cuando se modifica el alias. Si no desea ejecutar el FHT tan rápido, puede usar un paso bajo analógico más complejo, o puede usar un paso bajo digital que se ejecute a esa velocidad seguido de la eliminación de la mayoría de las muestras.

    
respondido por el AaronD

Lea otras preguntas en las etiquetas