Generating Frequency domain with FFT function of accelerometer data
Show older comments
Hello,
I have accelerometer data that are recorded in excel sheet.
I would like to extract the frequency domain features from the data.
In order to do that, I need to convert the data into frequency by using the FFT function.
First of all, I generate the whole frequency of the data with this code:
freX = fft(accX)/N;
freX_2 = abs(freX);
freX_1 = freX_2(1:N/2+1);
freX_1(2:end-1)= 2*freX_1(2:end-1);
f_freX = fs*(0:(N/2))/N;
It works fine.
Now, I need to cut the data into windows with 200 data point for each window.
However, my code is hitting errors and I couldnt debug it.
for i =1:number_of_windows % there are 700 windows
% generating the frequency domain
a = fft(accX((1+(i-1)*s_win):(i*s_win)));
freX_2 = abs(a/N);
freX_1 = freX_2(1:N/2+1);
%error: Index exceeds the number of array elements (200).
% extracting the frequency domain features
meanfreX(i) = meanfreq(freX_1(1+(i-1)*s_win):(i*s_win)); % mean frequency
peakX(i) = findpeaks(freX_1(1+(i-1)*s_win):(i*s_win)); % peak frequency
medfreX(i) = medfreq(freX_1(1+(i-1)*s_win):(i*s_win)); % median frequency
powX(i) = ((abs(freX_1(1+(i-1)*s_win):(i*s_win))).^2)/s_win; %power spectrum
end
My whole code look like these:
clear all;
close all;
% Load the data for treadmill subject
t1= xlsread('data1',1);
% 1st column is accelerometer on X axis
accX = t1(:,1) ;
% set up window length
window = 2;
% set up frequency signal
fs = 100;
% set up size window
s_win = window*fs;
N = length(accX);
number_of_windows = floor(N/s_win);
% Fourier Transform
for i =1:number_of_windows % there are 700 windows
% generating the frequency domain
a = fft(accX((1+(i-1)*s_win):(i*s_win)));
freX_2 = abs(a/N);
freX_1 = freX_2(1:N/2+1);
%error: Index exceeds the number of array elements (200).
% extracting the frequency domain features
meanfreX(i) = meanfreq(freX_1(1+(i-1)*s_win):(i*s_win)); % mean frequency
peakX(i) = findpeaks(freX_1(1+(i-1)*s_win):(i*s_win)); % peak frequency
medfreX(i) = medfreq(freX_1(1+(i-1)*s_win):(i*s_win)); % median frequency
powX(i) = ((abs(freX_1(1+(i-1)*s_win):(i*s_win))).^2)/s_win; %power spectrum
end
Please help me debug the fourier transform.
Thank you.
Accepted Answer
More Answers (0)
Categories
Find more on Spectral Measurements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!