FAQ

FAMOS

FAMOS全般top

OROS24ユーザーのための質問コーナー

ID.o007

Q. OROSで複数回測定したトラッキングデータの平均を求めたい

A.


高速で回転数を上昇させた場合など、ハードウェアの制約上の理由により設定した回転数のデータを取りこぼしたり、測定毎に回転数データが異なる場合があります。

このようなデータに対して平均を求めたい場合には少し問題があります。

問題とはサンプルした回転数情報が一致しないからです。

例えば、以下のようにデータが並んだ場合です。

RPM1 DATA1   RPM2 DATA2
1000 64   1000 56
1020 50   1025 60
1050 52   1055 58

このような場合、FAMOSでは2つの解決方法があります。

  • 回転数の値を補間する方法
  • 関数"Add"を利用する方法

以下で各方法の説明を行います。

回転数の値を補間する方法

指定した回転数の値を補間して算出して、同じ回転数情報を持たせます。このように処理すれば単純に足し合わせることができます。

関数”XYdt”を利用します。

回転数やデータとしてサンプルの値を使用します。このとき、補間する回転数間隔を 25[rpm] とします。

以下の式でデータを補間します。

NewDATA1 = XYdt( RPM1, DATA1)

NewDATA2 = XYdt( RPM2, DATA2)

RPM1 DATA1   RPM2 DATA2
1000 64   1000 56
1025 50.3333   1025 60
1050 52   1055 58.3333

このようにデータを補間すれば、簡単にデータを演算できます。

例えば。平均を求めるためには以下の式を実行させてください。

MeanData = (NewDATA1 + NewDATA2)/2

関数Addを利用する方法

先程、データを補間して指定した回転数間隔の値を算出しましたが、関数"Add" を利用すると測定したデータポイントを全て利用します。

NewDATA1 = XYof( RPM1, DATA1)

NewDATA2 = XYof( RPM1, DATA2)

MeanData =  Add( NewDATA1, NewDATA2, 0) /2

RPM1 DATA1   RPM2 DATA2   RPM MeanDATA
1000 64   1000 56   1000 60
1020 50         1020 5406
      1025 60   1025 55.1667
1050 52         1050 55.1667
      1055 58   1055  

この方法の実用シーケンスを以下に紹介します。

下図は結果の例です。

オリジナルのデータ(data1 & data2)に対して、結果(ResultAve)は全てのデータポイントが含まれます。

注意:

データを加算する際に、関数"Add"は単調増加関数しか扱いことができません。

単調増加でない場合、並べ替えを行う必要があります。


    

;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;_/ OROSトラッキングデータの平均を求めます。
;_/ -------------------------------------------------------------

;_/ 複数回のトラッキング解析を行い、これらの平均データを算出します。
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/


;変数リストで選択されているデータを処理します。


_k_Total = VarGetInit(1)
;*********************************************************

; 変数リストでどのチャンネルも選択されていない場合にはシーケンスを終了します
;*********************************************************


if _k_Total<=0
_k_ret = BoxMessage( "エラー", "変数リストで処理したい変数を
選択してください","!1")
    Delete _k_*
    ExitSequence
End


;*********************************************************
;最初のデータを作成します。
;*********************************************************

_k_VarName = VarGetName?(1)
;OROSデータは回転数とデータが別変数となっています。
;回転数の変数名を取得します。

;---------------------------------------------------------
_k_pos        = TxWhere( _k_VarName, ":")
_k_GroupName = TPart( _k_VarName, 1, _k_pos)
_k_RPMName    = TAdd(    _k_GroupName, "回__数プロファイル_タコ1回__数")


;関数ADDの引数は単調増加である必要があるので
;回転数が減少する場合に備えて、ソートします。
;---------------------------------------------------------

Sequence kim_sort <_k_RPMName>, <_k_VarName>, _k_Res1, _k_Res2
ResultAve = XYof( _k_Res1, _k_Res2)


;*********************************************************
;2つ目以降のデータを作成します。
;*********************************************************


_k_Index = 2
While _k_Index <= _k_Total
        _k_VarName = VarGetName?( _k_index)

        ;OROSデータは回転数とデータが別変数となっています。

        ;回転数の変数名を取得します。
        ;-----------------------------------------------------
        _k_pos = TxWhere( _k_VarName, ":")

        _k_GroupName = TPart( _k_VarName, 1, _k_pos)
        _k_RPMName = TAdd( _k_GroupName, "回__数プロファイル_タコ1回__数")


        ;関数ADDの引数は単調増加である必要があるので
        ;回転数が減少する場合に備えて、ソートします。

        ;-----------------------------------------------------
        Sequence kim_sort <_k_RPMName>, <_k_VarName>, _k_Res1, _k_Res2

        _k_TempRes = XYof( _k_Res1, _k_Res2)
        ResultAve = Add( ResultAve, _k_TempRes, 0)

        _k_Index=_k_Index+1
End


ResultAve = ResultAve / _k_Total

Show ResultAve
delete _k_*
ExitSequence

シーケンスファイル kim_sort

;=======================================================

; 1つの変数を昇順に並べ替え、それに対応してもう1つの変数を並べ替えます。
;【使用方法】
; Sequence DATA1, DATA2, Result1, Result2

_ksort_RPM = PA1
_ksort_Data = PA2
;-------------------------------------------------------

_ksort_tempRPMX = Sort
( _ksort_RPM, 3)

_ksort_cnt=1
_ksort_Result = Leng(0,Leng?(_ksort_RPM))
While _ksort_cnt<=Leng?(_ksort_RPM)

_ksort_temp = Value
( _ksort_Data, _ksort_tempRPMX[_ksort_cnt])
        _ksort_Result[_ksort_cnt] = _ksort_temp[1]


        _ksort_cnt = _ksort_cnt+1
End

PA3 = Sort( _ksort_RPM, 1)
PA4 = _ksort_Result

Delete _ksort_*


製品詳細はこちら

<< OROS24ユーザーのための質問コーナーに関するFAQ一覧へ戻る