Fourier Transform peaking at 0
Afficher commentaires plus anciens
I have the following code that finds the FFT of a complex, time-dependent astronomical signal. "FileArr" is an array I've used to store several signal files.
NumVec = [69, 70, 86, 87, 88, 93, 98, 99]; %not important here - for naming figures only
L = 4096; %number of entries in each raw signal
NFFT = 1024;
test_freq = 29.9396258
fs = 1000; %sampling frequency
t_int = 10.24; %time interval, in seconds
time = (0:t_int:L*t_int - 1); %time axis
for count = 1:length(NumVec)
x = abs(FileArr(:,count));
%plotting raw data against time
subplot(2,1,1)
plot(time,x); %plot graph
fVals=fs*(0:NFFT/2 - 1)/NFFT; %time transform
%plotting FT
X = fft(x, NFFT);
PX = X.*conj(X)/(NFFT*L);
subplot(2,1,2)
plot(fVals,PX(1:NFFT/2));
%saving graphs
name = sprintf('AbsCombT486%d', NumVec(count));
saveas(gcf, name);
end
Every graph is peaking at 0 Hz and not ~30, as expected. Would be grateful for an explanation as to why this is happening, and a solution. Thanks.
Réponses (1)
Star Strider
le 31 Jan 2017
The 0 Hz signal is a constant (or d-c) offset. Changing your fft call to:
X = fft(x-mean(x), NFFT);
will remove the constant offset. (This works for ‘x’ as a vector or matrix.)
Catégories
En savoir plus sur Fourier Analysis and Filtering dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!