2010-11-01 44 views
4

Je tente d'extraire des données de hauteur d'un flux audio. D'après ce que je peux voir, il semble que FFT soit le meilleur algorithme à utiliser.Algorithme FFT: Que se passe-t-il dans IN/OUT? (re: détection de hauteur en temps réel)

Plutôt que de creuser directement dans les maths, quelqu'un pourrait-il m'aider à comprendre ce que fait cet algorithme FFT?

Veuillez ne pas dire quelque chose d'évident comme 'FFT extrait les données de fréquence d'un signal brut.' J'ai besoin du prochain niveau de détail.

Qu'est-ce que je passe, et qu'est-ce que je sors? Une fois que je comprends clairement l'interface, cela m'aidera à comprendre la mise en œuvre. Je suppose que je dois passer dans un tampon audio, j'ai besoin de lui dire combien d'octets utiliser pour chaque calcul (disons les 1024 octets les plus récents de ce tampon). et peut-être que je dois spécifier la gamme d'emplacements que je veux qu'il détecte. Maintenant, il va repasser quoi? Un tableau de bacs de fréquence? Qu'est-ce que c'est?

(Edit :) J'ai trouvé un algorithme C++ à utiliser (si je ne peux le comprendre)

extraits plantent Performous du microphone. De plus, le code est open source. Voici une description de ce que fait l'algorithme, du type qui l'a codé.

  • entrée PCM (avec mise en mémoire tampon)
  • FFT (1024 échantillons à la fois, supprimer 200 échantillons de l'avant de la mémoire tampon après)
  • procédé de réallocation (contre la FFT précédente qui était de 200 échantillons précédemment)
  • filtrage des pics (cette partie pourrait se faire beaucoup mieux ou même omis)
  • la combinaison des pics en ensembles d'harmoniques (que nous appelons la combinaison d'un ton)
  • filtrage temporel des tons (mettre à jour l'ensemble de tonalités DETECT ed plus tôt au lieu de simplement en utilisant les nouveaux détectés)
  • Choisissez la meilleure tonalité vocale (limite de fréquence, pondération, pourrait utiliser le tableau harmonique aussi, mais je ne pense pas que nous faisons)

Mais quelqu'un pourrait aider je comprends comment cela fonctionne? Qu'est-ce qui est envoyé de la FFT à la méthode de réaffectation?

+0

De nombreuses duplications, par ex. [Détection de terrain en temps réel utilisant FFT] (http://stackoverflow.com/questions/1466968/real-time-pitch-detection-using-fft) –

+0

Notez également que 'pitch' n'est pas la même chose que' frequency' - Assurez-vous de bien comprendre la différence car votre solution sera très différente si vous voulez mesurer l'un ou l'autre. –

Répondre

2

Vous trouverez ici un élément de choix. o mettre en œuvre est de faire (2^n échantillons dans) des nombres complexes dans, et 2^n nombres complexes sur, donc peut-être que vous devriez commencer avec cela.Dans le cas particulier d'une transformée en cosinus discrète (DCT), ce qui se passe habituellement est de 2^n échantillons (souvent des flottants), et des valeurs de 2^n, flottent souvent aussi. DCT est une FFT mais qui ne prend que les valeurs réelles et analyse la fonction en termes de cosinus.

Il est intelligent (mais généralement ignoré) de définir une structure pour gérer les valeurs complexes. Traditionnellement, les FFT sont faites sur place, mais cela fonctionne bien si vous ne le faites pas.

Il peut être utile d'instancier une classe qui contient un tampon de travail pour la FFT (si vous ne voulez pas faire la FFT sur place), et de réutiliser cela pour plusieurs FFT.

+0

mais quelles sont ces valeurs qui sortent de la DFT/FFT? –

3

La FFT est juste un bloc de construction dans le processus, et ce n'est peut-être pas la meilleure approche pour la détection de hauteur. Lisez la détection de hauteur et décidez de l'algo que vous voulez utiliser en premier (cela dépendra de ce que vous essayez de mesurer exactement la hauteur de la voix, de l'instrument de musique, d'autres types de sons, etc.). les détails de niveau tels que la FFT (certains, mais pas tous les algorithmes de détection de pas utiliser la FFT interne)

Il y a de nombreuses questions similaires sur déjà, par exemple Real-time pitch detection using FFT et Pitch detection using FFT for trumpet, et il est bon overview material on Wikipedia etc -. lisez-les et décidez si vous souhaitez toujours créer votre propre solution FFT ou utiliser une bibliothèque existante adaptée à votre application particulière

1

Dans va N échantillons de PCM (nombres complexes purement réels). Il y a des N bins du domaine fréquentiel (chaque bin correspondant à une tranche de 1/N de la fréquence d'échantillonnage). Chaque bin est un nombre complexe. Plutôt que des parties réelles et imaginaires, ces valeurs devraient généralement être traitées en format polaire (valeur absolue et argument). La valeur absolue indique la quantité de son près de la fréquence centrale du bin tandis que l'argument indique la phase (à quelle position l'onde sinusoïdale se déplace).

Le plus souvent, les codeurs n'utilisent que l'amplitude (valeur absolue) et rejettent l'angle de phase (argument).