Transformée de Fourier discrète - trouver rapidement le fondamental?


9

Tout d'abord, je m'excuse parce que je suis un développeur de logiciels et cela fait très longtemps que je n'ai pas plongé dans les mathématiques pures, donc ma question peut sembler stupide. J'espère que non.

Le contexte est la reconnaissance du pitch en musique.

Si vous prenez une note de musique et y appliquez une transformée de Fourier, vous aurez une somme infinie d'amplitudes pour des fréquences données. Par exemple, si je joue une note dont la fondamentale est , sur n'importe quel instrument, après la transformée de Fourier, j'aurai des harmoniques à . Chaque fréquence aura une amplitude donnée qui définit le timbre de l'instrument (piano, voix, trompette, ... tous suivent ce loaw, mais vous aurez des amplitudes différentes pour chaque harmonique)FF,2F,3F,,nF

Maintenant , ce que je voudrais faire est d'un signal audio donné, trouver . Juste ça. C'est plus compliqué qu'il n'y paraît car vous aurez toujours du bruit de fond et ainsi de suite ... De plus, n'est pas forcément la fréquence avec la plus grande amplitude!FF

Donc, mon idée pour trouver est d'appliquer une DFT (enfin une FFT pour la vitesse) et de trouver une fréquence , de sorte que soit maximal dans la sortie FFT.FFF+2F+3F++nF

Pensez-vous que ce soit possible? Pensez-vous que c'est possible en très peu de temps (disons <5 millisecondes)?


Cela pourrait probablement être une réponse: edaboard.com/thread197897.html

Eh bien, oui, mais c'est une méthode différente, n'est-ce pas? À
mon humble avis

Réponses:


6

Ce que vous décrivez est très similaire à la méthode d'estimation de la hauteur du spectre des produits harmoniques, comme indiqué dans cet article CCRMA de Stanford .

Une FFT ne vous donne pas une "somme infinie d'amplitudes", mais un nombre fini de cases de résultat en fonction de la longueur de la FFT.

5 mS n'est qu'une période d'une note de 200 Hz et seulement une fraction d'une période inférieure à 200 Hz. La reconnaissance de la hauteur musicale nécessite généralement d'entendre ou d'analyser un nombre multiple de périodes de la périodicité d'un son lancé. Et beaucoup de musique utilise des notes inférieures à G2. Si vous avez une longueur de données suffisante, le calcul d'une estimation de hauteur à partir de ces données peut prendre seulement de l'ordre des microsecondes plutôt que des millisecondes sur un PC ou un appareil mobile moderne.


Bon point. Mais si vous avez déjà 2F et 3F, vous n'avez pas vraiment besoin de F, n'est-ce pas? Dans votre exemple, 2F = 400hz et 3F = 600hz, vous pouvez donc probablement découvrir que F était 200 même sans entendre suffisamment de son pour avoir une période de 5 ms, n'est-ce pas? J'ai également entendu parler de la transformation en ondelettes. Pensez-vous que c'est une meilleure méthode pour le faire?
Dinaiz

@Dinaiz: Cela dépend de la source du son aigu et de si ces fragments de fréquences harmoniques sont réellement stationnaires ou non. Les ondelettes sont une question complètement distincte.
hotpaw2

Cette méthode ne convient donc pas pour trouver f0 en "presque temps réel". Dans l'état actuel de la technique, est-il possible de trouver f0, en moins de quelques millisecondes, avec n'importe quel instrument, ou est-ce une cause perdue et je dois abandonner ma quête? : D
Dinaiz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.