Je voudrais utiliser STFT pour l'analyse multipitch. Je me rends compte que la détection des partiels existant dans le signal n'est qu'un début. J'ai quand même un problème avec ça.
Disons que j'ai un signal échantillonné avec une fréquence «CD» 44100Hz
. Avec une fenêtre d' 1024
échantillons, j'obtiens une résolution de la fréquence bin 22500Hz/512=43Hz
. Cela suffit seulement pour discerner des notes de piano hautes comme:
C5 = 523.251Hz
et C#5 = 554.365
.
Je pensais que 1024
c'était une assez grande fenêtre. Mais peut-être que ce n'est pas le cas et que des fenêtres normalement plus grandes sont utilisées pour détecter les partiels?
La résolution en fréquence peut-elle être augmentée avec une autre méthode que l'augmentation de la taille de la fenêtre, ce qui aggrave la résolution temporelle? J'ai pensé à deux méthodes:
Méthode 1:
- Divisez le signal en bandes de fréquences avec des filtres passe-bande (par exemple
0-11.25Hz
et11.25-22.5Hz
). - Sous-échantillonner les bandes plus hautes pour que les hautes fréquences d'origine soient désormais des basses fréquences (faites-le pour la deuxième bande
11.25-22.5Hz -> 0Hz-22.5Hz
) - pas sûr que ce soit possible. - Concatinez les jeux de bacs résultants avec des étiquettes ajustées
Méthode 2:
- Utilisez une série de filtres passe-bas avec une limite croissante.
- Effectuez la FFT sur des gammes de fréquences croissantes.
- Pour chaque fréquence, utilisez la meilleure résolution possible (bacs de la première FFT dans laquelle cette fréquence a été incluse).
- Cela permettra aux basses fréquences d'avoir une meilleure résolution mais je pense que c'est correct car pour des notes plus élevées, la différence de fréquence est plus grande.
Je serai reconnaissant de toute remarque sur cette question.
J'ai également lu ici: Comment la taille de la fenêtre, la fréquence d'échantillonnage influencent-elles l'estimation du pitch FFT? sur la méthode pour améliorer les résultats de la cueillette des pics. Je pense va essayer de l'utiliser.
Réponses:
Si vous insistez vraiment sur l'utilisation de la FFT (plutôt que sur des méthodes paramétriques, qui ne souffriraient pas de compromis temps / fréquence), vous pouvez simuler une bien meilleure résolution en utilisant les informations de phase pour récupérer la fréquence instantanée pour chaque bac FFT. Les partiels peuvent ensuite être détectés en recherchant des plateaux dans la fonction donnant une fréquence instantanée en fonction de l'indice FFT bin. L'implémentation courante de cette technique telle que décrite dans cet article vous "coûtera" un STFT supplémentaire (la fréquence instantanée est récupérée par des opérations sur le STFT du signal et le STFT de la dérivée du signal).
Voir par exemple la fonction ifgram dans cette implémentation Matlab de modélisation sinusoïdale de signaux audio.
Notez que cela n'aidera pas à résoudre deux partiels tombant dans des bacs FFT adjacents. Il fournira simplement une estimation de fréquence beaucoup plus précise que la simple conversion en fréquence de l'indice FFT bin d'un pic spectral.
la source
Le terme «résolution» a plusieurs sens. En général, vous ne pouvez pas augmenter votre capacité à séparer (ou "résoudre") les pics spectraux étroitement espacés par interpolation en utilisant la même longueur de fenêtre de données. Mais vous pouvez estimer la fréquence des pics spectraux stationnaires isolés qui sont bien au-dessus du plancher de bruit avec une résolution plus fine (parfois beaucoup plus fine) que l'espacement des cases FFT par diverses méthodes d'interpolation.
Les méthodes d'interpolation de résultats FFT courantes pour des estimations de résolution plus élevées comprennent l'interpolation parabolique, l'interpolation Sinc, le remplissage nul des données dans une FFT beaucoup plus longue et les méthodes de vocodeur de phase utilisant des fenêtres se chevauchant (légèrement) décalées.
Une FFT est essentiellement une banque de filtres passe-bande, chacun avec une transition très abrupte mais des tonnes d'ondulation de bande d'arrêt pour une longueur de noyau de filtre FIR donnée. En tant que tels, ces filtres n'ont pas une grande réjection de bruit de bruit non périodique dans la fenêtre. Si vous pensez que ce type d'interférence est un problème, une FFT fenêtrée ou un banc de filtres personnalisé peut mieux fonctionner.
la source
Après de nouvelles recherches invoquées par Jim Clay, une question et une réponse de pichenettes dans les commentaires, j'ai trouvé que mon Method2 est réinventé B -transform transformée décrite par exemple par Kashima et Mont-Reynaud (je ne suis pas sûr de pouvoir créer un lien vers cet article, le fichier semble déchiré ) .
Leur approche est algorithmiquement plus efficace car ils partent de la plus grande plage de fréquences et la sous-échantillonnent itérativement de 2 jusqu'à ce qu'ils atteignent l'octave la plus basse.
Avantages de Q-transformées ont également été explorés par Brown par exemple ici . Il peut ne pas être aussi efficace que la FFT unique, mais présente l'avantage de ne pas calculer la FFT épaisse sur les bandes haute fréquence qui ne le nécessitent pas.
Merci pour toutes les réponses, commentaires et liens.
la source
Si vous gardez un «historique» des entrées et que vous l'utilisez pour chevaucher vos DFT, cela fournirait plus d'informations pour extraire le contenu spectral. Bien sûr, cela dépend de la nature variant dans le temps de votre signal. Elle serait de forme similaire à une fonction de distribution de probabilité.
Cela vous donnerait des DFT plus rapprochées dans le temps. Cependant, cela augmenterait encore l'incertitude temporelle de chaque TFD, qui est contrainte par les lois de la nature: la valeur exacte du comportement temporel et spectral ne peut pas être déterminée simultanément.
Si le contenu en fréquence ne varie pas beaucoup à l'intérieur de la fenêtre, alors ça devrait aller.
la source