使用Matlab将加速度计数据整合为速度和位置

问题描述 投票:0回答:3

我有测试加速度计数据,需要使用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

这是我的第十次尝试,因此其中包括重复。 VelocityL 返回与 DeltaVelocityLoop 完全相同的向量(没有对之前的面积求和,这是目标)。 VelocityLL 只是返回写有向量加速度长度的曲线下的总面积。如果您对如何绕过这个障碍有任何想法,请告诉我。

loops matlab vectorization numerical-integration
3个回答
4
投票

当你说不能只使用曲线下的累积面积时,我有点困惑你的意思。这就是积分,所以如果您想对加速度数据进行积分以获得速度和位置,这正是您所需要的。如果您的准确性很差,那么也许您需要更高质量的加速度计数据,但这对后期处理没有帮助。 我建议简单地使用 cumsum() 或 cumtrapz() 来集成您的数据。


1
投票

您需要确定要使用什么方法来推断样本点之间的加速度值。一般来说,三次样条曲线可以很好地代表“现实世界”的加速度,而线性样条曲线是最容易使用的,并且仍然能给出相当好的结果。

请注意,您的结果将根据您的原始读数的好坏以及采样的频率而有所不同。如果您想要高精度的精确瞬时速度/位置,您可能需要使用直接测量这些的传感器。


1
投票
cumtrapz

。假设向量

t
包含测量时间,向量
acc
包含加速度测量值,并且初始位置为
pos0
,而初始速度为
vel0
,我会写:

velocity = vel0 + cumtrapz(t,acc); positions = pos0 + cumtrapz(velocity);

我只有一些测量点 cumtrapz 可能是就准确性和简单性而言的最佳解决方案之一。

希望这有帮助。

A.

© www.soinside.com 2019 - 2024. All rights reserved.