la Longueur du signal dans le calcul de la FFT
Je veux vous poser quelques questions au sujet de la dernière question de la mienne donc je ne veux pas à poster dans un autre thread. Ma question contient un code, je ne peux donc pas poster un commentaire. J'ai donc modifier mon ancienne question dans un nouveau. Veuillez prendre un coup d'oeil et de l'aide. Merci.
Je suis nouveau à la FFT et le DSP et je voudrais vous poser quelques questions sur le calcul de la FFT de Matlab. Le code suivant est à partir de Matlab aider, j'ai juste enlevé le bruit.
- Puis-je choisir la longueur du signal de L différent de NFFT?
- Je ne sais pas si j'ai utilisé de la fenêtre correctement. Mais lorsque j'utilise la fenêtre de hanning dans le code suivant), je ne peux pas obtenir les valeurs exactes des amplitudes?
- Lorsque L et NFFT obtenir des valeurs différentes, alors les valeurs des amplitudes étaient différentes aussi. Comment puis-je obtenir la valeur exacte de l'amplitude du signal d'entrée? (dans le code suivant, j'ai utilisé un déjà connu signal pour vérifier si le code fonctionne correctement. Mais au cas où, j'ai eu le signal provenant d'un capteur et je ne sais pas à l'avance son amplitude, comment puis-je vérifier?)
Je vous remercie beaucoup et attendons avec impatience de vous 🙂
Fs = 1000; % Sampling frequency
T = 1/Fs; % Sample time
L = 512; % Length of signal
NFFT=1024; % number of fft points
t = (0:L-1)*T; % Time vector
x = 0.7*sin(2*pi*50*t) + sin(2*pi*120*t); input signal
X = fft(hann(L).*x', NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*abs(X(1:NFFT/2+1))) % Plot single-sided amplitude spectrum.
OriginalL'auteur Mai | 2012-08-20
Vous devez vous connecter pour publier un commentaire.
Vous devez appliquer un fonction fenêtre avant la FFT à obtenir des résultats cohérents avec les composants de fréquence non-nombre entier de périodes au sein de votre échantillonnage de la fenêtre.
Vous pourriez aussi envisager d'utiliser periodogram au lieu d'utiliser la FFT directement - il prend en charge les fonctions de la fenêtre et beaucoup de l'autre ménage pour vous.
OriginalL'auteur Paul R
L
est le nombre d'échantillons dans votre signal d'entrée. SiL < NFFT
la différence est complété par des zéros.Je vous recommande de faire un peu de lecture sur l'effet de zéro-padding sur les Fft. En général, il est préférable d'utiliser
L = NFFT
que cela va vous donner la meilleure représentation de vos données.Une exception de réponse sur l'utilisation de la technologie zero-padding et la Fft est donnée ici:
https://dsp.stackexchange.com/questions/741/why-should-i-zero-pad-a-signal-before-taking-the-fourier-transform
Dans votre expérience vous voyez des amplitudes différentes, parce que vous aurez un nombre différent de fuite spectrale avec chaque
L
.J'ai un capteur pour enregistrer l'émission acoustique du signal brut du signal à une fréquence d'échantillonnage à 3MHz à partir de deux processus différents. Puis j'ai eu un temps de base de signaux. Et maintenant, je veux comparer ces signaux, à l'aide de la FFT. Mes questions semblent être stupide, mais je suis un étudiant et pas spécialement dans le DSP. Merci pour votre aide. Pourriez-vous s'il vous plaît expliquez-moi, ce que j'ai à faire pour analyser ces signaux?
avez-vous vu l'autre réponse (de moi) ? Vous avez besoin d'appliquer une fonction de fenêtre et vous devriez également envisager d'utiliser MATLAB periodogram fonction au lieu d'utiliser la FFT directement.
Mai, Matlab FFT la fonction va travailler plus vite si la longueur de la FFT est une puissance de 2 dans la longueur, cependant rembourrage de votre signal d'entrée à la puissance de 2 ne permet pas d'améliorer les données et Matlab peut gérer d'autres FFT longueurs. Lorsque vous augmentez la longueur de la FFT, vous obtenez une plus grande fréquence de résolution qui entraîne une réduction des fuites entre les bacs. Paul R a suggéré d'utiliser le fenêtrage - c'est aussi un bon moyen de réduire la fuite spectrale et Matlab possède de nombreuses fonctions de fenêtrage pour vous d'essayer.
Merci, Markus et Paul R 🙂
OriginalL'auteur Markus