【STA】ターンを検出するアルゴリズム検討<Nutral状態の検出>

STAプログラム改良作業開始してますが、スキーターン解析アルゴリズムを考えながらプログラムにしていきます。

●スキーターンを検出するパラメータはheadMot

グラフをながめていると緑色のNAV-PVTのheadMot角(速度ベクトルの方向角)の極値が、丁度スキー切り替えポイントであることが見えます。
スキー用語でいうNUTRALポイントです。ターン弧を抜け出して直進状態から次のターンに代わるところで方向が逆転するポイントをさします。
ここをターン検出のアンカーとして採用してみました。

 

●headMotの極値を検出するアルゴリズム
これは、過去のアルゴリズムを使いました。この記事に詳細あります。
上死点ピーク検出Pgm出来た<VBA>

波形処理で、まず、移動平均で馴らしてから、微分して正負の変化点を極値とするアルゴリズムです。
EXCELで移動平均を何回がいいかをためして、5回がよかったので、5回を採用しました。
微分は、単に、現在のデーター1個前のデータの引き算の正負判断だけにしました。

●プログラムの工夫
全プロットデータの中で、極値のあるデータを1として極値でないデータを0とするNutralR(),NutralL()配列をグローバルに1万個用意
 CSVファイルをよみこんで処理範囲を決めたら、Sub Nutral()でカウントを極値検出アルゴリズムを回します。
そして、Nutral配列ができていることをCheckBox12をチェックして目印としておいて、全データプロット時に、Nutral()=1の場合は
プロットする点の半径を10ドットと大きくすることで表示するプログラムに改造しました。
データ確認用に、RichTextBox2に検出データを表示してグラフと比較できるようにしてあります。

保存用に全プログラムGISTにアップしておきます。
https://gist.github.com/dj1711572002/cbf60026f888c5a1a0236b47c12333ae

Private Sub Nutral()
Dim stNo As Integer = Int(TextBox4.Text)
Dim endNo As Integer = Int(TextBox5.Text)
Dim ic, i5 As Integer
Dim sum5R, sum5L As Double
Dim nuNR, nuNL As Integer
Dim numN As Integer = 0
Dim num As Integer = endNo – stNo
Dim MA5headR(endNo) As Double
Dim DifheadR(endNo) As Double
Dim MA5headL(endNo) As Double
Dim DifheadL(endNo) As Double
nuNR = 0
nuNL = 0
For ic = stNo To endNo – 5
numN += 1
sum5R = 0
sum5L = 0
For i5 = ic To 4 + ic
headR = (dgv1.Rows(i5).Cells(col_lon + 10).Value * 0.00001)
headL = (dgv1.Rows(i5).Cells(col2_lon + 10).Value * 0.00001)
sum5R = sum5R + headR
sum5L = sum5L + headL
Next i5
MA5headR(ic) = sum5R / 5
MA5headL(ic) = sum5L / 5
If ic > 0 Then
DifheadR(ic) = MA5headR(ic) – MA5headR(ic – 1)
DifheadL(ic) = MA5headL(ic) – MA5headL(ic – 1)If DifheadR(ic) * DifheadR(ic – 1) < 0 Then
NutralR(ic) = 1
RichTextBox2.AppendText(“NutralheadR(” + CStr(ic) + “)=” + CStr(1) + vbCrLf)
CheckBox12.Checked = True
Else
NutralR(ic) = 0
End If
If DifheadL(ic) * DifheadL(ic – 1) < 0 Then
NutralL(ic) = 1
RichTextBox2.AppendText(“NutralheadL(” + CStr(ic) + “)=” + CStr(1) + vbCrLf)
CheckBox12.Checked = True
Else
NutralL(ic) = 0
End IfEnd If
Next icEnd Sub

●結果

 ①1ターン分を切り取って表示すると見事にNUTRALポイントで丸がついてます。

②直線で検出エラーがでた

●以後
ターン毎に正規化して、フォールラインを水平にそろえて、ターンの評価パラメータを表記できるようなアナライザ機能をつけます。
モーションも迫力ある現実感があるものにしていきます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です