Dans MATLAB, les sorties des fonctions fft
et / ou ifft
nécessitent souvent un traitement supplémentaire avant d'être prises en compte pour l'analyse.
J'ai entendu de nombreuses opinions divergentes sur ce qui est correct:
Mise à l'échelle
Mathworks indique que les fonctions
fft
etifft
sont basées sur les équations suivantes:Mise à l'échelle en fonction de la longueur du signal
Mes pairs mettent généralement à l'échelle les données par immédiatement après le traitement de . (Nous ne considérons pas les données brutes avant la mise à l'échelle.)
fft
fft
%% Effectuer fft
X_f = fft (x, n_sample, 1) / n_sample; % fft doit être normalisé par le nombre d'échantillons dans les données. % Cette convention a été définie par le développeur du logiciel (Mathworks).Est-ce correct?
- Si oui, pourquoi la
ifft
fonction MATLAB s'attend-elle à ce que nous n'ayons pas déjà été mis à l'échelle par ? - Existe-t-il une
ifft
fonction MATLAB ou une option de fonction qui ne se redimensionne pas automatiquement de ?
Sinon, existe-t-il une meilleure convention que nous devrions utiliser pour placer le ? Par exemple, placer le dans le plutôt que le , ou placer un dans les deux équations, au lieu d'un ?
fft
ifft
- Si oui, pourquoi la
Mise à l'échelle par période d'échantillonnage
J'ai entendu dire que les fonctions
fft
etifft
supposent que la période d'échantillonnage , et que pour que les fonctions soient vraies, les éléments suivants devraient s'appliquer:
Voir les liens:
- Lien 1 (voir le commentaire de Matt Szelistowski par le Dr Seis)
- Lien 2 (voir la réponse de Rick Rosson vs celle du Dr Seis)
- Lien 3 (voir commentaire de Matt (Message: 7/16) et commentaire de Poorya (14/16)
- Lien 4 (voir p. 10, diapositive [1,1])
- Lien 5 (voir p. 8 + 9) [il semble qu'il utilise la convention inverse pour fft et ifft].
Est-ce vrai?
Je suis particulièrement piqué parce que je ne trouve aucune équation DFT ou DTFT sur Wikipedia qui inclut la période d'échantillonnage.
Réponses:
La mise à l'échelle ou non de la FFT avant de 1 / N dépend du résultat que vous souhaitez approfondir: énergie (préservation de l'identité de Parseval) ou amplitude (mesure de la hauteur ou des volts, etc.).
Si vous souhaitez mesurer ou analyser l'énergie, alors ne pas mettre à l'échelle par 1 / N, et une sinusoïde plus longue de la même amplitude produira un résultat FFT plus grand, proportionnel à la plus grande énergie d'un signal plus long.
Un peu plus souvent, si vous souhaitez mesurer ou analyser des amplitudes, puis pour obtenir une sinusoïde plus longue (donc avec plus d'énergie totale à la même amplitude exacte) pour produire environ le même résultat FFT qu'un signal plus court, vous devrez réduire l'échelle de la Addition FFT par un rapport proportionnel à la longueur. Le rapport pourrait être reference_length / N, qui est parfois 1 / N si le gain d'entrée du système est de 1,0 pour toutes les dimensions ou unités, y compris les dimensions d'intervalle de temps, que vous choisissez d'utiliser dans votre analyse ultérieure. Vous devez réduire proportionnellement parce qu'un DFT est une somme: plus vous résumez des éléments similaires, plus le résultat est grand.
Alors. Énergie ou amplitude. Lequel veux-tu?
Maintenant, si vous réduisez la FFT vers l'avant, vous ne devez pas redimensionner l'inverse de sorte que IFFT (FFT (x)) == x. Ou vice versa.
Le 1 / sqrt (N) pour la mise à l'échelle me semble être pour soit quand on a besoin d'une symétrie formelle pour une preuve, soit lors de la construction d'une sorte de pipeline matériel où la latence et / ou le nombre d'unités / portes arithmétiques pour la DFT et pour l'IDFT doit être identique. Mais vous n'obtenez ni une bonne mesure directe ni de l'énergie ni de l'amplitude pour tout type d'analyse technique typique.
la source
La convention de mise à l'échelle utilisée par Matlab est courante dans DSP. Vous pouvez également utiliser la DFT unitaire où la DFT et l'IDFT sont mises à l'échelle par un facteur de . Vous pouvez également utiliser le facteur pour le DFT et le facteur pour l'IDFT. Tant que vous êtes cohérent, cela n'a pas vraiment d'importance (à part des considérations numériques, en particulier lors de l'utilisation d'implémentations à virgule fixe). Il n'y a donc pas de "meilleures" conventions, il n'y a que des "conventions", et il vous suffit de vous mettre d'accord sur celle que vous utilisez. 1/N11/N−−√ 1/N 1
Le commentaire
est faux. Personne ne dit que vous devez normaliser le résultat de la FFT. Si vous le souhaitez, vous êtes libre de le faire.
En outre, la FFT ne suppose rien sur la période d'échantillonnage . Notez que la DFT peut être utilisée pour des données qui sont discrètes par nature sans aucun échantillonnage impliqué. En fonction de vos données et de ce que vous voulez faire avec le résultat, vous devez tenir compte de en conséquence. Par exemple, si vous souhaitez utiliser la DFT (implémentée par la FFT) pour approximer la transformée de Fourier à temps continu, vous obtenez l'expression suivante:TT T
où est la période d'échantillonnage, est la longueur DFT, est le signal à temps continu et est sa transformée de Fourier à temps continu. Le côté droit de est juste la DFT de échantillons de , mis à l'échelle par , où nous supposons que la partie pertinente de est dans la plage . Plus de détails sur l'utilisation de la DFT pour approximer la transformée de Fourier en temps continu peuvent être trouvés dans cette réponse .N x ( t ) X ( ω ) ( 1 ) N x ( t ) T x ( t ) t ∈ [ 0 , N T ]T N x(t) X(ω) (1) N x(t) T x(t) t∈[0,NT]
la source
d'autant plus qu'il s'agit d'une question de convention, je ne renforcerai pas la convention ridicule de MATLAB et ne répondrai qu'avec la ou les bonne (s) convention (s). c'est-à-dire que l'indexation de MATLAB pour la DFT n'est pas juste et appropriée, mais je suis à peu près agnostique quant à laquelle des trois conventions de mise à l'échelle courantes.
aussi, je ne restreins pas ni , ils peuvent être des entiers car je suis assez fasciné par la signification fondamentale de la transformation de Fourier discrète: la TFD et la série de Fourier discrète sont une et le même. La DFT mappe une séquence périodique avec la période à une autre séquence périodique également avec la période et l'iDFT la mappe en arrière.0≤n<N 0≤k<N x[n] N X[k] N
donc
aussi, la convolution circulaire dans le "domaine temporel" ( ) ou le "domaine fréquentiel" ( ) est définie de manière cohérente avec toutes les conventions:x[n] X[k]
le seul avantage d'une convention par rapport à l'autre (en supposant que les deux conventions sont valides) peut donc concerner la simplicité d'expression de certains des théorèmes.
la convention d'échelle la plus courante pour la DFT:
présente l'avantage de la simplicité concernant la convolution circulaire dans le "domaine temporel"
mais il y a un facteur d'échelle dont vous devez vous soucier si vous vous retrouvez dans le "domaine fréquentiel" :
Le théorème de Parseval a aussi un facteur d'échelle à craindre.
et le théorème de la dualité:
l'autre convention d'échelle commune pour la DFT:
a l'avantage d'être un peu plus proche, conceptuellement, de la série de Fourier, où sont les fonctions de base de Fourier et sont les coefficients de Fourier. donc si vous regardez des données brutes du domaine temporel, , et voyez une sinusoïde avec cycles dans le tampon de échantillons et avec (zéro à crête) l'amplitude , cela signifierait que .ejωkn≜ej(2πk/N)n X[k] x[n] k N A ∣∣X[k]∣∣=∣∣X[−k]∣∣=∣∣X[N−k]∣∣=A2
il a également plus de simplicité concernant la convolution circulaire dans le domaine fréquentiel
mais il y a un facteur d'échelle dont vous devez vous soucier si vous vous retrouvez dans le domaine temporel :
Le théorème de Parseval a aussi un facteur d'échelle à craindre.
et le théorème de la dualité:
la convention de mise à l'échelle unitaire pour la DFT est identique en mise à l'échelle avec son inverse et préserve l'énergie à travers la transformée ou la transformation inverse:
la convolution dans le domaine temporel ou le domaine fréquentiel a le même facteur d'échelle à prendre en compte:
mais le théorème de Parseval n'a pas de facteur d'échelle à craindre.
le théorème de la dualité non plus:
la source
max(abs(X))
fonction pour trouver où se trouve un pic spectral et vous oubliez de soustraire1
de l'index renvoyé et vous allez faire des calculs dessus. c'est un problème. et triste à cela. l'origine de l'indexation a autant à voir avec la " définition de la DFT" que la mise à l'échelle. il s'agit de savoir quelle comptabilité est requise ou non.