CAEデータ処理サンプル事例:リサンプリング

CAEデータ処理サンプル事例:リサンプリング

Altair Composeデータ処理サンプル集 > 4 リサンプリング

 

<Composeのデータ処理サンプル集>
CAEの大量の計算結果の処理に苦労していませんか?複数のデータの時間刻みを揃えたい、データ点数が多いので間引きたいようなときは、Altair Composeを利用しましょう。
Altair ComposeはMatlab互換のスクリプト処理言語で、HyperMesh等のAltair製品を既にご利用の場合は追加契約は不要。
*本スクリプトは2017.3で作成しております

Altair Compose 製品概要

リサンプリングのみ

複数の計測点で得られた時刻歴波形のデータの時間刻みを線形補間により変更するサンプルスクリプトstc_resampling.omlを紹介します。

 

入力ファイルとして1列目に時刻、2列目以降に計測データが記録されているとします(sin_noise.csv)。低周波の1~3Hzサイン波に96Hzの振動成分が乗っている波形を考えます。

Compose-入力ファイル(sin_noise.csv)
入力ファイル(sin_noise.csv)
Compose-入力ファイル(sin_noise.csv)のグラフ
入力ファイル(sin_noise.csv)のグラフ
Compose-入力ファイルの周波数成分
入力ファイルの周波数成分

元のファイルは時間刻みdt=0.001sec、サンプリング周波数1/dt=1000Hzです。時間刻みをdt=1/100、サンプリング周波数100Hzに変更してみましょう。

スクリプトstc_resampling.omlの7行目のfilenameで入力ファイル名を指定します。データの列数は自動で取得します。

Compose-入力ファイル名の指定(stc_resampling.oml)
入力ファイル名の指定(stc_resampling.oml)

次に、stc_ resampling.omlの9行目で新しい時間刻みdt_rを指定します。今回はdt_r=1/100とします。

Compose-新しい時間刻みの指定(stc_resampling.oml)
新しい時間刻みの指定(stc_resampling.oml)

22行目のinterp1関数で線形補間を行い、新しい時間刻みでの値を取得します。スプライン補間を用いた場合はオプションの’linear’を’spline’に変更します。

Compose-線形補間
線形補間

新しい時間刻みでのグラフが得られます。

Compose-時間刻み1/100での波形
時間刻み1/100での波形

最後に処理したデータをテキストファイルに書き出します。

Compose-出力ファイル(sin_noise.csv_resamp.out)
出力ファイル(sin_noise.csv_resamp.out)

リサンプリング後の周波成分の確認

別事例で紹介したFFT処理のスクリプトを用いて、リサンプリング後の波形の周波数成分を確認します。sTC_FFT_txt.omlを用いて、sin_noise.csv_resamp.outを処理すると、sin_noise.csv_resamp.out_fft.outが得られます。元々、低周波の1~3Hzサイン波に96Hzの振動成分が乗っている波形だったものが、リサンプリングにより1~4Hzの波形に変化していることがわかります。こうなってしまうと、元々の低周波1~3Hzのサイン波を抽出することはできません。このように、リサンプリングのより波形の形が変わってしまうことを、折り返し誤差、エイリアシングと呼ばれます。

Compose-周波数成分(sin_noise.csv_resamp.out_fft.out)のグラフ
周波数成分(sin_noise.csv_resamp.out_fft.out)のグラフ

ローパスフィルタ+リサンプリング

サンプリング周波数の1/2をナイキスト周波数と呼び、そのサンプリングで表せる最大周波数となります。したがって、元のサンプリング周波数は1000Hzなので、500Hzまでの周波数の波形を表現でき、リサンプリング後のサンプリング周波数は100Hzなので、50Hzまでの周波数の波形を表現できます。

今回エイリアシングが生じ、波形の形が変わってしまったのは、元々の波形にリサンプリング後のナイキスト周波数50Hzより大きな周波数の波形(96Hz)が含まれていたためです。正しい波形を得るには、50Hz以上の波形はそもそも表現できないので、リサンプリング前に取り除く必要があります。

Compose-元の波形の周波数とリサンプリング後のナイキスト周波数
元の波形の周波数とリサンプリング後のナイキスト周波数

別事例で紹介したフィルタ処理のスクリプトを用いて、先に96Hzの振動成分を除去した後に、100HzでリサンプリングするスクリプトsTC_resampling_filter.omlを紹介します。

スクリプトstc_resampling.omlの7行目のfilenameで入力ファイル名を指定します。データの列数は自動で取得します。

次に、stc_ resampling.omlの9行目で新しい時間刻みdt_rを指定します。今回はdt_r=1/100とします。

Compose-ファイル名、新しい時間刻みの指定(stc_resampling_filter.oml)
ファイル名、新しい時間刻みの指定(stc_resampling_filter.oml)

リサンプリングの周波数に合わせて、カットオフ周波数を設定します。1/(dt_r*2)=50Hz以下にする必要があります。フィルタ特性により50Hz以上が完全に除去できるわけではないので、通常、50Hzより小さい値を指定します。本スクリプトでは0.5倍の25Hzとなるよう指定しています。

Compose-カットオフ周波数の指定(stc_resampling_filter.oml)
カットオフ周波数の指定(stc_resampling_filter.oml)

その後、フィルタ処理およびリサンプリング処理が行われ、新しい時間刻みでのグラフが得られます。低周波1~3Hzの波形の形を変えずに、リサンプリングできていることがわかります。

Compose-時間刻み1/100での波形
時間刻み1/100での波形

まとめ

今回はCSVファイルを読み込み、リサンプリングを行うスクリプトを紹介しました。また、元の波形にリサンプリングの周波数では表現できない高周波の波形が含まれる場合は、エイリアシングを回避するため、ローパスフィルタ処理ののち、リサンプリングを行うスクリプトを紹介しました。本サンプルスクリプトおよびサンプル入出力ファイルは下の[サンプルデータのダウンロード]ボタンよりダウンロード可能です。是非、大量のデータをリサンプリングしたい場合は、Composeおよび本サンプルスクリプトを利用してみてください。

    サンプルデータのダウンロード

サンプル事例一覧に戻る

これ以外にも、さまざまなスクリプトや、スクリプトを応用した便利な使い方があります。より詳細な情報をご希望の方は、お問い合わせください。

問い合わせフォーム