使用cumtrapz将力转换为位移

时间:2018-02-02 08:31:35

标签: matlab math octave

我需要将一个force数组转换为一个置换数组。我制作了这段代码,但是我遇到的位移值有问题,因为它们比我预期的要高得多。

clc;
clear;

log = dlmread('testThumb.csv');
time = log(:,1);
force = log(:,2)./1000;   #Converting from mN to N  


time = time(2:2904);           
force = force(2:2904);

force= detrend(force);

ace = force/0.0575;       #I get the acceleration by dividing the force between the mass

speed = cumtrapz(time,ace);           #Integration of the aceleration

position = cumtrapz(time,speed) * 1000;     #Integration of the speed and 
conversion of the speed from meters to millimeters

figure(1);

subplot(211);
plot(time,speed);                       #Speed in m/s, time in seconds
subplot(212);
plot(time,position);                    #Position in millimeters, time in seconds

样本之间的时间是0.05,力是拇指在某些运动时产生的力,并且值永远不会高于20牛顿。

这些是我得到的结果

Results

有人可以解释我得到的价值吗?

1 个答案:

答案 0 :(得分:1)

我认为问题在于整合时的初始条件。我没有你的数据,但考虑这个虚拟数据(我使用三角函数来更容易计算导数):

t = 0:0.05:10; % Time [s]
x = sin(2*pi*t); % Displacement [m]
xdot = 2*pi*cos(2*pi*t); % Speed [m/s]
xddot = -(2*pi)^2*sin(2*pi*t) % Acceleration [m/s^2]

如果我现在尝试将加速度与cumntrapz集成而不注意初始条件并将其与我的速度曲线进行比较,我得到:

spd = cumtrapz(t,xddot);
plot(t,xdot,t,spd)
xlabel('Time [s]')
ylabel('Speed [m/s]')
grid on
legend('Speed','Integrated acceleration')

enter image description here

注意速度曲线和积分加速度之间的偏差?那是因为初始条件。当你再积累一次以获得位移时,问题就更复杂了:

disp = cumtrapz(t,spd);
plot(t,x,t,disp)
xlabel('Time [s]')
ylabel('Displacement [m]')
grid on
legend('Displacement','x2 integrated acceleration')

enter image description here

因此,在回答您的问题时:弄清楚您的速度和位移的初始条件是什么,并相应地调整cumtrapz的积分结果,以获得合理的结果。