我有测试加速度计数据,需要使用 Matlab 来查找速度和位置。不过,我需要速度和位置的实际数据点,而不仅仅是曲线下的累积面积。我有我正在使用的样本数据,并且已经能够通过相当冗长和特定的矢量化编码来实现这一点,但我需要找到一种更通用的方法。我不能只使用曲线拟合然后估计面积,因为我有离散数据并且不能有任何错误。这种从本质上计算每个矩形面积的方法是最准确的方法。到目前为止,我的尝试如下:
%Variables
clear
DeltaTime=0.2; %10 Hz sampling rate
Acceleration=[0, 1, 2, 4, 3, 1, 2]; %Sample random data set
TTime=(0.2:DeltaTime:1.4);
VelocityL=zeros(size(Acceleration));
VelocityLL=zeros(size(Acceleration));
%Velocity
DeltaVelocityVect=Acceleration*DeltaTime;
VelocityV=[sum(DeltaVelocityVect(1)),sum(DeltaVelocityVect(1:2)),...
sum(DeltaVelocityVect(1:3)), sum(DeltaVelocityVect(1:4)), sum(DeltaVelocityVect(1:5))...
sum(DeltaVelocityVect(1:6)), sum(DeltaVelocityVect(1:7))];
%Position
DeltaPositionVect=VelocityV*DeltaTime;
PositionV=[sum(DeltaPositionVect(1)),sum(DeltaPositionVect(1:2)),...
sum(DeltaPositionVect(1:3)), sum(DeltaPositionVect(1:4)), sum(DeltaPositionVect(1:5))...
sum(DeltaPositionVect(1:6)), sum(DeltaPositionVect(1:7))];
我已经手动解决了这一切,并在纸上和 Matlab 以及上述作品上绘制了它。但是,数据集的长度会有所不同,因此从长远来看是行不通的。我尝试使用循环来解决这个问题,因为可以轻松更改索引以适应任何长度的向量,同时保持采样率,但我无法让它输出实际数据点。我需要上述的一般形式。
for index=1:length(Acceleration);
DeltaVelocityLoop(index)= DeltaTime*Acceleration(index);
end
for index2=1:7
VelocityL(index2)= sum(DeltaVelocityLoop(index2));
VelocityLL=VelocityLL+DeltaVelocityLoop(index2);
end
这是我的第 10 次尝试,所以它包括重复。VelocityL 返回与 DeltaVelocityLoop 完全相同的向量(没有对前面的区域求和,这是目标)。VelocityLL 简单地返回写成矢量加速度长度的曲线下的总面积。如果您对如何绕过这个障碍有任何想法,请告诉我。