PSDデータから時刻歴の無相関ランダム入力を作成する方法

Kosuke_IKEDA
Kosuke_IKEDA
Altair Employee
edited June 2023 in Altair Exchange

Overview

Altair MotionSolveなどの時刻歴の解析にてランダム入力解析を行いたい場合に、PSDデータから時刻歴の無相関ランダム入力を作成するスクリプトです。

image

Pre-Requisite

スクリプト、サンプルファイルのダウンロードはこちらです。

スクリプト

サンプル入力ファイル

Usage/Installation Instructions

PSDデータの準備

入力ファイル:load_profile.csv

CSVファイルで横軸周波数、縦軸PSDで入力を作成してください。両対数グラフで補間されます。

今回は1Hzまではフラット、1Hz以上で振幅が低下する特性としました。

image

 

変換の設定

Altair Composeで添付のスクリプトstc_make_random_input_rev1.0.omlを開きます。 

ファイルブラウザで開いているフォルダがカレントディレクトリとなります。csvファイルがあるフォルダを開いてください。

先に作成した入力ファイルを処理して、入力ファイルの特性を満足する時刻歴の無相関ランダム波形を作成します。

7行目で入力数を指定します。今回は自動車の4輪に無相関の入力を与えると仮定してNC=4とします。相関の無い4つの時刻歴の入力波形が作成されます。振幅は入力ファイルによりPSDで規定されていますので、位相を乱数rand関数を用いて設定し、逆FFTにより時刻歴波形を算出します。乱数を用いていますので、時刻歴波形はスクリプト実行のたびに変化します。4輪への入力は振幅は同じですが、位相が異なる状態となります。

11行目~で作成する時刻歴の時間を指定します。時間刻みはdt=0.005sec(200Hz)、時間は100secとしました。

16行目~で作成した入力に対する確認計算のため、オートパワースペクトル、クロスパワースペクトルを算出するためのサンプリング時間、オーバーラップ比を指定します。

開始をクリックすると、ランダム時刻歴波形を格納したload_profile_his.h3dと、そのランダム波形から算出したオートパワースペクトル、クロスパワースペクトル結果を格納したload_profile_fft.h3dが出力されます。

image

 

作成データの確認(時刻歴)

HyperGraphでload_profile_his.h3dを開くと、時刻歴波形を確認できます。

4種類の振動波形が格納されています。

image

 

作成データの確認(オートパワースペクトル、クロスパワースペクトル、伝達関数)

HyperGraphのcomplex plotでload_profile_fft.h3dを開くと、作成した時刻歴のランダム波形を再度周波数分析した結果を確認できます。

1)FFT

Loadcase 1にFFT処理した結果を格納しています。

0~100secのデータを一度にFFT処理しています。

Displacement : FFT処理した結果

PS Displacement : 複素共役をかけて、パワースペクトルに変換したもの

PSD Displacement : さらに周波数刻みで除算してパワースペクトル密度(PSD)に変換したもの

PSD Displacementを確認すると、PSDを定義したload_profile.csvと一致していることがわかります。時刻歴波形にDC成分は含まれませんので、0Hzの値はゼロです。

image

2)オートパワースペクトル密度、クロスパワースペクトル密度、伝達関数 

Loadcase 2~4にオートパワースペクトル密度、クロスパワースペクトル密度、伝達関数の算出結果を格納しています。

2種類の信号AfとAを考えた場合、オートパワースペクトル密度APSD、クロスパワースペクトル密度CPSD、伝達関数TFはそれぞれ

image

となります。2種類の信号が異なる場合がクロスパワースペクトル密度、同じ場合はオートパワースペクトル密度でクロスパワーをオートパワーで割ったものが伝達関数です。

クロスパワースペクトル密度の処理パラメータはスクリプトの16行目~で設定しています。

切り出し時間を2sec = 周波数刻み0.5Hz

オーバーラップ率50%

ハニングウィンドウ

下記のように各切り出し時間に関してFFT処理を行い、2種類の信号で相関を計算します。その和を取ることで平均化処理が行われ、2種類の信号で相関のある信号のみが残り、相関の無い信号は相殺されて無くなります。

image

(a)     オートパワースペクトル密度

Loadcase 2にオートパワースペクトル密度の結果が格納されています。pwelch関数で求めています。

こちらの結果もload_profile.csvと一致していることがわかります。

image

(b)     クロスパワースペクトル密度

Loadcase 3にクロスパワースペクトル密度の結果が格納されています。cpsd関数で求めています。

クロスパワーは2つの信号の組み合わせですので、4 x 4の結果が格納されています。

下記に波形1を基準とした場合の波形1~4のクロスパワースペクトル密度を示します。

波形1の結果はオートパワースペクトル密度の結果と一致します。残りの波形2~4の結果は波形1にくらべ小さな値となります。これは、波形2~4は波形1と相関性が小さいことを表しています。無相関を仮定してランダムで位相を設定しましたので、妥当な結果と言えます。

波形2~4を基準とした場合も同様です。

image

(c)     伝達関数

Loadcase 4に伝達関数の結果が格納されています。クロスパワースペクトル密度をオートパワースペクトル密度で除算したものです。

伝達関数も2つの信号の組み合わせですので、4 x 4の結果が格納されています。

下記に波形1を基準とした場合の波形1~4の伝達関数を示します。

波形1の結果は自分自身の伝達関数ですので結果は1です。残りの波形2~4の結果は1に比べ小さな値となります。これは、波形2~4は波形1と相関性が小さいことを表しています。無相関を仮定してランダムで位相を設定しましたので、妥当な結果と言えます。理想的な無相関では0となります。

波形2~4を基準とした場合も同様です。

image

Post-Requisite

この無相関ランダム入力を用いて、MotionSolveの時刻歴解析を行い、計算結果を周波数分析したサンプルは下記で公開しております。あわせてご利用ください。

https://community.altair.com/community/?id=kb_article_view&sysparm_article=KB0121838

 

使用製品:Altair ComposeAltair MotionSolve/MotionView

よくあるエンジニアからの質問はこちら

Comments

  • Community Guest
    Community Guest New Altair Community Member
    edited November 2023

    この記事を参考に同じようにやってみましたが、

    line 32のdata=csvread(filename_in,1,0);

    のところで「Unknown function」が出てきてしまい波形を作成できません。

    composeのバージョンによってはcsvreadが使えないのでしょうか?

    composeのバージョンは2019.4を使用しております。