FAQ
FAMOS
FAMOS技術サポート
└サンプル
ID.f004
Q. FAMOSを使った周波数解析サンプル
A.
はじめに
FAMOSシーケンスの内容を説明するために、振動波形データを1チャンネルのみに限定してシーケンスを作成しました。
FAMOSを使用する前に
作成したFAMOSのシーケンスでは”Spectrum Kit[1](スペクトラムキット)”を使用します。スペクトラムキットを利用するためには、以下の手順に従って設定する必要があります。
1)FAMOSを起動
2)メニュー”Option/ Register Kits”を選択します。
3)起動したダイアログから”Spectral-Analysis [im7spct0.dll]”をチェックします。ここでチェックしたキットがFAMOSで利用できます。
以上でFAMOSの準備は終了です。
インストール
作成したサンプルシーケンスをインストールします。
1)ディレクトリーを作成します。
C:\TOYO\
2)以下のファイルを作成したディレクトリーにコピーします。
機能 |
ファイル名 |
説明 |
---|---|---|
データファイル |
C002d01.raw |
振動波形データ |
I001d01.raw |
エンジン回転数データ |
|
簡易3D FFT解析 |
FFT.seq |
シーケンスファイル |
FFT.ccv |
グラフ設定ファイル |
|
3D FFT解析 |
FFT2.seq |
シーケンスファイル |
FFT2.ccv |
グラフ設定ファイル |
|
クランク角連動時間波形 |
Event.seq |
シーケンスファイル |
Event.ccv |
グラフ設定ファイル |
|
RPM‐Vpp表示 |
XY.seq |
シーケンスファイル |
XY.ccv |
グラフ設定ファイル |
|
定幅トラッキング分析 |
Order.seq |
シーケンスファイル |
Order.ccv |
グラフ設定ファイル |
解析内容
簡易3D FFT解析
最終的な目的は周波数と回転数の3D表示ですが、最初に簡単な3Dのサンプルを示します。このシーケンスでは時間波形をFFTし、周波数とその時間経過を3D表示しています。回転数を徐々に変化させる場合などには、時間経過が回転数に相当するため簡単に解析できます。
カーブウィンドウのメニューから”Opt./ Display”を選択して、”Waterfall”をチェックすると、以下のように表示されます。
3D FFT解析
周波数と回転数の3D表示です。
RPM‐Vpp表示
回転数とVpp(Peak-to-Peak)を作成します
Peak-to-Peakを計算する区間はクランク角2回転分としています。
RPM‐Vpp表示
時間波形からクランク角で2回転分を切り出します。
回転信号に対して、開始・終了回転数を設定し、回転数の刻み幅毎にクランク角2回転分の振動波形を切り出します。
各回転数に対応する波形を表示させるためには、カーブウィンドウの上で右クリックして、コンテキストメニューから”Window Configuration”を選択してください。
起動したダイアログの”Event”タブを選択して、下の図のように選択します。
“This Event”に希望する番号を入力してください。このサンプルでは、3000[RPM]がNo.1で以降10[RPM]毎にインクリメントしていきます。
このとき、ダイアログを表示させたままカーブウィンドウの表示が変化することを確認してください。
定幅トラッキング
振動波形を定幅トラッキング解析します。計算は最初に3D FFT解析を行い、その後各次数成分とオーバーオール値を求めます。
シーケンスファイルの実行方法
詳しい説明はマニュアルを参照してください。
1) ーケンスファイル実行させるためには、最初にFAMOSにデータを読み込んでください。データが読み込まれると、変数リストに変数名が表示されます。
2) 次にシーケンスファイルを読み込みます。FAMOSのメニュー”Extra/ Sequece Editor”を選択します。選択すると、下図のようにエディターが起動します。
3)シーケンスエディターのメニュー”File/ Load”を選択して、希望のシーケンスを読み込みます。
4)シーケンスを実行させるためには、メニュー”Run/ Start”を選択します。このメニューを選択するとシーケンスが最後まで完全に実行されます。1行ずつコマンドを実行させるためには、メニュー ”Run/ Step”を選択します。この方法で各ステップを確認しながら実行することを勧めます。ステップ実行では、各ステップの計算結果を確認することができま す。
プログラム
ページの都合上、改行を入れてある部分があります。正確にはシーケンスファイルを参照してください。
7.1 簡易3D FFT解析
;**************************************************
;FFT.Seq
振動波形を3次元表示します。(周波数・回数・レベル)
この方法は、非常に簡単ですが、FFTのように回数軸がRPMにはなりません。
時間の経過に対するFFT結果の推移を観察できます。
;
;FAMOSの組込み関数は、青字で表示されます。
;オンラインヘルプを表示させるためには、カーソルを組込み関数の上に持っていき、"Ctrl+F1"キーを押してください。
;FAMOSメインウィンドウの"Output"ボックスにヘルプが表示されます。
;**************************************************
;----------------------------------
;ベースディレクトリーを設定します。
;ユーザーの環境に合わせて変更してください。
;----------------------------------
FT_Dir = "c:\TOYO\"
;----------------------------------
;データを設定します。
;----------------------------------
FT_Input = Channel_03
;---------------------------------------------
;フィルターを使用するときには、次のコマンドを利用します。
;先頭のセミコロン";"を取り除くと、コマンドが利用できます。
;
;フィルターのパラメータを変更したいときには、直接パラメータを変更しても良いですが、
;フォーミュラーアシスタントを利用すると便利です。
;その方法は、
; 1) "FiltLP"の上にカーソルを置き、
; 2) "SHIFT+F1"キーを押してください。
; 3) フォーミュラーアシスタントが起動しますので、パラメータを入力します。
; 4) "Sequence"というボタンを押すと、コマンドが変更されます。
;---------------------------------------------
;XY_Input = FiltLP(XY_Input, 0, 0, 2, 500)
;FFTパラメータ
FT_WindowWidth = 1024 ; ポイント数
FT_WindowType = 2 ; 0:Rectangle / 1:Hamming / 2:Hanning / 3:Blackman / 4:Blackman-Harris / 5:Flat Top
FT_Overlapping = 50 ; [%]
FT_Reduction = 1
FT_AveragingType = 0
;定常(DC)成分を取り除きます
FT_Input = FiltHP( FT_Input, 0, 0, 2, 0.5)
;FFT演算を行います。
Result = AmpSpectrumPeak(FT_Input,FT_WindowWidth,FT_WindowType,FT_Overlapping,FT_Reduction,FT_AveragingType )
;結果を表示します。
Show Result
CvConfig( Result, TAdd( FT_Dir, "FFT.ccv"))
;テンポラリー変数を削除します。
Del FT_*
7.2 3D FFT解析
;***************************************************************
;FFT2.seq
; 振動波形を3次元表示します。(周波数・回転数・レベル)
; カーブウィンドウでの3D表示の場合、回転数に相当するZ軸は等間隔でプロットされなければなりません。
; 従って、この方法では回転数を一定刻み幅で設定し、そのときの波形に対してFFT演算を実行しています。
;
;FAMOSの組込み関数は、青字で表示されます。
;オンラインヘルプを表示させるためには、カーソルを組込み関数の上に持っていき、"Ctrl+F1"キーを押してください。
;FAMOSメインウィンドウの"Output"ボックスにヘルプが表示されます。
;***************************************************************
;----------------------------------
;ベースディレクトリーを設定します。
;ユーザーの環境に合わせて変更してください。
;----------------------------------
XY_Dir = " c:\TOYO\"
;----------------------------------
;データを設定します。
;----------------------------------
XY_Pulse = Inc_Encod_01
XY_Input = Channel_03
;--------------------------------------------------
;FFTパラメータ
XY_WindowWidth = 1024 ; ポイント数
XY_WindowType = 2 ; 0:Rectangle / 1:Hamming / 2:Hanning / 3:Blackman / 4:Blackman-Harris / 5:Flat Top
XY_Overlapping = 50 ; [%]
XY_Reduction = 1
XY_AveragingType = 0
;--------------------------------------------------
;定常(DC)成分を取り除きます
XY_Input = FiltHP( XY_Input, 0, 0, 2, 0.5)
;---------------------------------------------
;フィルターを使用するときには、次のコマンドを利用します。
;先頭のセミコロン";"を取り除くと、コマンドが利用できます。
;
;フィルターのパラメータを変更したいときには、直接パラメータを変更しても良いですが、
;フォーミュラーアシスタントを利用すると便利です。
;その方法は、
; 1) "FiltLP"の上にカーソルを置き、
; 2) "SHIFT+F1"キーを押してください。
; 3) フォーミュラーアシスタントが起動しますので、パラメータを入力します。
; 4) "Sequence"というボタンを押すと、コマンドが変更されます。
;---------------------------------------------
XY_Input = FiltLP(XY_Input, 0, 0, 2, 500)
;--------------------------------------------
;回転数の設定
;--------------------------------------------
XY_RPM_Start = 700 ;解析開始回転数
XY_RPM_STOP = 3000 ;解析終了回転数
XY_RPM_delta = 10 ;回転数の刻み幅
;計算するポイント数を求めます
XY_Data_num = 1+Abs((XY_RPM_Stop-XY_RPM_Start)/XY_RPM_delta)
;結果を格納する配列を作成します。
;FFTのデータ数が1024点の場合、FFT演算結果は513となります。
;従って、513×演算回数分の2次元マトリクスを用意します。
Result = Leng( 0, (XY_WindowWidth/2+1)*XY_Data_num)
SetSegLen( Result, (XY_WindowWidth/2+1))
;時間データを切り出す時間です。
XY_delta_Time = XY_WindowWidth*XDel?( XY_Input)/2
XY_i=1
XY_RPM = XY_RPM_Start
While XY_RPM<=XY_RPM_Stop
;指定回転数に対応する測定時間の取得
XY_X_Center = Pos( XY_Pulse, XY_RPM)
;1回分のFFTに必要な時間データを取り出します
XY_Temp_Data = Cut( XY_Input, XY_X_center-XY_delta_Time, XY_X_center+XY_delta_Time)
;1回分のFFTを行います。
XY_Seg_Dat = AmpSpectrumPeak( XY_Temp_Data, XY_WindowWidth, XY_WindowType, XY_Overlapping, XY_Reduction, XY_AveragingType )
XY_Delta = Xdel?(XY_Seg_Dat)
;テンポラリーのデータに算出した値を格納します。
Result[ XY_i] = XY_Seg_Dat[1]
XY_i=XY_i+1
XY_RPM = XY_RPM+XY_RPM_delta
End
SetUnit( Result, "RPM", 2)
SetZoff( Result, XY_RPM_Start)
SetZdel( Result, XY_RPM_delta)
XUnit Result "Hz"
Result = Xdel( Result, XY_Delta)
Show Result
CvConfig( Result, TAdd( XY_Dir, "FFT2.ccv"))
Del XY_*
7.3 RPM‐Vpp表示
;***************************************************************
;XY.seq
; 回転数とVpp(Peak-to-Peak)を作成します
; Peak-to-Peakを計算する区間はクランク角2回転分としています。
;
;FAMOSの組込み関数は、青字で表示されます。
;オンラインヘルプを表示させるためには、カーソルを組込み関数の上に持っていき、"Ctrl+F1"キーを押してください。
;FAMOSメインウィンドウの"Output"ボックスにヘルプが表示されます。
;***************************************************************
;----------------------------------
;ベースディレクトリーを設定します。
;ユーザーの環境に合わせて変更してください。
;----------------------------------
XY_Dir = " c:\TOYO\"
;----------------------------------
;データを設定します。
;----------------------------------
XY_Pulse = Inc_Encod_01
XY_Input = Channel_03
;---------------------------------------------
;フィルターを使用するときには、次のコマンドを利用します。
;先頭のセミコロン";"を取り除くと、コマンドが利用できます。
;
;フィルターのパラメータを変更したいときには、直接パラメータを変更しても良いですが、
;フォーミュラーアシスタントを利用すると便利です。
;その方法は、
; 1) "FiltLP"の上にカーソルを置き、
; 2) "SHIFT+F1"キーを押してください。
; 3) フォーミュラーアシスタントが起動しますので、パラメータを入力します。
; 4) "Sequence"というボタンを押すと、コマンドが変更されます。
;---------------------------------------------
;XY_Input = FiltLP(XY_Input, 0, 0, 2, 500)
;--------------------------------------------
;回転数の設定
;--------------------------------------------
XY_RPM_Start = 700 ;解析開始回転数
XY_RPM_STOP = 3000 ;解析終了回転数
XY_RPM_delta = 10 ;回転数の刻み幅
;計算するポイント数を求めます
XY_Data_num = 1+Abs((XY_RPM_Stop-XY_RPM_Start)/XY_RPM_delta)
;テンポラリーのデータです
XY_X_data = Leng(0, XY_Data_num)
XY_Y_data = Leng(0, XY_Data_num)
XY_i=1
XY_RPM = XY_RPM_Start
While XY_RPM<=XY_RPM_Stop
;指定回転数に対応する測定時間の取得
XY_X_Center = Pos( XY_Pulse, XY_RPM)
;2回転に対応する時間を求めます
XY_RPM_Time = 2/(XY_RPM/60)
;回転数に対応する時間の2回転分を切り出します。
XY_Temp_Data = Cut( XY_Input, XY_X_center-XY_RPM_Time, XY_X_center+XY_RPM_Time)
;この区間のPeak-to-Peakを求めます。
XY_Vpp=Max( XY_Temp_Data)-Min( XY_Temp_Data)
;テンポラリーのデータに算出した値を格納します。
XY_X_Data = ReplIndex( XY_X_Data, XY_RPM, XY_i)
XY_Y_Data = ReplIndex( XY_Y_Data, XY_Vpp, XY_i)
XY_i=XY_i+1
XY_RPM = XY_RPM+XY_RPM_delta
End
;XY波形を作成します
Result = XYof( XY_X_Data, XY_Y_Data)
;単位を設定します
XUnit Result "RPM"
YUnit Result "μS"
Show Result
Del XY_*
7.4 RPM‐Vpp表示
;****************************************************************
;Event.Seq
; 時間波形からクランク角で2回転分を切り出します。
; 回転信号に対して、開始・終了回転数を設定し、回転数の刻み幅毎にクランク角2回転分の振動波形を切り出します
;
;FAMOSの組込み関数は、青字で表示されます。
;オンラインヘルプを表示させるためには、カーソルを組込み関数の上に持っていき、"Ctrl+F1"キーを押してください。
;FAMOSメインウィンドウの"Output"ボックスにヘルプが表示されます。
;****************************************************************
;----------------------------------
;ベースディレクトリーを設定します。
;ユーザーの環境に合わせて変更してください。
;----------------------------------
Ev_Dir = " c:\TOYO\"
;--------------------------------------------
;回転数の設定
;--------------------------------------------
EV_RPM_Start = 700 ;解析開始回転数
EV_RPM_STOP = 3000 ;解析終了回転数
EV_RPM_delta = 10 ;回転数の刻み幅
;--------------------------------------------
;データの設定
;--------------------------------------------
EV_Pulse = Inc_Encod_01
EV_Input = Channel_03
;---------------------------------------------
;フィルターを使用するときには、次のコマンドを利用します。
;先頭のセミコロン";"を取り除くと、コマンドが利用できます。
;
;フィルターのパラメータを変更したいときには、直接パラメータを変更しても良いですが、
;フォーミュラーアシスタントを利用すると便利です。
;その方法は、
; 1) "FiltLP"の上にカーソルを置き、
; 2) "SHIFT+F1"キーを押してください。
; 3) フォーミュラーアシスタントが起動しますので、パラメータを入力します。
; 4) "Sequence"というボタンを押すと、コマンドが変更されます。
;---------------------------------------------
;XY_Input = FiltLP(XY_Input, 0, 0, 2, 500)
;*****************************************
;1回目のみイベントデータを新規に定義します
;*****************************************
;指定回転数に対応する測定時間の取得
EV_RPM = EV_RPM_Start
EV_X_Center = Pos( Ev_Pulse, EV_RPM)
;2回転に対応する時間を求めます
EV_RPM_Time = 2/(EV_RPM/60)
;回転数に対応する時間の2回転分を切り出します。
EV_Temp_Data = Cut( EV_Input, EV_X_center-EV_RPM_Time, EV_X_center+EV_RPM_Time)
;データをイベントデータとして記録します。
Result = EventNew(EV_Temp_Data, 0)
;*****************************************
;2回目以降はイベントデータに追加します。
;*****************************************
EV_RPM = EV_RPM+EV_RPM_delta
While EV_RPM<=EV_RPM_Stop
;指定回転数に対応する測定時間の取得
EV_X_Center = Pos( EV_Pulse, EV_RPM)
;2回転に対応する時間を求めます
EV_RPM_Time = 2/(EV_RPM/60)
;回転数に対応する時間の2回転分を切り出します。
EV_Temp_Data = Cut( EV_Input, EV_X_center-EV_RPM_Time, EV_X_center+EV_RPM_Time)
EventAppend( Result, EV_Temp_Data, 0)
EV_RPM = EV_RPM+EV_RPM_delta
End
Show Result
CvConfig( Result, TAdd( Ev_Dir, "Event.ccv"))
Del Ev_*
7.5 定幅トラッキング分析
;***************************************************************
;Order.seq
; 振動波形を次数分析します。
;
;FAMOSの組込み関数は、青字で表示されます。
;オンラインヘルプを表示させるためには、カーソルを
;組込み関数の上に持っていき、"Ctrl+F1"キーを押してください。
;FAMOSメインウィンドウの"Output"ボックスにヘルプが表示されます。
;***************************************************************
;----------------------------------
;ベースディレクトリーを設定します。
;ユーザーの環境に合わせて変更してください。
;----------------------------------
OR_Dir = "c:\TOYO\"
;------------------------------------
;次数を設定します。
;------------------------------------
OR_Order2 = 2 ;次数
OR_Order4 = 4 ;次数
OR_Order_delta = 5 ;[Hz]
;------------------------------------
;ウォーターフォール波形を作成
;------------------------------------
OR_TempDir = TAdd( OR_Dir, "FFT2.seq")
Sequence <OR_TempDir>
;------------------------------------
;ウォーターフォールから回転数の情報を取得
;------------------------------------
OR_RPMStart = ZOff?( Result)
OR_delta = ZDel?( Result)
OR_num = Leng?( Result)/SegLen?( Result)
OR_RPMStop = OR_RPMStart + OR_delta*(OR_num-1)
;----------------------------------
;結果を格納する配列を作成します。
;----------------------------------
ResOrder2 = Leng( 0, OR_num)
ResOrder4 = Leng( 0, OR_num)
ResOrderOA = Leng( 0, OR_num)
OR_i = 1
OR_RPM = OR_RPMStart
While OR_RPM<=OR_RPMStop
;2次成分を取り出します。
OR_Temp1 = Cut( Result[OR_i], OR_RPM/60*OR_Order2-OR_Order_delta, OR_RPM/60*OR_Order2+OR_Order_delta)
ResOrder2 = ReplIndex( ResOrder2, RMS( OR_Temp1), OR_i)
;4次成分を取り出します。
OR_Temp2 = Cut( Result[OR_i], OR_RPM/60*OR_Order4-OR_Order_delta, OR_RPM/60*OR_Order4+OR_Order_delta)
ResOrder4 = ReplIndex( ResOrder4, RMS( OR_Temp2), OR_i)
;OverAllを計算します
OR_Temp = Sqrt( SUM( Result[OR_i]^2))
ResOrderOA = ReplIndex( ResOrderOA, OR_Temp, OR_i)
OR_i = OR_i+1
OR_RPM = OR_RPM+OR_delta
End
;----------------------------------
;波形の表示
;----------------------------------
Show ResOrder2
CvYaxis( ResOrder2, ResOrder4, 0, 0, 0, 400, -2 )
CvYaxis( ResOrder2, ResOrderOA, 0, 0, 0, 400, -2 )
ResOrder2 = XOff( ResOrder2, OR_RPMStart)
ResOrder2 = XDel( ResOrder2, OR_delta)
SetComm( ResOrder2, "2次")
ResOrder4 = XOff( ResOrder4, OR_RPMStart)
ResOrder4 = XDel( ResOrder4, OR_delta)
SetComm( ResOrder4, "4次")
ResOrderOA = XOff( ResOrderOA, OR_RPMStart)
ResOrderOA = XDel( ResOrderOA, OR_delta)
SetComm( ResOrderOA, "O.A.")
XUnit ResOrder2 "RPM"
CvConfig( ResOrder2, TAdd( OR_Dir, "Order.ccv"))
;-----------------------------------
;変数の削除
;-----------------------------------
Del OR_*
Del Result
[1]キットとはFAMOSの機能を拡張させる関数です。スペクトラムキットには周波数解析用の関数が多数含まれます。