velocidad una tiempo tabla reposo pulsaciones por peso peligroso minuto mas lento latidos hacer frecuencia fisica estirar edad cs6 como cardiaca canciĆ³n cambiar bajas baja audition actividad c# audio signal-processing

c# - una - Latidos por minuto de la entrada de audio en tiempo real



tabla de frecuencia cardiaca por edad (8)

Calcula un powerspectrum con una ventana deslizante FFT: Toma 1024 muestras:

double[] signal = stream.Take(1024);

Alimentarlo a un algoritmo de FFT:

double[] real = new double[signal.Length]; double[] imag = new double[signal.Length); FFT(signal, out real, out imag);

Obtendrás una parte real y una parte imaginaria. NO descarte la parte imaginaria. Haz lo mismo con la parte real que con lo imaginario. Si bien es cierto que la parte imaginaria está pi / 2 fuera de fase con el real, todavía contiene el 50% de la información del espectro.

EDITAR:

Calcule la potencia en lugar de la amplitud para que tenga un número alto cuando es alto y cerca de cero cuando está en silencio:

for (i=0; i < real.Length; i++) real[i] = real[i] * real[i];

Del mismo modo para la parte imaginaria.

for (i=0; i < imag.Length; i++) imag[i] = imag[i] * imag[i];

Ahora tiene un espectro de potencia para las últimas 1024 muestras. Donde la primera parte del espectro son las bajas frecuencias y la última parte del espectro son las altas frecuencias.

Si desea encontrar BPM en la música popular, probablemente debería centrarse en el bajo. Puede captar la intensidad del bajo sumando la parte inferior del espectro de potencia. Qué números usar depende de la frecuencia de muestreo:

double bassIntensity = 0; for (i=8; i < 96; i++) bassIntensity += real[i];

Ahora haz lo mismo de nuevo pero mueve la ventana 256 muestras antes de calcular un nuevo espectro. Ahora terminas calculando bassIntensity para cada 256 muestras.

Esta es una buena entrada para su análisis de BPM. Cuando el bajo está en silencio no tiene ritmo y cuando está alto tiene un ritmo.

¡Buena suerte!

Me gustaría escribir una aplicación simple de C # para monitorear el audio de entrada de línea y darme los latidos actuales (bueno, el promedio móvil) por minuto.

He visto este artículo de gamedev , y eso no fue de ninguna ayuda. Pasé e intenté implementar lo que él estaba haciendo, pero simplemente no estaba funcionando.

Sé que tiene que haber toneladas de soluciones para esto, porque lo hace un montón de software de DJ, pero no estoy teniendo suerte en encontrar ninguna biblioteca de código abierto o instrucciones para hacerlo yo mismo.


En primer lugar, lo que Hallgrim está produciendo no es la función de densidad espectral de potencia. Las periodicidades estadísticas en cualquier señal se pueden sacar a través de una función de autocorrelación. La transformada de Fourier de la señal de autocorrelación es la densidad espectral de potencia. Los picos dominantes en el PSD que no sean a 0 Hz corresponderán a la periodicidad efectiva en la señal (en Hz) ...



Esto no es un problema fácil. Trataré de darle una visión general solamente.

Lo que podrías hacer es algo como lo siguiente:

  1. Calcule el volumen medio (raíz-cuadrado-cuadrado) de la señal en bloques de, digamos, 5 milisegundos. (Nunca habiendo hecho esto antes, no sé qué tamaño de bloque sería).
  2. Tome la transformada de Fourier de la señal "bloqueada", usando el algoritmo FFT.
  3. Encuentra el componente en la señal transformada que tiene la mayor magnitud.

Una transformada de Fourier es básicamente una forma de calcular la potencia de todas las frecuencias presentes en la señal. Si haces eso sobre la señal de "bloqueado", la frecuencia del ritmo será la más fuerte.

Tal vez necesite aplicar primero un filtro para enfocarse en frecuencias específicas (como el bajo) que generalmente contienen la mayor cantidad de información sobre el BPM.


Hay un excelente proyecto llamado Dancing Monkeys, que procesualmente genera pasos de baile DDR de la música. Una gran parte de lo que hace se basa en un análisis de tiempos (necesariamente muy preciso), y su documento de proyecto entra en gran detalle al describir los diversos algoritmos de detección de tiempos y su idoneidad para la tarea. Incluyen referencias a los documentos originales para cada uno de los algoritmos. También publicaron el código de matlab para su solución. Estoy seguro de que entre esos puedes encontrar lo que necesitas.

Está todo disponible aquí: http://monket.net/dancing-monkeys-v2/Main_Page


La manera más fácil de hacerlo es hacer que el usuario toque un botón al ritmo del ritmo y cuente la cantidad de golpes divididos por el tiempo.


No es que tenga una idea de cómo implementar esto, pero desde una perspectiva de ingeniería de audio necesitarías filtrar primero. Los éxitos del bombo serían los primeros en verificar. Un filtro de paso bajo que le da algo por debajo de unos 200Hz debería darle una imagen bastante clara del bombo. También podría ser necesaria una puerta para limpiar cualquier desorden de otros instrumentos con armónicos tan bajos.

El siguiente para verificar sería hits de trampa. Tendrás que eclipsar este. El "crack" de una trampa está a alrededor de 1.5kHz de la memoria, pero definitivamente necesitas cerrar este.

El siguiente desafío sería elaborar un algoritmo para ritmos funky. ¿Cómo encontrarías programáticamente el ritmo 1? Supongo que harías un seguimiento de los tiempos anteriores y usar un patrón que coincida con algo o con otro. Entonces, probablemente necesitarías algunas barras para encontrar el ritmo con precisión. Luego están los problemas de tiempo como 4/4, 3/4, 6/8, wow, ¡no me puedo imaginar lo que se requeriría para hacer esto con precisión! Estoy seguro de que valdrá mucho dinero para las compañías de hardware / software de audio.