我需要将一个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牛顿。
这些是我得到的结果
有人可以解释我得到的价值吗?
答案 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')
注意速度曲线和积分加速度之间的偏差?那是因为初始条件。当你再积累一次以获得位移时,问题就更复杂了:
disp = cumtrapz(t,spd);
plot(t,x,t,disp)
xlabel('Time [s]')
ylabel('Displacement [m]')
grid on
legend('Displacement','x2 integrated acceleration')
因此,在回答您的问题时:弄清楚您的速度和位移的初始条件是什么,并相应地调整cumtrapz
的积分结果,以获得合理的结果。