しばらくご無沙汰していたら今度は連投になってしまいました。

前回FlexPro のイベント検出の意味でのフィルタ機能をご紹介しましたが、今回は FFT フィルタの機能をご紹介したいと思います。

時間領域のデジタルフィルタについて、ごく一般的な IIR フィルタ (ローパス、ハイパス、バンドパス、バンドストップ) は FlexPro Standard および Professional に標準装備していますし、デジタルフィルタモジュールというオプションモジュールを追加すると FIR フィルタや CFC フィルタも使用できるようになります。が、周波数領域のフィルタは装備されていません。時々お問い合わせをいただくことがありますが、「残念ながら」な回答をしなければなりません。毎回それも心苦しいので、今回その方法をご紹介したいと思います。

前回の投稿から時間がなく、肝心のフィルタ部分については適当というかかなり手抜きな内容になってしまいました。すみません。FlexPro で FFT フィルタを実行するためのヒント程度にご覧ください。

FFT を使った周波数領域のフィルタの特徴は時間領域のデジタルフィルタに比べ極端に急峻なカットオフができる点です。この利点を活用するために FFT フィルタを使用したいのでしょう。測定したデータの解析したいシグナルにノイズと同じ成分がまったく含まれていないと想定できるのであれば、時間領域のデジタルフィルタよりも FFT フィルタを使用した方が良いのかもしれません。

FlexPro で FFT フィルタを行うのは実はそれほど難しいことではありません。データに対し FFT を実行し、その結果にフィルタをかけ、逆 FFT して波形データに戻すだけです。ただ、注意しなければならない点があります。

まず、FFT を実行する際に結果を「複素数」で返させること。これを忘れるとあとで逆 FFT しても波形データに戻すことができなくなります。

では、実際にやってみましょう。

今回はわかりやすいように 10 Hz と 100 Hz の二つの周波数成分を持つデータを作成して行いました。

FlexPro の「新規」メニューから「シグナル」を選択します。シグナルのプロパティダイアログボックスが現れますので「オプション」タブで「周波数」を 10 に設定します。「サンプリング」タブで「最終値」を 1 に設定します。

もう一度上記の作業を繰り返します。ただし、今回は「周波数」を 100 に設定します。

FlexPro のオブジェクトリストに「シグナル」と「シグナル2」という名前のオブジェクトがリストされています。この二つを選択した状態で「新規」メニューから「公式」を選択します。

「公式」ウィンドウに下記の式が表示されます。

'シグナル' : 'シグナル2'

この式の : (コロン) を + (プラス) に変更します。

'シグナル' + 'シグナル2'

これで 10 Hz と 100 Hz の二つの周波数成分を持つデータが出来上がりました。オブジェクトリストに「公式」という名前のオブジェクトがリストされていますので、このオブジェクトの名前をたとえば「TestSignal」とかに変更します (名前の変更はしなければならないものではありません。おまじないのようなものです)。

TestSignal.jpg

オブジェクトリストで TestSignal オブジェクトを選択した状態で「新規」メニューから「スペクトル解析」、「フーリエスペクトル」の順に選択します。

フーリエスペクトル解析のプロパティダイアログボックスが現れますので「オプション」タブで「スペクトルタイプ」に「複素数」を選択します。「ウィンドウ」の「タイプ」は矩形を選択します。

FFT.jpg

こんな感じです。

OK ボタンをクリックしてプロパティダイアログボックスを閉じます。

オブジェクトリストで「TestSignalスペクトル」オブジェクトを右クリックし、「データセットに変換」を選択し、ダイアグラムを作成します。フーリエスペクトル解析オブジェクトをとっておきたい場合は「TestSignalスペクトル」をコピーして「TestSignalスペクトル2」を作成し、それを「データセットに変換」します。

FFT_result.jpg

当然なんですが、10 Hz と 100 Hz の二つの周波数成分がきれいに検出されています。

今回は 100 Hz あたりの部分を除去してみたいと思います。

本来であればフィルタの係数を算出して乗算して、といった処理を行うのですが、今回は手抜きをして除去する部分の値を直接書き換えてしまいます。

グラフ (ダイアグラム) 上で 100 Hz のピークの前後にカーソルを移動します。

FFT_cursor.jpg

「カーソル」メニューから「値を変更」を選択し「カーソル間の範囲に新しい値を設定」アイコンをクリックします。

「値の変更」ダイアログボックスが現れます。「新しい値」プレースボックスに数値が表示されています。デフォルトで表示されるのは変更する範囲の最後の値を採ってきているようです。ここに 0,0 を入力し、OK ボタンでダイアログボックスを閉じます。

FFT_result2.jpg

100 Hz の成分がきれいになくなりました。

逆 FFT を実行して波形データに戻します。「新規」メニューから「公式」を選択します。現れた公式ウィンドウに下記の式を入力します。

IRFFTn('TestSignalスペクトル2')

逆フーリエ変換の関数として IFFTn と IRFFTn があります。IFFTn は複素数の結果を返し、IRFFTn は実数の結果を返します。

上の「公式」をグラフ (ダイアグラム) 化すると下のように表示され、フィルタリングがほぼうまくいったことが確認できます。

IFFT.jpg

位相の問題か、よく見ると最初と最後に少しずれが見えますが、気づかなかったことにしよう。

今回手抜きしてしまったフィルタの部分は後日別のエントリとして書く、ということにして今回はこの辺で。このエントリをご覧くださった、心優しき方が補完してくださるかも、などといった期待を持ちつつ。

年齢的なものもあるのかもしれませんが、一か月ほども完治しないしつこい風邪にやられています。皆様、こんなしつこい風邪を召されぬようお気を付けください。

 

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/450
内容に対しての関連性がみられないものは削除する場合があります

コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報