Computing displacement from accelerometer data
36 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Paul Heineman
el 27 de Sept. de 2022
Comentada: Cris LaPierre
el 27 de Sept. de 2022
Hi,
I am trying to convert my accelerometer data to displacement data through integrating twice, I looked at other questions here and similar questions have been asked and answered however I still dont get a satisfactory answer.
Te problem I have is that I get a displacement of 5*10^-3 which does not make sense from the experiment. I have attached my data for reference.
I import the data from excel, detrend it and then use the function cumtrapz twice.
data = readmatrix('https://de.mathworks.com/matlabcentral/answers/uploaded_files/1138190/Acceleration%20without%20g%202022-09-07%2009-49-36.xls');
%Acceleration data
acc = data(:,4); % Add gravity factor ( g to m/s²)
%acc = flip(acc);
acc = detrend(acc); % baseline correction
%Time
tStep = 20/length(acc);
N = length(acc)*tStep;
t = 0:tStep:N;
t(end) = [];
N = length(t);
dt = mean(diff(t));
fs = 1/dt;
% High pass filter
N = 2;
fc = 2;
[B,A] = butter(N,2*fc/fs,'high');
acc2 = filter(B,A,acc);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
velocity = cumtrapz(dt,acc2);
velocity = detrend(velocity); % baseline correction
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp = cumtrapz(dt,velocity);
%disp = detrend(disp); % baseline correction
%
figure(1)
%plot(t,acc);
hold on;
%plot(t,velocity);
hold on;
plot(t,disp);
title('disp'); ylabel('m');xlabel('time (s)');
I am wondering what I do wrong, thanks in advance
0 comentarios
Respuesta aceptada
Cris LaPierre
el 27 de Sept. de 2022
Editada: Cris LaPierre
el 27 de Sept. de 2022
I think the first issue is to find the magnitude of the acceleration vector using the data from all 3 axes. From there, you can use cumtrapz with the Time and acceleration data, then Time and the resulting velocity to get position.
file = "https://www.mathworks.com/matlabcentral/answers/uploaded_files/1138190/Acceleration%20without%20g%202022-09-07%2009-49-36.xls";
data = readtable(file);
data.Properties.VariableNames = ["Time","X","Y","Z","Abs"];
% Combined acceleration
accel = sqrt(data.X.^2 + data.Y.^2 + data.Z.^2);
figure
plot(data.Time,accel)
v = cumtrapz(data.Time,accel);
x = cumtrapz(data.Time,v);
figure
plot(data.Time,v)
figure
plot(data.Time,x)
2 comentarios
Cris LaPierre
el 27 de Sept. de 2022
We would need to know the initial conditions. Perhaps most relevant here would be what the initial displacement of the cantilever beam was, as your data starts with max acceleration in Z
Más respuestas (0)
Ver también
Categorías
Más información sobre Directed Graphs en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!