La taille de la fenêtre vs longueur de données pour la FFT
Je suis en train de faire une rapide analyse spectrale sur le streaming audio de la saisie des données sur les voyelles (quelque chose comme JLip-sync). À l'aide de PyAudio à capter la voix de données en petits morceaux (1024) pour de courtes durées (de 0,0625 sec.). Utilisation de numpy.fft pour l'analyse, et de se débarrasser de fuite à l'aide de numpy.fenêtre de hanning. Je suis à l'aide de 4096*4 comme le taux d'échantillonnage (pas 44100 ou 22050, et ouvert à la discussion ainsi; 4096*4 étant le plus proche de 22050).
Considérant les fréquences je suis intéressé (allant de 300 Hz à 3000 hz) comment l'idéal de la taille de la fenêtre sera calculée en utilisant les données de longueur et min/max fréquences, je suis à la recherche d'?
Grâce.
Kadir
Vous devez vous connecter pour publier un commentaire.
@Kadir:
Le but de fenêtrage vos données avant de les traiter avec une transformée de Fourier discrète (DFT ou FFT), est de minimiser la fuite spectrale, ce qui se produit lorsque vous essayez de transformée de Fourier non-cyclique des données.
De fenêtrage fonctionne en forçant vos données en douceur à zéro exactement le début et la fin de la séquence, mais pas avant. Le raccourcissement de la fenêtre de votre détruit informations inutilement.
De sorte que votre fenêtre de longueur doit correspondre à la longueur de votre échantillon de séquences. Par exemple, avec 1024 échantillons, votre fenêtre de longueur doit être de 1024.
Si la fréquence la plus élevée que vous voulez résoudre est de 3 KHz, utilisez 8192 échantillons ou plus, tels que 16384, ou 32768 échantillons, à divers taux d'échantillonnage.
Aussi, essayez un autre algorithme de FFT, échantillons de différentes longueurs et de différentes de windows, y compris les Hann (Hanning), mais aussi d'autres fenêtres avec une meilleure lobe latéral de l'atténuation, telles que la Blackman-Harris de la série, et le Kaiser-Bessel de la série, etc.
Si votre demande est bruyant, vous pouvez avoir à choisir entre le meilleur de suppression de bruit de windows, et la plus grande résolution spectrale de windows. C'est donc une bonne idée d'essayer différentes de windows, de sorte que vous pouvez trouver la meilleure solution pour votre application.
Maintenant, écrivez vos résultats avec chaque d'installation (c'est à dire à chaque fenêtre, longueur de l'échantillon, le taux d'échantillonnage, etc.), et la recherche de résultats qui conviennent à travers de multiples configurations. Vous en apprendrez beaucoup sur vos données, et très probablement trouver la réponse à votre problème.
Vous pouvez le faire avec Matlab: http://www.mathworks.com/help/techdoc/ref/fft.html
Ou avec cette ligne, la FFT de l'analyseur de spectre: http://www.sooeet.com/math/fft.php
Et n'oubliez pas de poster vos résultats ici.
Le facteur essentiel est de savoir combien résolution vous avez besoin dans le domaine de fréquence de discriminer entre les différentes voyelles. La résolution est
1 /T
, oùT
est la durée de votre fenêtre FFT. Donc, si vous échantillon de 62,5 ms alors votre résolution maximale est de 16 Hz (c'est à dire chaque FFT bin est de 16 Hz de large) si votre FFT est de la même taille que votre intervalle d'échantillonnage (1024 échantillons). Si vous allez à un petit FFT alors évidemment, la résolution de votre écran va s'aggraver dans la même proportion, par exemple, une 512 point FFT n'aurait qu'une résolution de 32 Hz.10*log10(re*re+im*im)
) - cela devrait vous donner une vie décente à la recherche du spectre de puissance avec un dB échelle de magnitude.