DIAdemで短時間フーリエ変換をすべてのデータ領域に行う方法

更新しました Nov 18, 2022

環境

ソフトウェア

  • DIAdem

DIAdemでは元のデータから窓関数によって切り出した部分に対してフーリエ変換を行う事ができます。また、DIAdem Analysisの1チャンネルFFT及び2チャンネルFFTの「インターバル」の設定を使用する事で、すべてのデータに対してこの処理を前のデータから順次行い、複数のフーリエ変換を出力する事ができます。ここでは1チャンネルFFTの「インターバルの回数」、「FFTデータ長」、「オーバーラップ」の設定を使用して短時間フーリエ変換を行った結果を確認します。
 

目次

  1. テスト用の振動データを作成する
  2. データ長もしくはデータの分割数を指定して短時間フーリエ変換を行う
  3. オーバーラップありの場合の短時間フーリエ変換
  4. 結果データの等高線図表示


 

1. テスト用の振動データを作成する

DIAdemを起動し、SCRIPTを開きます。新規ファイルを追加からVBSスクリプトを作成します。下記のVBスクリプトをコピー&ペーストし、実行します。

 

'-------------------------------------------------------------------------------
'-- VBS スクリプトファイル
'-- 作成日: 2022/05/16 14:26:38
'-- 作成者: 
'-- コメント: 
'-------------------------------------------------------------------------------
Option Explicit   'スクリプト内のすべての変数の明示的な宣言を強制します。
Dim oMyGrp, oMyChnX, oMyChnY,oMyChnY1,oMyChnY2,oMyChnY3,oMyChnY4, i, fs

'Data Portalのデータをすべて削除します
Data.Root.Clear

'Data Portalに新規のチャンネルグループ、チャンネルを作成します
'xは時間軸(0.0001 - 1.000秒、0.0001秒ステップ、10000点)、yは振動データ1
'振動データは次のステップで実際のデータを作成します

Set oMyGrp = Data.Root.ChannelGroups.Add("g1")
Set oMyChnX = oMyGrp.Channels.Add("x",DataTypeFloat64)
Set oMyChnY = oMyGrp.Channels.Add("y",DataTypeFloat64)
Set oMyChnY1 = oMyGrp.Channels.Add("y1",DataTypeFloat64)
Set oMyChnY2 = oMyGrp.Channels.Add("y2",DataTypeFloat64)
Set oMyChnY3 = oMyGrp.Channels.Add("y3",DataTypeFloat64)
Set oMyChnY4 = oMyGrp.Channels.Add("y4",DataTypeFloat64)

'振動データに下記の周波数成分の正弦波を含むデータを作成し、格納します

fs = 10000
For i = 1 to fs
  oMyChnX(i) = i/fs
  oMyChnY1(i) = 3*cos(2*3.14*1000*i/fs)  '振動データ(y1) = 1000 Hz (t = 0 - 1 s, 振幅 = 3)

if i < 3000 then '振動データ(y2) = 2000 Hz (t < 0.3 s, 振幅 = 2)
  oMyChnY2(i) = 2*cos(2*3.14*2000*i/fs) 
  Else oMyChnY2(i) = 0 
  end if
if i > 2000 and i < 5000 then '振動データ(y3) = 4500 Hz (t = 0.2 - 0.5 s, 振幅 = 1)
  oMyChnY3(i) = 1*cos(2*3.14*4500*i/fs) 
  Else oMyChnY3(i) = 0 
  end if
if i > 7000 and i < 9000 then '振動データ(y4) = 1500 Hz (t = 0.7 - 0.9 s, 振幅 = 4)
  oMyChnY4(i) = 4*cos(2*3.14*1500*i/fs) 
  Else oMyChnY4(i) = 0 
  end if
oMyChnY(i) = oMyChnY1(i) + oMyChnY2(i) + oMyChnY3(i) + oMyChnY4(i)
Next

Set Data.GetChannel("[1]/y").xRelation = Data.GetChannel("[1]/x")
Set Data.GetChannel("[1]/y1").xRelation = Data.GetChannel("[1]/x")
Set Data.GetChannel("[1]/y2").xRelation = Data.GetChannel("[1]/x")
Set Data.GetChannel("[1]/y3").xRelation = Data.GetChannel("[1]/x")
Set Data.GetChannel("[1]/y4").xRelation = Data.GetChannel("[1]/x")


