FAQ

FAMOS

シーケンス / 関数top

シーケンス / 関数

ID.s020

Q. エンジンの回転角度毎に取得したデータを平均化する


エンジンの回転角度(1[deg])毎に1分間のデータを取得しました。
例えば1000[rpm]で回転していたとすると、1回転分360データ×1000=360000データを測定したことになります。

このデータを0-360[deg]毎に切り出して、1000回分の平均を求めるにはどのようにすればよいでしょうか?

A.


_K_SegLeng = 100      ;切り出すセグメント長さを指定してください
SetSegLen( DATA, _K_SegLeng)
Temp = TransposeMatrix( DATA)
i=1
RESULT = Leng( 0, 0)
While i<=_K_SegLeng
   RESULT = Join( RESULT, Mean( temp[i]))
   i=i+1
End

グループ変数内の全ての変数に対して処理する場合のサンプルです。

;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
;_/  長時間のデータを指定したセグメントに切り出して平均化する
;_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

;*******************************
;サンプルデータを作成します。
;データはグループ変数とします。
;*******************************
Del *

dat1 = Ramp(0,1,1000)
dat2 = Ramp(0,1,1000)

GROUP = GrNew()
GrChanAppend( GROUP, dat1)
GrChanAppend( GROUP, dat2)

Del dat*

;*******************************
;シーケンスを実行します。

_K_SegLeng = 100      ;切り出すセグメント長さを指定してください
;*******************************

;-------------------------------------
;変数リスト内の変数の総数を取得して
;全ての変数に対して実行します
;-------------------------------------
_K_VarTotal = VarGetInit(0)
_K_VarIdx   = 1
While _K_VarIdx<=_K_VarTotal
   ;各グループ変数のループ
   _K_VarName = VarGetName?( _K_VarIdx )	
   SetSegLen(<_K_VarName>, _K_SegLeng)

   ;---------------------------------------
   ;グループ内の変数全てに対して処理を行います
   ;---------------------------------------
   _K_GrTotal = GrChanNum?(<_K_VarName>)
   _K_GrIdx = 1
   While _K_GrIdx<=_K_GrTotal
      _K_GrName = GrChanName?( <_K_VarName>, _K_GrIdx)
      ;グループ変数名の生成 FAQ S015参照
      _K_GrName = TAdd(_K_VarName, TAdd(":", _K_GrName))		

      ;---------------------------------------
      ;各変数を平均化します
      ;---------------------------------------
      _K_SegTotal = Leng?(<_K_GrName>)/SegLen?(<_K_GrName>)
      _K_SegIdx = 1
      _K_Result = Leng(0,SegLen?(<_K_GrName>))
      While _K_SegIdx<=_K_SegTotal
         ;平均化
        _K_Result=_K_Result+<_K_GrName>[_K_SegIdx]

      	_K_SegIdx=_K_SegIdx+1
      End
      <_K_GrName>=_K_Result/_K_SegTotal
	
      _K_GrIdx=_K_GrIdx+1
   End

   _K_VarIdx=_K_VarIdx+1
End

Del _K_*

製品詳細はこちら

<< シーケンス / 関数に関するFAQ一覧へ戻る