J'essaie de créer un programme de détection de hauteur qui extrait les fréquences des pics dans un spectre de puissance obtenu à partir d'une FFT ( fftpack
). J'extrais les fréquences de crête de mon spectre en utilisant le premier estimateur de Quinn pour interpoler entre les nombres de cases. Ce schéma semble bien fonctionner sous certaines conditions. Par exemple, en utilisant une fonction de fenêtre rectangulaire avec une taille de fenêtre de 1024 et un taux d'échantillonnage de 16000, mon algorithme identifie correctement la fréquence d'un ton A440 purcomme 440,06 avec une deuxième fréquence partielle de 880,1. Cependant, dans d'autres conditions, cela produit des résultats inexacts. Si je change la fréquence d'échantillonnage (par exemple à 8000) ou la taille de la fenêtre (par exemple à 2048), il identifie toujours correctement le premier partiel comme 440, mais le second partiel se situe quelque part autour de 892. Le problème devient encore pire pour les tons inharmoniques comme ceux produit par une guitare ou un piano.
Ma question générale est: de quelle manière la fréquence d'échantillonnage, la taille de la fenêtre et la fonction de la fenêtre affectent-elles l'estimation de fréquence des pics FFT? Mon hypothèse était que le simple fait d'augmenter la résolution du spectre augmenterait la précision de l'estimation de la fréquence de crête, mais ce n'est clairement pas mon expérience (le remplissage nul n'aide pas non plus). Je suppose également que le choix de la fonction de fenêtre n'aura pas beaucoup d'effet car les fuites spectrales ne devraient pas changer l' emplacement du pic (bien que, maintenant que j'y pense, les fuites spectrales pourraient potentiellement influencer l'estimation de fréquence interpolée si les amplitudes des bacs adjacents à les pics sont artificiellement augmentés par les fuites d'autres pics ...).
Des pensées?