2017-07-26 5 views
0

Il me manque quelque chose dans le calcul du spectre de mon signal en utilisant FFT sur Matlab. Mon code:Calcul et tracé du spectre d'un signal en utilisant FFT sur Matlab

%% compute the spectrum of the data (data(t)) 
L = length(time); % length of the sample 
NFFT = 2^(nextpow2(L)-1); % Next power of 2 from length of y 
Y = fft(data,NFFT);%/NFFT;%L; 
Fs = 1/(mean(time(2:end)-time(1:end-1))); % compute the sampling frequency 
f = Fs/2*linspace(0,1,NFFT/2+1); 
loglog(f,2*abs(Y(1:NFFT/2+1))) 
title('Single-Sided Amplitude Spectrum of My Data') 
xlabel('Frequency (Hz)') 
ylabel('|Y(f)|') 

Auriez-vous l'amabilité de me dire où je foiré?

J'ai essayé de vérifier si l'algorythme fonctionne à l'aide de ces deux échantillons du même signal (même fréquence d'échantillonnage, plus de deux plage horaire, 0-10 et 0-100):

fs=1000; 
time10 = [0:1/fs:10]; 
time100 = [0:1/fs:100]; 
data10 = sin(2*pi*0.23 .*time10)+cos(2*pi*12 .*time10); 
data100 = sin(2*pi*0.23 .*time100)+cos(2*pi*12 .*time100); 

Je suppose que les deux spectre devrait supperpose mais ils ne le font pas ... Comme on le voit ici: https://www.dropbox.com/s/wfols9o409pr94u/FFT_spectrum_StackOverflow.png?dl=0 https://www.dropbox.com/s/a8vmzwto6x4130w/FFT_spectrum_StackOverflow.fig?dl=0

Merci

+1

Pour le premier exemple, vous pouvez expliquer pourquoi cela ne fonctionne pas (afficher une erreur de journal ou une photo). Et pour le deuxième exemple, vous pouvez télécharger une photo qui montre que les deux spctrum ne soupçonne pas du tout. –

+1

Et pour le second exemple, les deux spectres ne doivent pas être pris en compte car la fenêtre rectangulaire implicitement n'est pas la même dans 'data'. –

+1

Ce code est plus ou moins identique à celui fourni par MathWorks. Je ne vois pas où vous "foiré". Pouvez-vous expliquer pourquoi vous pensez que ce n'est pas correct? – rayryeng

Répondre

2

les bonnes nouvelles sont qu'il n'y a rien de mal à votre calcul du spectre par son elfe. Le problème est qu'en examinant des échantillons de différentes longueurs, on regarde en fait deux échantillons différents. Dans le domaine temporel, ils peuvent être vus comme le résultat d'une multiplication d'une sinusoïde infiniment longue avec une fenêtre rectangulaire de différentes longueurs. Dans le domaine fréquentiel, le spectre du signal sinusoïdal à temps continu infiniment long est convoluté avec le spectre des fenêtres rectangulaires. Avec une longueur de fenêtre différente, le spectre correspondant de ces fenêtres a une largeur différente (spectre plus étroit pour des fenêtres rectangulaires plus longues). En conséquence, les pics dans le spectre du signal sinusoïdal infiniment long se répandraient sur différentes largeurs de bande. C'est exactement ce que vous voyez.