fft/ifft: Fréquence d'Échantillonnage et la Durée du Signal
C'est en partie pris de la fft de Matlab-documentation:
Fs = 30; % Sampling frequency
T = 1/Fs; % Sample time
L = 130; % Length of signal
t = (0:L-1)*T; % Time vector
x = sin(2*pi*1*t); % 1 Hz sinus
plot(real(ifft(abs(fft(x))))); % fft then ifft
% Fs = 30, L = 60 /90 /120 ... : ok
% Fs = 20, L = 60 /80 /100 ... : ok
% Fs = 30, L = 50 /70 /80 ... : not ok
Il me semble qu'à chaque fois que la durée du signal est un multiple de la fréquence d'échantillonnage, la sinusoïde est reconstruit correctement (en dehors de quelques maj), par exemple ici Fs = 30, L = 60
:
Cependant, si par exemple Fs = 30, L = 80
(pas un multiple de), le résultat a l'air bizarre:
Ce comportement est-il correct? Pourquoi est-ce qui se passe et comment puis-je éviter cela? Jeter une partie du signal telles que la longueur "s'adapte" la fréquence d'échantillonnage?
OriginalL'auteur Tobold | 2012-06-11
Vous devez vous connecter pour publier un commentaire.
Lorsque vous utilisez l'abs(fft()) dans ifft, vous utilisez uniquement l'amplitude du signal et l'abandon de l'information de phase, ce qui est nécessaire.
Utiliser la totalité du signal (supprimé abs):
Vérifier la fft (ou dft) définition. Les fréquences dans le résultat de la fft(X) sont (Fs/2)*(0...(N/2)+1)/(N/2+1). Pour accéder à votre 1Hz des sinus, vous avez besoin de trouver k tel que (Fs/2)*k/(N/2+1) = 1. lorsque k est un entier (nombre de tours), pas de phase (retard) est nécessaire pour représenter 1Hz, et ce qui se passe lorsque N/Fs (ou L/Fs dans votre cas) est un entier. Quand il ne l'est pas , il n'y a pas de 1Hz dans votre FFT de sortie, et l'algorithme "représente" 1Hz à une valeur de k qui est proche de 1, plus une valeur de phase que les retards à 1Hz. J'espère que mon explication est-ce clair. 🙂
Merci! Maintenant, c'est clair 🙂
OriginalL'auteur Ran