How can I get the FFT (Amplitude - Frequency) from Time (s) - Acceleartion(m/s^2) data?

clc;
clear all;
close all;
Time = xlsread('Data','A2:A513'); % Time (s)
Acceleration = xlsread('Data','B2:B513'); % Acceleration (m/s^2)
n = length(Acceleration);
Ts = Time(2)-Time(1); % Sample Time
Fs = 1/Ts; % Sampling Frequency
NFFT = 2^nextpow2(n); % Next power of 2 from length of data
Y = fft(Acceleration,NFFT)/n;
f = Fs/2*linspace(0,1,NFFT/2+1);
plot(f,Y)
xlabel('Frequency (Hz)')
ylabel('Amplitude (m)')
I am trying to get the FFT from Time Acceleration Data.
Error using plot
Vectors must be the same length.
P.S I have attached the Data.xlsx

 Accepted Answer

In your code, ‘f’ is half the length of ‘y’ so you need to create an ‘index vector’.
Try this:
... CODE ...
Y = fft(Acceleration,NFFT)/n;
f = Fs/2*linspace(0,1,NFFT/2+1);
Iv = 1:length(f); % Index Vector
plot(f,abs(Y(Iv)))
xlabel('Frequency (Hz)')
ylabel('Amplitude (m)')
That should work.

4 Comments

Thanks it works.
One more question, is it normal the straight line from 4 hz to 12?
My pleasure.
If there are essentially no significant data in your signal with frequencies above 4 Hz, there would be none in your Fourier transform. There clearly is some information above 4 Hz, but it appears to be broad-band, likely a sort of low-amplitude ‘impulse’ noise.

Sign in to comment.

More Answers (0)

Asked:

Bob
on 21 Mar 2016

Commented:

on 21 Mar 2016

Community Treasure Hunt

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

Start Hunting!