FAQ
FAMOS
FAMOS全般top
└OROS24ユーザーのための質問コーナー
ID.o009
Q. OROSの最大値検出方法について
A.
定義
最大値の検出については以下のように定義されています。
最大値とは予め設定したスレッショルドを超えた極大値のことを意味します。
シーケンス
;***********************************************
;OROS最大値検出
;***********************************************
;Parametas -------------------------------------
_k_MaxThresh = 20
;初期値の設定-----------------------------------------------
_k_tempMax = -1E20
_k_tempMin = -1E20
_k_Prev = 0
_k_SampTime = XDel?(Data)
If Data[2]>Data[1]
_k_Prev = 1
End
_k_i=3
MaxiX = Leng(0,0)
MaxiY = Leng(0,0)
While _k_i<=Leng?(Data)
If Data[_k_i]>Data[_k_i-1]
If _k_Prev<>1 _k_Prev=1 ;パターンDU
If Data[_k_i-1]<_k_TempMin
_k_TempMin = Data[_k_i-1]
End
End
Else
If _k_Prev=1
_k_Prev=0 ;パターンUD
If Data[_k_i-1]>_k_TempMax
_k_TempMax = Data[_k_i-1] ;一時的な極大値の更新
_k_TempX = (_k_i-2)*_k_SampTime
End
End
If _k_TempMax-_k_MaxThresh>Data[_k_i]
If _k_TempMax-_k_MaxThresh>_k_TempMin
MaxiX = Join(MaxiX, _k_TempX)
MaxiY = Join(MaxiY, _k_TempMax)
_k_TempMax = -1E20
_k_TempMin = 1E20
End
End
End
_k_i=_k_i+1
End
;------------------------------
;データ処理部
;------------------------------
_k_TempX = Sort( MaxiY, 4) ;データを大きい順に並べ、そのときのインデックスを取得
_k_TempX = _k_TempX+1 ;ソートした結果はX単位ですのでインデックスに変換します。
MaxiX = ValueIndex(MaxiX, _k_TempX) ;Xデータを並べ替えます
MaxiY = Sort( MaxiY, 2) ;Yデータを昇順に並べ替えます
;sweap variable-----------------------------------------
Delete _k_*