0

現在、次のコードを使用して、ユーザーが屋内ナビゲーション アプリケーションで実行した歩数を数えています。画面を上に向けて携帯電話を胸の高さに持っているので、かなりうまく歩数がカウントされます。ただし、画面をタップしたり、マップをパンしたりするなどの一般的なアクションも同様にカウントされます。フロアプラン内での私の動きの追跡が非常に不正確になるため、これは非常にイライラします. この場合、追跡の精度を向上させる方法を知っている人はいますか? どんなコメントでも大歓迎です!私がやろうとしていることをよりよく理解するには、http://www.youtube.com/watch?v=wMgIa44mJXY で同様の Android アプリケーションをチェックしてください。ありがとう!

-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {

float xx = acceleration.x;
float yy = acceleration.y;
float zz = acceleration.z;

float dot = (px * xx) + (py * yy) + (pz * zz);
float a = ABS(sqrt(px * px + py * py + pz * pz));
float b = ABS(sqrt(xx * xx + yy * yy + zz * zz));

dot /= (a * b);
if (dot <= 0.9989) {
    if (!isSleeping) {
        isSleeping = YES;
        [self performSelector:@selector(wakeUp) withObject:nil afterDelay:0.3];
        numSteps += 1;
    }
}  
px = xx; py = yy; pz = zz;
}
4

1 に答える 1

0

加速度計からのデータは、基本的に、3 次元ベクトル信号の 1 次元 (時間) 不均一なサンプリングです。歩数をカウントする方法を理解する最良の方法は、一定期間のサンプルを記録して保存するアプリを作成し、分析と視覚化のためにデータを Wolfram の Mathematica などの数学アプリケーションにエクスポートすることです。サンプリングは均一ではないことに注意してください。均一にサンプリングされたデジタル信号に変換したい場合とそうでない場合があります。

次に、さまざまな信号処理アルゴリズムを試して、何が最適かを確認できます。

加速度計データのステップの基本的な形がわかれば、単純な畳み込みで認識できる可能性があります。

于 2012-08-17T12:18:26.233 に答える