サンプルデータで何ができるか見てみましょう。
免責事項:私はあなたのハードウェア仕様を読んでいませんでした(tl; dr :))
便宜上、これをMathematicaで解決します。関連するアルゴリズム(多くはありません)がリンクとして提供されます。
最初の観察は、すべての測定値が時間的に等間隔に配置されていることです。これは、アプローチとアルゴリズムを単純化するのに最も便利です。「時間」または「ティック」(測定値)は、同等であるため、便宜上表現します。
まず、軸ごとに位置をプロットして、問題が何であるかを確認しましょう。
(* This is Mathematica code, don't mind, I am posting this only for
future reference *)
ListPlot[Transpose@(Take[p1[[All, 2 ;; 4]]][[1 ;;]]),
PlotRange -> All,
AxesLabel -> {Style["Ticks", Medium, Bold],
Style["Position (X,Y,Z)", Medium, Bold]}]

さて、2つの観察:
- あなたの動きはダニ1000あたりから始まります
- あなたの動きは{0,0,0}から始まりません
したがって、ゼロ位置を減算し、ティック950から開始して、データをわずかに変換します。
ListLinePlot[
Drop[Transpose@(x - Array[Mean@(x[[1 ;; 1000]]) &, Length@x]), {}, 950],
PlotRange -> All,
AxesLabel -> {Style["Ticks", Medium, Bold],
Style["Position (X,Y,Z)", Medium, Bold]}]

曲線には計算を台無しにするのに十分なノイズがあるため、ガウスカーネルで畳み込み、ノイズを除去します。
kern = Table[Exp[-n^2/100]/Sqrt[2. Pi], {n, -10, 10}];
t = Take[p1[[All, 1]]];
x = Take[p1[[All, 2 ;; 4]]];
x1 = ListConvolve[kern, #] & /@
Drop[Transpose@(x - Array[Mean@(x[[1 ;; 1000]]) &, Length@x]), {},
950];

したがって、元の滑らかな軌道の下に表示されます。


これで、速度と加速度の導関数を取得する準備が整いました。一次導関数と二次導関数には4次近似を使用します。また、以前と同様に、ガウスカーネルを使用してそれらを平滑化します。
Vel = ListConvolve[kern, #] & /@
Transpose@
Table[Table[(-x1[[axis, i + 2]] + x1[[axis, i - 2]] -
8 x1[[axis, i - 1]] +
8 x1[[axis, i + 1]])/(12 (t[[i + 1]] - t[[i]])), {axis, 1, 3}],
{i, 3, Length[x1[[1]]] - 2}];
Acc = ListConvolve[kern, #] & /@
Transpose@
Table[Table[(-x1[[axis, i + 2]] - x1[[axis, i - 2]] +
16 x1[[axis, i - 1]] + 16 x1[[axis, i + 1]] -
30 x1[[axis, i]])/(12 (t[[i + 1]] - t[[i]])^2), {axis, 1, 3}],
{i, 3, Length[x1[[1]]] - 2}];
そして、それらをプロットします。
Show[ListLinePlot[Vel,PlotRange->All,
AxesLabel->{Style["Ticks",Medium,Bold],
Style["Velocity (X,Y,Z)",Medium,Bold]}],
ListPlot[Vel,PlotRange->All]]
Show[ListLinePlot[Acc,PlotRange->All,
AxesLabel->{Style["Ticks",Medium,Bold],
Style["Acceleation (X,Y,Z)",Medium,Bold]}],
ListPlot[Acc,PlotRange->All]]

これで、速度と加速係数もわかります。
ListLinePlot[Norm /@ (Transpose@Vel),
AxesLabel -> {Style["Ticks", Medium, Bold],
Style["Speed Module", Medium, Bold]},
Filling -> Axis]
ListLinePlot[Norm /@ (Transpose@Acc),
AxesLabel -> {Style["Ticks", Medium, Bold],
Style["Acceleration Module", Medium, Bold]},
Filling -> Axis]

そして、速度の方向としての見出し:
Show[Graphics3D[
{Line@(Normalize/@(Transpose@Vel)),
Opacity[.7],Sphere[{0,0,0},.7]},
Epilog->Inset[Framed[Style["Heading",20],
Background->LightYellow],{Right,Bottom},{Right,Bottom}]]]

始めるにはこれで十分だと思います。特定のパラメータの計算についてサポートが必要な場合はお知らせください。
HTH!
編集
例として、手が静止していないときの平均速度を計算するとします。したがって、速度がカットオフを超えるすべてのポイント、たとえば5を選択し、平均を計算します。
Mean@Select[Norm /@ (Transpose@Vel), # > 5 &]
-> 148.085
その大きさの単位は時間の単位によって異なりますが、どこにも指定されていません。
カットオフ速度は「直感的」ではないことに注意してください。平均速度とカットオフ速度をプロットすることにより、適切な値を検索できます。
ListLinePlot[
Table[Mean@Select[Norm /@ (Transpose@Vel), # > h &], {h, 1, 30}],
AxesLabel -> {Style["Cutoff Speed", Medium, Bold],
Style["Mean Speed", Medium, Bold]}]

したがって、5が適切な値であることがわかります。