このスクリプトを実行すると下記の様にData Portal上に下記のデータが作成されます。DIAdem VIEWでデータを確認するとスクリプトで設定した領域、振動数のデータが生成されている事が確認できます。
 

testdata.png


以下では4つの振動数のデータの重ね合わせで得られた振動データyを使用して1チャンネルFFTを行います。

目次へ
 

2. データ長もしくはデータの分割数を指定して短時間フーリエ変換を行う

ANALYSISを選択し、ツールバーの信号解析から1チャンネルFFTを起動します。下記のようにインターバルのタブにてデータ長/開始/オーバーラップを選択し、FFTデータ長を1000にして解析を行います。
 

fft1.png


テスト用データは10000点のデータを持っている為、FFTデータ長 = 1000、オーバーラップ = 0 %とした場合、10個のフーリエ変換の結果が出力されます。これらのデータをDIAdem Analysis > チャンネル > チャンネル<->XYチャンネルを使用してXYチャンネルに変換後、DIAdem Viewで描写すると下記の様になります。(Y軸で右クリックを行い、Y軸>>Nシステム[リニア]を選択すると下記の様に複数のデータを個別に描写できます。)
 

FFTresuts1e.png


上記のデータを確認すると振動データy1 - y4が設定した時間領域において観測されている事が確認できます。

次にインターバルの回数の設定を使用し、同じ解析を行う方法を確認します。再度、サンプルデータ生成のスクリプトを実行し、Data Portalの状態をサンプルデータのみにします。ANALYSISを選択し、ツールバーの信号解析から1チャンネルFFTを起動します。下記のようにインターバルのタブにて回転/開始/オーバーラップを選択し、インターバルの回数を10にして解析を行います。サンプルデータのデータ長は10000点なのでこの設定の場合、1000点ずつ解析が行われ、先に行ったデータ長=1000の時と同じ解析結果が得られます。
 

fftsetting1.png


目次へ

 

3. オーバーラップありの場合の短時間フーリエ変換

サンプルデータ生成のスクリプトを実行し、Data Portalの状態をサンプルデータのみにします。次にANALYSISを選択し、ツールバーの信号解析から1チャンネルFFTを起動します。下記のようにインターバルのタブにてデータ長/開始/オーバーラップを選択し、FFTデータ長を2000とします。ここではオーバーラップを50 %として解析を行います。
 

fftsetting3.png


ここでは2000点ずつ50%のオーバーラップで解析を行う為、1つ目の結果には0 - 0.2秒までのデータの解析結果、2つ目の結果には0.1 - 0.3秒までのデータの解析結果、・・・9つ目の結果には0.8 - 1秒までのデータの解析結果の計9個の解析結果が出力されます。これらをグラフ表示すると下記の様になります。
 

fftre4s.png


上記のフーリエ変換の結果では先に設定した時間領域、振動数の信号が観測されている事が確認できます。

目次へ
 

4. 結果データの等高線図表示

これまでの手順で得られた10個の振動スペクトルを等高線図として表示したい場合、下記の手順を行います。

等高線図表示を行うにはx軸データ(周波数の軸),y軸データ(時間軸)及びz軸の強度を与えるデータが必要となります。本資料の手順2の様に時間軸が0-1秒を10000点で描写したデータに対して、1000点ずつ、オーバーラップなしで解析を行った場合、y軸データは0, 0.1, 0.2 ... 0.9の10点となります。10個の振動スペクトルに対するこの新しい時間軸(y軸)データは下記の様なVBScriptで作成する必要があります。

Option Explicit
Dim oMyGrp, oMyChn, i
Set oMyGrp = Data.Root.ChannelGroups(1)
Set oMyChn = oMyGrp.Channels.Add("NewY",DataTypeFloat64)
For i = 1 to 10
oMyChn(i)=(i-1)*0.1
Next


y軸はFrequencyのデータ、z軸は10個のAmplitudePeakのデータを使用します。DIAdem VIEWにおいてパネルを右クリックし、表示形式から等高線を選択します。
 

hyoujikeishiki.png


次に等高線のグラフを右クリックし、設定を選択し、下記の設定内容をカーブリストに追加します。[1]/Frequency等のチャンネルの設定はData Portalからドラッグアンドドロップ操作で行う事ができます。
 

settingforgraph.png


上記の設定を行うと下記の様に手順2で行った解析結果の等高線グラフを表示する事ができます。
 

toukousen.png


目次へ