万歩計ロジック
ここ何週間か、歩きまくりました。
万歩計の加速度データ取るために。
デバッグより何よりこれが時間かかりました。
ようやくSmartTraining 1.8.0リリースしました。
結局、現時点での歩数の測り方はこうなってます。
①XYZ方向の加速度の絶対値を合計します。
→端末がどの角度でセットされるかわからないため。
②前後5つの生データ(①)の平均をとって高周波成分をフィルタします。
→意外とこれは不要だったかも、と後になって思いました。歩く、走るだとそんなに悪影響を及ぼす高周波成分は多くない。
③①から②を引いてハイパスフィルタかまします。
④③で出た加速度を微分して加速度値の山を見つけます。また、山の値を確保Xします。山が来るたび、Xを確保しなおします。
⑤加速度の山が来るたび、Xで割って正規化します。
→これにより運動強度が途中で変化しても固定の感度値に頼らず万歩計が追従できるようにします。
→今回のバージョンから万歩計感度が無くなったのはこのためです。
→ただし、急激な運動強度変化直後は反応できません。そんなの気にしない。
⑥⑤の値が一定の割合以上であれば、振動とみなして歩数カウントします。
→歩数カウント後、一定時間不感タイムを設けます。
これにより加速度の山前後の微妙なブレの影響を回避します。
コードはまだまだ汚いので出すとしても整理して落ち着いてからかなぁ。
それにしても加速度の扱いは微妙すぎて自分には難しい。
もっとスキルある人だったら楽勝なんでしょうねぇ。
誰かもっといい方法教えてください。
万歩計の加速度データ取るために。
デバッグより何よりこれが時間かかりました。
ようやくSmartTraining 1.8.0リリースしました。
結局、現時点での歩数の測り方はこうなってます。
①XYZ方向の加速度の絶対値を合計します。
→端末がどの角度でセットされるかわからないため。
②前後5つの生データ(①)の平均をとって高周波成分をフィルタします。
→意外とこれは不要だったかも、と後になって思いました。歩く、走るだとそんなに悪影響を及ぼす高周波成分は多くない。
③①から②を引いてハイパスフィルタかまします。
④③で出た加速度を微分して加速度値の山を見つけます。また、山の値を確保Xします。山が来るたび、Xを確保しなおします。
⑤加速度の山が来るたび、Xで割って正規化します。
→これにより運動強度が途中で変化しても固定の感度値に頼らず万歩計が追従できるようにします。
→今回のバージョンから万歩計感度が無くなったのはこのためです。
→ただし、急激な運動強度変化直後は反応できません。そんなの気にしない。
⑥⑤の値が一定の割合以上であれば、振動とみなして歩数カウントします。
→歩数カウント後、一定時間不感タイムを設けます。
これにより加速度の山前後の微妙なブレの影響を回避します。
コードはまだまだ汚いので出すとしても整理して落ち着いてからかなぁ。
それにしても加速度の扱いは微妙すぎて自分には難しい。
もっとスキルある人だったら楽勝なんでしょうねぇ。
誰かもっといい方法教えてください。
コメント
コメントを投稿