57 views (last 30 days)

Show older comments

Hi,

I am analyzing a signal using FFT to obtain its frequency spectrum. Raw data is shown below.

The machine should measure at a frequency 0.316 Hz.

Code spectral analysis:

x = t2(:,3);

%x = x-mean(x);

n = length(x);

dt = 3;

fs = 1/dt;

t = (0:n-1)*dt;

y = fft(x);

f = (0:n-1)*(fs/n);

power = abs(y).^2/n;

figure()

plot(f,power)

xlabel('Frequency [Hz]')

ylabel('Power')

grid on

After spectral analysis I end up with two peaks: one at 0 Hz and one at 0.3316 Hz.

If you uncomment the second line you end up with this: a peak at 0.0017 and 0.3316 Hz.

My question is how to interpret the first peak? Has it a physical meaning? I've read somewhere that a large peak at zero frequency means that you have a massive DC offset. What does that mean? And could it be that through discretization the actual value (0.316 Hz) and found value (0.3316 Hz) are slightly different?

Peng Li
on 6 Aug 2020

Based on your code, your sampling frequency is 1/3 Hz. There is no way you can detect a component of 0.316 Hz using 1/3 Hz sampling frequency.

The spectrum is symmetrical to 0 Hz. By default MATLAB gives a shifted spectrum that is symmetrical Fs/2. You can fftshift it or you can simply plot the first half. The second peak on the righthand side is not what you want to detect; it is simply a mirror of the peak on the left hand side.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!