Comment extraire des informations de fréquence à partir d’échantillons de PortAudio à l’aide de FFTW en C

Je souhaite créer un programme permettant d’enregistrer des données audio à l’aide de PortAudio (cette partie est terminée), puis d’afficher les informations de fréquence de l’audio enregistré (pour l’instant, j’aimerais afficher la fréquence moyenne de chacun des groupes d’échantillons. comme ils entrent).

Des recherches que j’ai effectuées, je sais que je dois faire une FFT. J’ai donc cherché sur Google une bibliothèque pour le faire, en C, et j’ai trouvé FFTW.

Cependant, maintenant je suis un peu perdu. Que dois-je faire exactement avec les échantillons que j’ai enregistrés pour en extraire des informations de fréquence? Quel type de FFT devrais-je utiliser (je suppose que j’aurais besoin de données réelles 1D?)?

Et une fois que je réalise la FFT, comment puis-je obtenir les informations de fréquence à partir des données qu’elles me fournissent?

EDIT: J’ai maintenant trouvé aussi l’algorithme d’autocorrélation. Est-ce mieux? Plus simple?

Merci beaucoup d’avance, et désolé, je n’ai absolument aucune expérience en la matière. J’espère que cela fait au moins un peu de sens.

Pour convertir vos échantillons audio en spectre de puissance:

  • si vos données audio sont des données entières, convertissez-les en virgule flottante
  • choisir une taille FFT (par exemple N = 1024)
  • appliquer une fonction de fenêtre à N échantillons de vos données (par exemple, Hanning )
  • utiliser une FFT réelle à complexe de taille N pour générer des données dans le domaine fréquentiel
  • calculer la magnitude de vos données du domaine fréquentiel complexe ( magnitude = sqrt(re^2 + im^2) )
  • éventuellement convertir la magnitude en échelle logarithmique (dB) ( magnitude_dB = 20*log10(magnitude) )