Tracer FFT sur l'octave
Je sais que FFT variations d'une fonction dans le domaine temporel à un l'a montré dans le domaine des fréquences.
Cependant, lorsque j'essaie de tracé dit graphique dans le domaine de fréquence, je ne peux que le faire fonctionner correctement en utilisant le temps comme axe des X, lorsqu'il est évidemment censé être pas, mais la fréquence.
Aussi, je ne peux obtenir les amplitudes correspondent à ceux dans le signal d'origine en divisant l'axe des y par un certain entier. Pourquoi est-ce?
Voici mon code
t=0:0.001:2
x=2*sin(20*pi*t) + sin(100*pi*t)
subplot(2,1,1)
plot(1000*t,x)
grid
xlabel("Time in milliseconds")
ylabel("Signal amplitude")
subplot(2,1,2)
y=fft(x)
plot(1000*t,abs(y))
xlabel("Frequency")
ylabel("Signal amplitude")
et des graphiques.
S'il vous plaît aider =(
source d'informationauteur Gabriel Maia
Vous devez vous connecter pour publier un commentaire.
Relation de fréquence (axe des x mise à l'échelle)
La fréquence de chacune des valeurs produites par la FFT est linéairement liée à l'indice de la valeur de sortie par le biais de:
Où N est le nombre de FFT points (ie.
N=length(y)
). Dans votre cas,N=2001
.On peut déduire de la fréquence d'échantillonnage à partir de votre définition de
t
comme 1/T, où T est l'échantillonnage intervalle de temps (T=0,001 dans votre cas).De sorte que la fréquence d'échantillonnage est de 1000 hz.
De noter que, puisque la valeur de
t(i)
est aussi une relation linéaire entre l'indicei
par le biais deil est possible (mais pas nécessairement conseillé, que ce serait juste obscurcir votre code) de définir
f = 1000*t*sampling_frequency/N
.Notez que vous avez été absent de la
sampling_frequency/N
terme qui en conséquence a entraîné dans des tons d'être présentée à la mauvaise fréquence(à partir de la définition de
x
il devrait y avoir des pics à 10 hz et 50 hz, et l'alias correspondant à 990Hz et 950Hz).Amplitude de la relation (axe y de la mise à l'échelle)
Noter que la relation observée est qu'approximative, donc la suite n'est pas une preuve mathématique, mais simplement une façon intuitive de visualiser la relation entre le domaine temporel ton amplitude et de la fréquence du domaine des valeurs de pointe.
Simplifier le problème à une seule tonalité:
De la durée approximative de l'amplitude du pic correspondant pourrait être dérivée à l'aide de Le théorème de Parseval:
Dans le domaine temporel (sur le côté gauche de l'équation), l'expression est approximativement égale à
0.5*N*(A^2)
.Dans le domaine de fréquence (sur le côté droit de l'équation), en faisant les hypothèses suivantes:
f
et le correspondant de l'alias de la fréquencesampling_frequency-f
) tenir compte de la somme (tous les autres bacs être ~0). Notez que cela ne tient que si la fréquence de tonalité est exactement (ou presque exact) multiple desampling_frequency/N
.l'expression sur le côté droit est approximativement égale à
2*(1/N)*abs(X(k))^2
pour une certaine valeur dek
correspondant au pic à la fréquencef
.Mettre les deux ensemble, les rendements
abs(X(k)) ~ 0.5*A*N
. En d'autres termes, l'amplitude de sortie montre un facteur d'échelle de0.5*N
(soit environ 1000 dans votre cas) à l'égard du domaine temporel de l'amplitude, comme vous l'avez observé.L'idée s'applique encore avec plus d'une tonalité (bien que l'négligeable fuite spectrale hypothèse finalement se décompose).
Il a été suggéré par les autres réponses qu'il y a des réponses en fréquence dans cet exemple à 950Hz et 990Hz. C'est un malentendu à propos de comment la FFT code utilise des indices. Ces "haute fréquence" pointes sont en fait -50 hz et 10 hz.
Le domaine de fréquence s'étend de-N/2*sampling_frequency/N + N/2*sampling_frequency/N. Mais, pour des raisons historiques, la convention est que la première N/2 éléments d'information sont les fréquences positives, le milieu est la fréquence nulle, et le dernier N/2 éléments d'information sont les fréquences négatives dans l'ordre inverse. Pour un spectre de puissance, il n'est pas nécessaire de montrer que la première 1+N/2 éléments d'information.
La présente convention est extrêmement déroutant, comme j'ai du puzzle, à partir de la Presse et coll. Recettes ou numérique et par le codage de la Rapide Hartley Transformer par la main, il ya plusieurs années quand j'ai d'abord utilisé la FFT, avant l'apparition de la bêta-test de l'édition de Matlab 1.0 Cleve Moler transmis certains de la chance doctorants 🙂