¿Cómo extraer información de frecuencia a partir de muestras de PortAudio utilizando FFTW en C

StackOverflow https://stackoverflow.com/questions/3058236

Pregunta

Quiero hacer un programa que grabar los datos de audio utilizando PortAudio (he hecho esta parte) y luego mostrar la información de frecuencia de audio grabado que (por ahora, me gustaría mostrar la frecuencia media de cada una de las grupo de muestras como vienen in).

A partir de una investigación que he hecho, sé que tengo que hacer una FFT. Así que busqué en Google para una biblioteca de hacer eso, en C, y encontré FFTW.

Sin embargo, ahora estoy un poco perdido. ¿Qué es exactamente se supone que tengo que hacer con las muestras que he grabado para extraer alguna información de frecuencia de ellos? ¿Qué tipo de FFT debo usar (supongo que iba a necesitar un datos reales 1D?)?

Y una vez que lo haría la FFT, ¿cómo puedo obtener la información de frecuencia a partir de los datos que me da?

EDIT: ahora se encuentra también el algoritmo de auto-correlación. ¿Es mejor? Más simple?

Muchas gracias de antemano, y lo siento, no tengo absolutamente ninguna experiencia si esto. Espero que tiene al menos un poco de sentido.

¿Fue útil?

Solución

Para convertir sus muestras de audio a un espectro de potencia:

  • Si los datos de audio es número entero de datos a continuación, lo convierten en punto flotante
  • escoger un tamaño de FFT (por ejemplo, N = 1024)
  • aplicar una función de ventana para N muestras de sus datos (por ejemplo, Hanning )
  • utilizar una FFT-real a complejo de tamaño N para generar datos de dominio de frecuencia
  • calcular la magnitud de los datos de dominio de la frecuencia compleja (magnitude = sqrt(re^2 + im^2))
  • opcionalmente convertir magnitud a una escala logarítmica (dB) (magnitude_dB = 20*log10(magnitude))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top