calculadora de pulsaciones por minuto

3

Básicamente, quiero crear una calculadora de BPM en un ATMega1284.

Ya tengo un micrófono conectado al ADC (con potenciómetro). Probablemente pueda calcular el BPM obteniendo muestras durante un tiempo y obteniendo el nivel de sonido promedio. Desde allí puedo verificar los picos comparándolos con el nivel de sonido promedio. Si su 6db (el doble del volumen) suele ser un pico / ritmo en la música. Pero luego tenemos octavas notas y otras cosas que arruinan el BPM ya que son más rápidos. Y también la música en general podría aumentar en coro ...

Solo necesito una forma barata de acercarme lo suficiente y hacer que se sienta como si hubiera bajado el BPM. Tal vez solo calcule el BPM durante los primeros 4-8 segundos y luego continúe ...

El microcontrolador de la calculadora puede transferir el BPM a través de UART a otro microcontrolador y, a partir de ese momento, solo puedo transferir la intensidad del volumen. El proyecto es básicamente un espectáculo de luces.

Algo de lo que necesito. No estoy seguro de cómo ver el tiempo transcurrido entre los cálculos. En C ++ en la computadora, simplemente revisaba el reloj en la computadora. ¿Cómo en AVR?

    
pregunta John

4 respuestas

1

Para hacer algo bueno, tendrá que muestrear el audio a una cierta frecuencia establecida (generalmente en algunas miles de muestras por segundo). Puede averiguar cuántas muestras por tiempo tiene y calcular a partir de eso para obtener los tiempos por minuto. minuto.
Como han dicho otros, sin embargo, esto no es realmente un trabajo para un pequeño ATMega. Para realizar el trabajo con cualquier tipo de precisión, deberá realizar un procesamiento de señal bastante considerable: un procesador de 8 bits a 20 MHz no lo hará a menos que sea un genio absoluto de DSP que pueda encontrar un algoritmo nuevo, increíblemente eficiente. implementarlo en un microprocesador de 8 bits en lugar de un DSP.

Si la precisión no es importante, podría hacer lo que planeó (detectar picos). El número de muestras entre picos se puede usar para calcular los BPM. Digamos que está muestreando el audio a 8000 muestras por segundo, y encuentra que los picos están separados por 4000 muestras. Eso sería 2 picos por segundo, o 120 latidos por minuto.

Sin embargo, como ya sabe, el método simple de detección de picos le proporcionará muchos picos falsos. Es posible que pueda rechazar los picos que están demasiado cerca, pero debe estar preparado para que los resultados sean bastante malos.

    
respondido por el JRE
0

Aparece su µC's los periféricos incluyen una variedad de contadores / temporizadores, al menos uno de los cuales sin duda será compatible con un ISR diseñado para determinar el tiempo entre picos de ADC de ventana que reflejan el ritmo.

    
respondido por el EM Fields
-1

Esto probablemente se moverá ya que no es específico de EE.

Dicho esto, Arduino tiene una función millis () que te dirá millis desde el inicio, y probablemente necesitarás un FFT para averiguar el resto.

    
respondido por el kolosy
-7

La mejor manera sería usar un oscilador de cristal conectado a la ATmega, ya que esto le dará las lecturas más confiables.

La forma en que funciona un oscilador de cristal (si no lo sabe) es mediante el uso de la resonancia mecánica de un cristal de cuarzo vibrante para crear una señal eléctrica con una frecuencia muy precisa, y luego puede calcular el tiempo desde esta frecuencia

Sin embargo, si no quieres conectar cosas adicionales, entonces puedes usar el coro de la canción, ya que se repite varias veces y siempre es el mismo. Aunque esto requiere mucho tiempo, es más difícil y requerirá que una gran parte de la canción ya termine antes de que puedas leerla, lo que puede o no ser un obstáculo dependiendo de tu objetivo final ... ¡Pero te recomiendo el oscilador de cristal!

    
respondido por el Sasha

Lea otras preguntas en las etiquetas