Computing displacement from accelerometer data
35 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
採用された回答
Cris LaPierre
2022 年 9 月 27 日
編集済み: Cris LaPierre
2022 年 9 月 27 日
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 件のコメント
Cris LaPierre
2022 年 9 月 27 日
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
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Directed Graphs についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!