2011-12-18 19 views
1

私はGPSを使ってアンドロイドアプリケーションを開発しています。私はユーザーの平均速度を1/5/15分にわたって表示する機能を実装したいと考えています。 unix上のCPU負荷のようなもの。 2番目に移動した距離を累積することで平均を簡単に計算し、それを経過時間で割りますが、移動平均を計算するスマートな方法は考えられません。GPSから移動平均速度を計算するには?

明らかに、最も古い値を削除しながら、1秒おきに配列の最後と現在の位置の間に距離を置くことでIDを取得できます。

私はこれを行うきちんとした方法を探しています。かなり単純です、それについて移動する

答えて

2

すでに提案したように、すべての値をすべての期間にわたって保存する必要があります。その理由は、移動平均に古い値の寄与を「忘れる」必要があるからです。これらの値がどこに格納されているかわからない場合(つまり、格納していない場合)は、正確に行うことはできません。

あなたの場合、15分ごとに1秒あたり15×60 = 900のデータポイントになります。これは問題ありません。

更新するたびにアレイ全体で合計を実行する必要はないことに注意してください。新しい移動平均は、データポイントの数、新しい値、それに「忘れている」値から計算できます瞬間:ここ

new_average = (n * old_average - x_forget + x_new) 

nx_forgetは、あなたが「忘れて」いるとx_newが最新の値である値であり、データポイント(あなたのケースでは900)の数です。その後、アレイの前面からx_forgetを落とし、最後にx_newを保存します。配列の代わりに、リンクされたリストを介して実装されたキューを使用することもできます。

4

HERESに片道:

あなたは毎秒キューに901個のサンプルを保つ位置をサンプリングしている場合は、価値(1エクストラ)15分のthats。 ポジション0は最新の測定値であり、実質的に現在のポジションです。最後のX分以上の平均速度については

s = X * 60; 
point1 = postion_queue[0]; // this is your current position 
point2 = postion_queue[s]; // this is your position s seconds ago 
d = distance_between_points(point1, point2); 
speed = d/s; 

speedは現在、毎秒単位の距離マイルに変換、またはKPHまたはあなたが必要とするものは何でも単位です。 Xの異なる値は、1〜15分の任意の平均値に使用できます。

関連する問題