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_*