1

テスト加速度計データがあり、速度と位置を見つけるために 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 は単純に、ベクトル Acceleration の長さで書かれた曲線の下の合計面積を返します。この障害を回避する方法について何かアイデアがあれば教えてください。

4

3 に答える 3

4

曲線の下の累積面積だけを使用することはできないと言うとき、私はあなたが何を意味するのか少し混乱しています。これ積分であるため、加速度データを統合して速度と位置を取得する場合は、まさにそれが必要です。精度が低い場合は、より高品質の加速度計データが必要になる可能性がありますが、それは後処理では役に立ちません。

単にcumsum()またはcumtrapz()を使用してデータを統合することをお勧めします。

于 2011-02-16T06:11:23.177 に答える
1

迅速でベクトル化されたものが必要な場合は、を使用してcumtrapzください。tベクトルに測定時間が含まれ、そのベクトルaccに加速度測定値が含まれ、初期位置がpos0初期速度であると仮定するとvel0、次のように記述します。

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

私はあなたがいくつかの測定点しか持っていないので、cumtrapzは精度と単純さの点で最良の解決策の1つかもしれません。

お役に立てれば。

A。

于 2011-02-17T21:41:58.317 に答える
1

スプラインを使用して、離散化された加速度データを正確に表し、その下の領域を統合して速度を取得し、再び位置を取得できます。

サンプル ポイント間の加速度値を推定するために使用する方法を決定する必要があります。一般に、3 次スプラインは「現実世界」の加速度を表すのに非常に適していますが、線形スプラインは最も扱いやすく、それでもかなり良い結果が得られます。

結果は、元の読み取り値の良さやサンプリング頻度によって異なることに注意してください。高精度の正確な瞬間速度/位置が必要な場合は、それらを直接測定するセンサーを使用することをお勧めします。

于 2011-02-16T06:13:14.910 に答える