はじめに
Savitzky-Golayフィルター(サビツキー-ゴレイフィルター)は、ノイズを含むデータを平滑化しながら、元のデータの重要な特徴(ピークや谷など)を保存するために使用される多項式フィルターです。本記事は、SciPyライブラリのsavgol_filter関数を用いたノイズデータの平滑化について解説しています。
コード&解説
モジュールのインポート
バージョン
データの作成
指数関数的減衰にノイズを加えたデータを作成します。
フィルタ適用範囲 (window_length)
window_lengthパラメータでフィルタを適用する範囲を設定します。このパラメータは奇数の整数である必要があります。 実験では、window_lengthを5、15、25と変えてフィルターをかけたデータを作成しました。
結果を表示すると、以下のような特性が見られます。window_lengthの値が大きくなるほど、データがより滑らかになります。

近似式の次数 (polyorder)
多項式近似のための次数をpolyorderパラメータで指定します。この実験では、window_lengthを25に固定し、polyorderを1、2、4に変えてみました。これはそれぞれ1次、2次、4次の多項式で近似することを意味します。
表示された結果は以下のようになりました。
1次式近似ではフィルタデータが直線的になり、4次近似ではデータの変動に忠実に追従する結果となりました。

境界近傍データの計算について (mode)
modeパラメータは、データの境界におけるフィルタの処理方法を設定します。 modeには’mirror’、’constant’、’nearest’、’wrap’、または’interp’(デフォルト)のいずれかを指定できます。
‘mirror’は境界の値を逆順に繰り返して計算を行います。 ‘constant’は指定した定数を適用します(定数の値はcvalパラメータで設定)。 ‘nearest’は境界の値をそのまま繰り返して計算します。 ‘wrap’は配列の反対側の端の値を使用して計算します。これは、同じ配列を直列に連結して計算することに相当します。
それぞれのmodeを適用した結果は以下のようになります。

コメント