Comment faire pour calculer la fréquence des données à l'aide de la FFT?
Je veux savoir la fréquence des données. J'ai eu un peu l'idée qu'il peut être fait à l'aide de la FFT, mais je ne suis pas sûr de savoir comment faire. Une fois que j'ai passé la totalité des données de la FFT, puis il me donne 2 pics, mais comment puis-je obtenir la fréquence?
Merci beaucoup à l'avance.
- La FFT va vous donner la fréquence de composantes sinusoïdales de votre signal. Si vous voulez mesurer la fréquence du signal réel (de toute forme) que vous devez oublier la FFT et d'utiliser des exemples de la numérisation de passage à zéro , ou crête de recherche, etc ... dépendent un peu sur la forme et le décalage de votre signal. btw sur la FFT vous avez 2 pics l'un est le miroir de la première, si le signal d'entrée est du domaine réel) donc ignorer la seconde moitié de la FFT
Vous devez vous connecter pour publier un commentaire.
Supposons que
x[n] = cos(2*pi*f0*n/fs)
oùf0
est la fréquence de vos sinus en Hertz,n=0:N-1
, etfs
est la fréquence d'échantillonnage dex
dans les échantillons par seconde.Laisser
X = fft(x)
. Les deuxx
etX
ont une longueurN
. Supposons queX
a deux pics àn0
etN-n0
.Puis le sinusoïde de fréquence est
f0 = fs*n0/N
Hertz.Exemple:
fs
= 8000 échantillons par seconde,N
= 16000 échantillons. Par conséquent,x
dure deux secondes.Supposons que
X = fft(x)
a des pics à 2000 et 14000 (=16000-2000). Par Conséquent,f0
= 8000*2000/16000 = 1000 Hz.Voici ce que vous êtes probablement à la recherche de:
Quand vous parlez de calcul de la fréquence d'un signal, vous probablement ne sont pas tellement intéressés dans le composant à ondes sinusoïdales. C'est ce que la FFT vous donne. Par exemple, si vous somme sin(2*pi*10)+sin(2*pi*15x)+sin(2*pi*20x)+sin(2*pi*25x), vous voudrez probablement pour détecter la "fréquence" 5 (regardez le graphique de cette fonction). Cependant, la FFT de ce signal permet de détecter l'ampleur de 0 pour la fréquence de 5.
Ce que vous êtes probablement plus intéressé est l' périodicité du signal. Qui est, la fréquence à laquelle le signal devient plus semblable à lui-même. Ainsi, la plupart probablement ce que vous voulez, c'est le autocorrélation. Le regarder. Ce sera essentiellement vous donner une mesure de la façon dont l'auto-similaire, le signal est à lui-même après avoir été déplacé par un certain montant. Donc, si vous trouvez un pic d'autocorrélation, qui indiquent que le signal correspond bien avec lui-même lorsqu'il est décalé sur ce montant. Il y a beaucoup de calculs cool derrière lui, le regarder si vous êtes intéressé, mais si vous vous voulez que cela fonctionne, il suffit de faire ceci:
Fenêtre du signal, à l'aide d'une lisse de la fenêtre (un cosinus fera. La fenêtre doit être au moins deux fois plus grand que la plus grande période que vous souhaitez détecter. 3 fois plus grande donnera de meilleurs résultats). (voir http://zone.ni.com/devzone/cda/tut/p/id/4844 si vous êtes confus).
Prendre la FFT (cependant, assurez-vous que la taille de la TFR est deux fois la taille de la fenêtre, avec la seconde moitié étant complétée par des zéros. Si la taille de la TFR est de la taille de la fenêtre, ce qui vous permet de prendre le circulaire d'autocorrélation, ce qui n'est pas ce que vous voulez. voir https://en.wikipedia.org/wiki/Discrete_Fourier_transform#Circular_convolution_theorem_and_cross-correlation_theorem )
Remplacer tous les coefficients de la FFT avec leur carré de la valeur (réelle^2+imag^2). C'est effectivement la prise de l'autocorrélation.
Prendre la iFFT
Trouver le plus grand pic de la iFFT. C'est la plus forte fréquence de la forme d'onde. Vous pouvez effectivement être un peu plus malin en ce qui pointe que vous choisissez, mais dans la plupart des cas, cela devrait être suffisant. Pour trouver la bonne fréquence, il vous suffit de prendre f=1/T.
Si vous avez un signal avec une fréquence (par exemple:
Avec:
Ensuite, vous aurez deux pics, l'un à une fréquence correspondant à f, et l'autre à une fréquence correspondant à f.
Donc, pour arriver à une fréquence, peut jeter le négatif de la fréquence de la partie. Il est situé après le succès de la fréquence de la partie. En outre, le premier élément du tableau est un dc-offset, de sorte que la fréquence est de 0. (Attention, ce décalage est habituellement beaucoup plus que 0, de sorte que les autres composantes de fréquence peut obtenir dwarved par lui).
Dans le code: (je l'ai écrit en python, mais il doit également être simple en c#):
Maintenant la fréquence est situé dans le plus grand de pointe.
Si vous êtes à la recherche à l'ampleur des résultats à partir d'une FFT le type le plus fréquemment utilisé, puis une forte fréquence sinusoïdale composant de données réelles seront afficheront dans les deux lieux, une fois dans la moitié inférieure, en plus de son complexe conjugué image miroir dans la moitié supérieure. Ces deux pics représentent tous les deux le même pic spectral et de même fréquence (à des fins strictement données réelles). Si la FFT résultat bin numéros commencent à 0 (zéro), la fréquence de la composante sinusoïdale représenté par le bac dans la moitié inférieure de la FFT résultat est le plus probable.
Assurez-vous de travailler sur votre bon d'unités dans l'équation ci-dessus (pour obtenir des unités de cycles par seconde, par quinzaine, par kiloparsec, etc.)
Noter que si la longueur d'onde des données est un exacte sous-multiple entier de la FFT de la longueur, de la pointe réelle sera entre les bacs, donc la distribution de l'énergie entre plusieurs à proximité de la FFT raison des bacs. Ainsi, vous pourriez avoir à interpoler pour une meilleure estimation du pic de fréquence. Commune de méthodes d'interpolation pour trouver un moyen plus précis de la fréquence de l'estimation sont les 3 points de la parabole et Sinc convolution (ce qui est presque le même que l'utilisation d'un zéro-collier plus long FFT).
En supposant que vous utilisez une transformée de Fourier discrète à regarder les fréquences, alors vous devez être prudent sur la façon d'interpréter les fréquences normalisées de retour en physique (c'est à dire Hz).
Selon la FFTW tutoriel sur la façon de calculer le spectre de puissance du signal:
Remarque il gère les données des longueurs qui ne sont même pas. Remarque en particulier si la longueur des données est donné, FFTW vous donnera un "bin", correspondant à la fréquence de Nyquist (taux d'échantillonnage divisée par 2). Autrement, vous ne pouvez pas le faire (c'est à dire la dernière bin est juste en dessous de la fréquence de Nyquist).
Un MATLAB exemple est similaire, mais ils sont le choix de la longueur de 1000 (un nombre pair) pour l'exemple:
En général, elle peut être mise en œuvre (de la DFT) à charge. Vous devez créer un test pur d'onde sinusoïdale à une fréquence connue, puis assurez-vous que le calcul donne le même nombre.
Fréquence = vitesse/longueur d'onde.
Longueur d'onde est la distance entre les deux pics.