2016-11-04 4 views
2

Plot of instantaneous accelerometer values against timeiPhoneから取得した加速度データに必要な最大値を見つけるにはどうすればよいですか?

加速度計の値のストリームが最大になる回数を見つける必要があります。私はiPhoneModelから取得した加速度計の値を、CoreMotionメソッドを使用してDeviceMotionUpdatesを取得してプロットしました。データが記録されているとき、私は電話を9回揺らしました(各四肢は最高加速点の1つでした)。

私は、プロット上の赤いボックスで加速が最大に達したときに18(つまり9 * 2)回のマークを付けました。

しかし、あなたが見るように、私は考慮したくないローカルマキシマがいくつかあります。誰かが私に重要性の最大値を検出するのに役立つアイデアに向かって私を導くことができますか?

編集:ローパスフィルターを使用する必要があると思います。しかし、私はこれをSwiftにどのように実装しますか?カットオフの頻度をどのように選択するのですか?

編集2: Accelerometer data passed through a low pass filter ローパスフィルタを実装し、ローモーションデータを渡してグラフを次のように取得しました。これははるかに良いです。私はまだ観察できる重要でない最大値を避ける方法が必要です。私はフィルターと深く勉強し、おそらくそれを修正するでしょう。

+0

[ローカル最大値を特定するアルゴリズム]の複製があります(http://stackoverflow.com/questions/3242910/algorithm-to-locate-local-maxima) – andand

+0

@andこれはその複製ではありません。その質問は、極大値を見つける方法を尋ねる。これはグローバルな最大値を見つける方法を尋ねます – Nyakiba

+0

グローバルな最大値を探しているとは思いません。線形時間で徹底的な検索を使用して見つけることができる単なる1つの値になります。あなたが特定のしきい値を超えるすべての極大値を数えたいと思うように私には見えます。そうでない場合は、あなたの質問に言い直す必要があります。 – andand

答えて

1

maximasを見つけるのではなく、サイクルを探すようにします。特に、(主な)ミニマムは、マクセルカよりもずっと安定しているように見える。

私は迅速に慣れていないので、擬似コードで自分の考えをレイアウトします。 v[i]に値を、dv[i] = v[i] - v[i - 1]に派生値を設定したとします。よりよい結果が得られれば、他の差別化スキームを使用することができます。

私は今、あなたは、ユーザーが別の力で振ることができるはずというコメントで注意し

cycles = [] // list of pairs 
cstart = -1 
cend = -1 
v_threshold = 1.8 // completely guessing these figures looking at the plot 
dv_threshold = 0.01 
for i in v: 
    if cstart < 0 and 
     v[i] > v_threshold and 
     dv[i] < dv_threshold then: 
     // cycle is starting here 
     cstart = i 
    else if cstart > 0 and 
      v[i] < v_threshold and 
      dv[i] < dv_threshold then: 
     // cycle ended 
     cend = i 
     cycles.add(pair(cstart, cend)) 
     cstart = -1 
     cend = -1 
    end if 

ような何かをしようと、あなたは運動を認識することができるはずです。上記のような単純な「ハードコード」のケースから始め、十分にうまく動作するかどうかを確認します。あなたは可変閾値を得ることを試みることができる多くのことがありますが、それでもあなたは常にそれを必要とします。しかし、あなたが示したデータから、少なくとも、あなたはmaximasではなくminimasを見ることに自分自身を制限することを強くお勧めします。

また、私が提案したコードはあなたが完全なデータセットを持っていると仮定して書かれていますが、これをリアルタイムで実行したいと考えています。これは問題ありません。アルゴリズムは引き続き動作します(つまり、アイデアは引き続き機能しますが、コードを多少異なる方法でコード化する必要があります)。

+0

うわー。これは大きな助けです!どうもありがとうございます。私はこれを試して、それがどのように進むのかを教えてあげます。あなたはミニマについて正しいです、彼らはより一貫しています。 –

+0

@ VishalV.Shekkarメソッドを正常に使用できましたか? – pingul

関連する問題