CSVファイルの時刻歴データをFFT処理
複数の計測点で得られた時刻歴波形を周波数分析するサンプルスクリプトstc_FFT_CSV.omlを紹介します。
入力ファイルとして1列目に時刻、2列目以降に計測データが記録されているとします(ocsillation.csv)。
スクリプトstc_FFT_CSV.omlの7行目のfilenameで入力ファイル名を指定します。データの列数は自動で取得します。
入力波形は過渡状態を経て、定常状態へと遷移します。ここでは、定常となった0.5sec以降のデータに対し、FFT処理を行うことを考えます。
スクリプトstc_FFT_CSV.omlの18、19行目のstおよびedでFFT処理の開始時刻および終了時刻を指定します。ここでは、0.5sec~1.0secの波形をFFT処理します。一般的にFFT処理はデータ数が2^nとする必要があります。Composeでは、データ数が2^nで無い場合は高速フーリエ変換FFTではなく通常の離散フーリエ変換DFTを行います。FFTのほうが高速ですが、最近のPCのスペックでは、DFTでも問題なく処理できますので、本スクリプトは特に2^nの指定は行っていません。
FFT処理は周期関数を仮定しますので、データの始めと終わりが不連続な場合は、漏れ誤差が生じます。漏れ誤差を低減するためにはハニングウィンドウ等のウィンドウ処理を行います。本スクリプトでは31行目でハニングウィンドウを掛けています。他の窓関数を用いたい場合は、この行を修正します。
あとは、時刻歴を元に周波数軸を作成し、ウィンドウ処理した波形をFFT処理します。本処理では絶対値を出力しています。
最後に処理したデータをテキストファイルに書き出します。
AcuSolve計算結果の音圧時刻歴データをFFT処理
Altairの熱流体解析ソルバーAcuSolveで圧力変化の時刻歴を計算することが可能です。ここでは、その時刻歴から周波数毎の音圧レベルを求めるサンプルスクリプトstc_FFT_AS.omlを紹介します。
AcuSolveの圧力変化の時刻歴結果は、計測点ごとに異なるファイルで出力されます。ここでは、計測点3点とし、ファイル名はenchu_tran_set1_node1.oth~ enchu_tran_set1_node3.othとします。各ファイルには1列目ステップ数、2列目時刻、3列目圧力とします。
スクリプトstc_FFT_AS.omlの9行目のfilenameで入力ファイル名を指定します。入力ファイル名は数字の直前までenchu_tran_set1_nodeとします。10行目で入力ファイルの数NNを指定します。
先と同様、定常状態のデータの切り出し、ウィンドウ処理、FFT処理を行った後、音圧計算のため、43行目にて基準圧力p0=2E-5で除算の後、20logのデシベルに変換します。
まとめ
今回はCSVやその他ASCIIファイルを読み込み、FFT処理を行うスクリプトを紹介しました。本サンプルスクリプトおよびサンプル入出力ファイルは以下のボタンからダウンロード可能です。是非、大量のデータをFFT処理・周波数分析したい場合は、Composeおよび本サンプルスクリプトを利用してみてください。
NEW
サンプル事例一覧に戻る