CAEデータ処理サンプル事例:フィルター処理・ローパスフィルタ・ノイズ除去

CAEデータ処理サンプル事例:フィルター処理・ローパスフィルタ・ノイズ除去

Altair Composeデータ処理サンプル集 > 3 フィルター処理・ローパスフィルタ・ノイズ除去

 

<Composeのデータ処理サンプル集>
CAEの大量の計算結果の処理に苦労していませんか?大量のデータをフィルター処理・ノイズ除去したい場合はAltair Composeを利用しましょう。
Altair ComposeはMatlab互換のスクリプト処理言語で、HyperMesh等のAltair製品を既にご利用の場合は追加契約は不要。
*本スクリプトは2017.3で作成しております

Altair Compose 製品概要

周波数成分の確認

複数の計測点で得られた時刻歴波形をローパスフィルタ処理によりノイズ除去するサンプルスクリプトstc_filter.omlを紹介します。

 

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

入力ファイル(sin_noise.csv)
入力ファイル(sin_noise.csv)
入力ファイル(sin_noise.csv)のグラフ
入力ファイル(sin_noise.csv)のグラフ

フィルタ処理の前に、別事例で紹介したFFT処理のスクリプトを用いて、周波数成分を確認してみましょう。sTC_FFT_CSV.omlを用いて、sin_noise.csvを処理すると、sin_noise.csv_fft.outが得られます。低周波成分がそれぞれ、1、2、3Hzで、高周波の振動成分が100Hzであることがわかります。100Hzの振動成分をノイズと仮定して、それを除去することを考えます。

周波数成分(sin_noise.csv_fft.out)のグラフ
周波数成分(sin_noise.csv_fft.out)のグラフ

バターワースフィルタによるノイズ除去

今回紹介するstc_filter.omlでは、バターワースフィルタを用いて、ノイズを除去するスクリプトです。

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

入力ファイル名の指定(stc_filter.oml)
入力ファイル名の指定(stc_filter.oml)

次に、stc_filter.omlの9-11行目の入力ファイルの時間刻みdt、カットオフ周波数cutoff_f、フィルタ次数orderを指定します。時間刻みをdt=0とした場合は、20-22行目にて、入力ファイルから初期の時間刻みを自動で取得します。フィルタ処理は、等間隔の時間刻みのデータが基本となります。1/(2*dt)が最大周波数となりますので、カットオフ周波数はそれ以下の値となるよう設定する必要があります。

時間刻み、カットオフ周波数、フィルタ次数の指定(stc_filter.oml)
時間刻み、カットオフ周波数、フィルタ次数の指定(stc_filter.oml)

カットオフ周波数は振幅の倍率が1/√2=0.707となる周波数です。それ以上の周波数帯にて、振動成分が大きく減衰されます。フィルタの次数により、減衰の倍率が変わります。今回は100Hzの振動成分をカットしたいので、カットオフ周波数は50Hzとし、次数は4としました。

バターワースフィルタの周波数特性
バターワースフィルタの周波数特性

フィルタ処理は、24-25行目のフィルタ係数の算出とフィルタ処理で実行できます。バターワース以外のフィルタを使用したい場合は、関数butterを変更します(ベッセルフィルタ:besself、besself3、チェビシェフフィルタ:cheby1、cheby2、楕円フィルタ:ellipなど)。フィルタ処理はfiltfilt関数を用います。filter関数では前から後ろに向かってフィルタ処理を行うので、時間遅れが生じます。filtfilt関数は前から後ろに向かってフィルタ処理を行った後、再度、後ろから前に向かってフィルタ処理を行いますので、時間遅れが生じません。

バターワースフィルタの周波数特性

フィルタ処理した結果を示します。1~3Hzのサイン波のみが表示され、高周波の100Hzの振動成分が取り除かれていることがわかります。

フィルタ処理後の波形
フィルタ処理後の波形

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

出力ファイル(sin_noise.csv_filter.out)
出力ファイル(sin_noise.csv_filter.out)

まとめ

今回はCSVファイルを読み込み、ローパスフィルタ処理によりノイズ除去を行うスクリプトを紹介しました。本サンプルスクリプトおよびサンプル入出力ファイルは下の[サンプルデータのダウンロード]ボタンよりダウンロード可能です。是非、大量のデータをフィルター処理・ノイズ除去したい場合は、Altair Composeおよび本サンプルスクリプトを利用してみてください。



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

サンプル事例一覧に戻る

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

問い合わせフォーム