MATLAB: Looking for low frequncy peaks from the FFT of a time series signal

low frequency fft plot

This is the code for the FFT of the signal:
Fs=25Hz % Sampling frequency
y = fft(dsignal);
n = length(dsignal); % number of samples
f = (0:n-1)*(Fs/n); % frequency vector
power = abs(y/n).^2; % power of the DFT
osf=1:n/2+1;
plot(f(osf),power(osf))
xlabel('Frequency')
ylabel('Power')
The problem was that I couldnt see any peak for the FFT plot.
So, when I zoom in, I was able to see some peaks but it doesnt present the information i needed.
I suspect the interested peaks for the FFT of the signal is domicile in the low frequency regime. So how do i obtain
the low regime frequency for FFT plot.
Thanks
An urgent ball out pls.
Note: The the comma(,) in attached file also mean (.)

Best Answer

Your frequency peaks are much smaller than the d-c offset in ‘dsignal’, so the d-c offset will dominate the Fourier spectrum. The easiest way to eliminate it is to subtract the d-c offset (mean value of your signal) from the signal before taking the Fourier transform of it.
Try this:
L = numel(dsignal);
Fs = 25; % Sampling Frequency (Hz)
Fn = Fs/2; % Nyquist Frequency (Hz)
t = linspace(0, 1, L)/Fs; % Time Vector
y = fft(dsignal - mean(dsignal))/L; % Fourier Transform, Normalise For Length
Fv = linspace(0, 1, fix(L/2)+1)*Fn; % Frequency Vector (One-Sided Fourier Transform)
Iv = 1:numel(Fv); % In \dex Vector
figure
plot(Fv, abs(y(Iv))*2)
grid
xlim([0 0.5])
That will clearly show the 3 low-frequency peaks, and some of the low-frequency noise in the rest of the signal.
Related Question