Comment extraire des informations de fréquence à partir d'échantillons de PortAudio utilisant FFTW en C

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

Question

Je veux faire un programme qui enregistre les données audio à l'aide PortAudio (je cette partie fait), puis afficher les informations de fréquence de cette audio enregistré (pour l'instant, je voudrais afficher la fréquence moyenne de chacun des groupe d'échantillons comme ils viennent).

De quelques recherches, je l'ai fait, je sais que je dois faire une FFT. Donc, je googlé pour une bibliothèque pour le faire, en C, et trouvé FFTW.

Cependant, maintenant je suis un peu perdu. Que suis-je censé exactement faire avec les échantillons que j'enreg pour extraire des informations de fréquence d'eux? Quel genre de FFT dois-je utiliser (je suppose que je besoin d'un réel des données 1D?)?

Et une fois que je ferais la FFT, comment puis-je obtenir les informations de fréquence à partir des données qu'il me donne?

EDIT: Je trouve maintenant aussi l'algorithme d'auto-corrélation. Est-ce mieux? Simple?

Merci beaucoup à l'avance, et désolé, je n'ai absolument aucune expérience si cela. J'espère que cela fait au moins un peu de sens.

Était-ce utile?

La solution

Pour convertir vos échantillons audio à un spectre de puissance:

  • si vos données audio est un entier de données convertissent ensuite à virgule flottante
  • choisir une taille de FFT (par exemple N = 1024)
  • appliquer une fonction de fenêtre pour N échantillons de données (par exemple Hanning )
  • utiliser un réel à complexe FFT de taille N pour générer des données de domaine de fréquence
  • calculer l'ampleur de vos données de domaine de fréquence complexe (magnitude = sqrt(re^2 + im^2))
  • en option amplitude de conversion à une échelle logarithmique (dB) (magnitude_dB = 20*log10(magnitude))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top