デジタルフィルタ

デジタルフィルタは電子部品の特性によって動作するアナログフィルタとは対象的に、数学的な関数やコンピュータのアルゴリズムで実現できる信号の処理を行います。デジタルフィルタではプロセッサの処理速度の制限を受けたり、データをサンプリングする際の量子化誤差の影響が発生する場合がありますが、処理速度の向上やサンプリング前の帯域をフィルタで調整する処理などをいれて対応が進み、デジタル化が進んだ現在では映像フィルタや音楽のイコライザ処理などでも広く利用されている技術です。

IoT等で活用するセンサ信号処理のデジタルフィルタでは、計測対象のアナログ信号をサンプリングしてデジタル化し、その離散データを配列に格納して時系列のデータとして扱い、平滑化を行うなどの処理が良く行われています。ここではその例として「移動平均」と「メディアンフィルタ」について解説します。

移動平均

まず、簡単に移動平均の処理例を見ていきます。
下図のような信号がセンサに入力され、サンプリングのタイミングでデジタルデータとして取得したとします。
この中で、一か所にノイズが乗って本来観測したいデータとは異なる値を取得したという設定でフィルタの効果を見てみます。

移動平均の処理ではサンプリングしたデータを配列に格納し、その中で平均を算出して出力とします。下記の例では3項目の移動平均フィルタの処理を示していますので、最初の3回のサンプリングで得られたデータを配列に格納し平均を算出(1)を行います。次のサンプリングデータが取得出来たら、先ほどの配列の最も古いデータを破棄し、新たに得られたサンプリングデータを配列に加えて平均を算出(2)します。同様に、次のサンプリングデータが得られたらもっとも古いデータを破棄し、新たなデータを配列に加えて平均を算出(3)という具合に処理を進めて行きます。

この例では3項目の移動平均ですが、目的に合わせて項目数を増やす場合は配列の要素数を増やして同様の処理を行います。

処理なしの場合と実際に移動平均を算出した場合を比較すると、下図のようになります。
・処理なしの場合と比較してノイズのピークは抑えられて平滑化ができている
・3項目のサンプリングデータが取得できてから出力を開始するので、タイミングが少し後ろにずれる
といった特徴がみられます。

 

メディアンフィルタ

続いて、メディアンフィルタの処理例も見ていきましょう。
入力信号の設定は上記の移動平均の例と同じとします。このデータに対してメディアンフィルタを適用していきます。

メディアンフィルタでは、移動平均と同じように配列を使用してサンプリングデータを格納していきますが、その次の処理が異なります。配列にデータが満たされた状態でソートを行い、データを昇順または降順に並べ替えます。そして、ソートされたデータの中から「中央値」に相当するデータを出力とします。つまり、サンプリングデータで順に5.2 , 4.3 , 6.1のデータが取得できたとします。配列[5.2 , 4.3 , 6.1] を昇順ソートすると[4.3 , 5.2 , 6.1]の並びになります。この中で中央の値「5.2」が出力となります。

この例でも3項目のメディアンフィルタを適用していますが、同じように項目数を増やす事ができます。その時、中央値を取得しやすいように奇数の項目数を使用することが多いです。R-MSMセンサモジュールをA-Mode(1ms高速ADCモード)で使用した際にも6chのADC入力に対してそれぞれ3項目のメディアンフィルタを適用しています。

先の「処理なしと移動平均の比較」に、メディアンフィルタを適用した場合を追加してみましょう。
・先の移動平均の場合と比較しても、ノイズのピークは更に抑えられて効果的な平滑化ができている
・同様に3項目のサンプリングデータが取得できてから出力を開始するので、タイミングが少し後ろにずれるのは同じ
といった特徴がみられます。

 

移動平均とメディアンフィルタの処理例

ここで説明した移動平均とメディアンフィルタはNode-REDでも処理することができます。
下記にNode-REDでの処理フローを示していますので参照してください。

移動平均の処理

メディアンフィルタの処理