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