Compose-4040:デジタルフィルター処理でのComposeの数学関数

Tutorial Level: Intermediate

ComposeOML言語には、デジタルフィルター処理を実行する関数が用意されています。

このチュートリアルでは、butterbutterordfilter、およびfiltfiltの各コマンドの使用方法を紹介します。

デジタルフィルター処理で使用するテスト信号の作成

  1. Composeを開始します。
  2. ファイルメニューで、開くを選択して、<installation_dir>/tutorials/DigitalFilter.omlファイルを探します。

    このファイルには、2つの周波数成分を持ち、それより高い周波数の雑音が混入した信号からサンプリングしたデータを作成するコードが格納されています。

    このプロットは次のようになります。

雑音を除去するバターワースフィルターの設計

バターワースフィルターは、パワーが半分に減衰するカットオフ周波数で定義します。この減衰は減衰率で表現すると約3dBです。

雑音から信号を分離するために、カットオフ周波数として100Hzを指定し、200Hzでの減衰率を20dB以上とします。したがって、ローパスフィルターの設計になります。buttord関数で、必要な性能を実現できるフィルターの最低次数を計算します。フィルターの次数は整数なので、値を丸めることによって、要件に一致するか、それを上回る周波数の範囲が得られることが普通です。

buttord関数では2番目のカットオフ周波数も計算されるので、入力と出力のカットオフ周波数は、許容できる選択肢の範囲に分布します。

このチュートリアルでは、この範囲での最低周波数である100Hzを選択します。このフィルターとその出力を設計するコードを次に示します。入力周波数と出力周波数は、ナイキスト周波数(サンプリング周波数の1/2)で正規化しています。

信号のフィルター処理と結果のプロット

butterの[a,b]出力は、このフィルターの分子多項式と分母多項式です。フィルターとプロットのコード、およびそのプロット結果は次のとおりです。

holdコマンドを使用することで、2番目のグラフを同じプロット上に配置できます。

信号から雑音が除去されていますが、信号とそのフィルター出力の間には遅延が発生しています。実際の遅延時間は信号の周波数成分ごとにわずかに異なるので、位相ひずみが発生する原因となります。多くの用途で、その程度は許容できる範囲にあります。そうでない場合はfiltfilt関数を使用します。

filtfiltで使用するバターワースフィルターの設計

filtfilt関数は、信号を順方向と逆方向の2回フィルター処理することから、その名前が与えられています。2回目の処理パスは、1回目の処理パスを反転する必要があるので、両方のパスの間に時間差が発生します。filtfiltの短所は、リアルタイムで実装できない点にあります。

ステップ2で取り上げたフィルターでfiltfiltを使用すると、フィルターで処理パスが2回実行されるので、減衰が2倍になります。したがって、入力の減衰がステップ2の場合の1/2になるように設計手順を修正する必要があります。このフィルターとその出力を設計するコードを次に示します。

2回の処理パスがあることで、フィルターの次数を低くできることが望めます。

filtfiltによる信号のフィルター処理と結果のプロット

フィルターとプロットのコード、およびそのプロット結果は次のとおりです。

figureコマンドで2番目のプロットを作成します。

filtfiltの出力はfilterの出力にきわめて似ていますが、想定どおりに遅延がなくなっています。