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