センサ値のフィルタリング入門

センサ値のフィルタリングは、ノイズ種別と要求遅延を踏まえた選定で結果が大きく変わる領域です。ホワイトノイズには移動平均、スパイク(単発の外れ値)にはメディアンフィルタ、両者の複合には縦続接続(カスケード)を活用するのが代表的です。さらに整数演算で実装すれば、FPUを持たないマイコンを用いる場合でもリアルタイム制御に必要な実装をおこないやすくなります。この記事ではノイズの分類、移動平均(FIR)と指数平滑(EMA)、メディアンの効率実装、外れ値除去と複合化という4テーマで、選定と実装の勘所を整理します。

センサノイズの種類とフィルタ選定の考え方

センサ値に重畳するノイズは性質によって対策が異なり、誤ったフィルタを選ぶと信号成分まで削ってしまいます。この記事では、FIR(Finite Impulse Response:有限インパルス応答)系とIIR(Infinite Impulse Response:無限インパルス応答)系の両方を扱います。まずノイズの種類を見極めた上で、許容できる遅延と計算リソースにあわせてフィルタを選ぶ考え方を整理します。

ホワイトノイズ・スパイクノイズ・ドリフトの区別

ホワイトノイズは周波数全域に一様に分布するランダム雑音で、センサ内部の熱雑音やショット雑音が主な発生源となります。線形フィルタ(移動平均など)を用いて抑制できます。スパイクノイズは接触不良、誘導性負荷のスイッチングサージ(バックEMF)、ESD(静電気放電)、電磁干渉(EMI)による単発の異常値です。本記事ではこれを「スパイク(単発の外れ値)」と呼びます。線形フィルタでは効きが悪く、メディアンなどの非線形フィルタが適します。ドリフトは温度変化や経年劣化による緩やかな基準値ずれで、高域通過フィルタや差分処理、定期キャリブレーションが対策となります。ただし、測りたい信号がDCや低周波にある場合、高域通過フィルタや差分処理は必要な信号成分まで落とすため適しません。この場合は定期キャリブレーションで対処します。

フィルタ選定の3軸(帯域・遅延・計算コスト)

フィルタは「どこまでの周波数を通すか」「何サンプル分の遅延を許容するか」「マイコンのCPUとメモリでおこなえる計算量」で選びます。たとえば、サンプリングが1 kHz、残したい信号が10 Hz以下の緩やかな変化、抑えたいノイズが50 Hzの電源リプル、という条件を考えます。この場合、低域通過IIRと単純移動平均(SMA)の縦続接続は一つの選択肢です。FIR系の移動平均はインパルス応答が有限で安定性が高い反面、ウィンドウ長が遅延に直結します。IIR系の指数移動平均(EMA)は少ない係数で長い実効ウィンドウを持てる代わり、過去の出力に影響されやすいため誤差が長く残る可能性があります。

移動平均フィルタの実装と特性

移動平均フィルタの実装と特性の図。移動平均は直近N点の平均でノイズを含む信号を平滑化する。効率的な実装(SMA)では循環バッファで合計を更新し計算量をO(1)に抑える。他の移動平均としてWMA(重み付き移動平均)とEMA(指数移動平均)を挙げる。ウィンドウ長のトレードオフは、ノイズ低減が√N倍、遅延が(N−1)/2サンプル。選定のポイントは、目標応答時間からウィンドウ長の上限を決めること、雑音が多い場合はEMAやIIRと組み合わせること、SN比を6dB改善するにはウィンドウ長を約4倍にすること、ISR実行時間が周期より十分小さいことの確認である。

移動平均はFIRフィルタの代表で、組み込みシステムで最もよく使われる平滑化手法の一つです。独立で無相関なホワイトノイズを仮定すると、S/N比(信号成分と雑音成分の比率)はウィンドウ長Nの平方根に比例します。同一ウィンドウ長(タップ数)のFIRフィルタの中では、同じステップ応答の立ち上がり時間に対して最もノイズを低減できるため、時間領域信号の平滑化に向きます。

単純移動平均(SMA)と循環バッファによる実装

SMA(Simple Moving Average)は直近N点の算術平均で、循環バッファに新しい値を格納して合計を更新し、Nで除算するだけで実装できます。新しい値を格納するたびに合計を再計算せず、入った値を加えて出た値を引く差分更新方式にすれば、計算量はO(1)に圧縮されます。

N=4、N=8など2のべき乗を選ぶと、除算をシフト演算に置き換えられます。たとえばN=8なら右3 bitシフト1回で除算が完結します。ハードウェア除算器を搭載しておらず除算に時間を要しがちな低コストマイコンでも高速に動作します。

重み付き移動平均(WMA)と指数移動平均(EMA)

WMA(Weighted Moving Average)は、サンプルごとに重みづけを変える方法です。新しいサンプルに大きな重みを与えることで、変化に素早く追従する「応答性」を確保します。EMA(Exponential Moving Average)は y[n] = α·x[n] + (1-α)·y[n-1] の1次IIRで、係数αだけで実効ウィンドウ長が決まります。EMAは状態変数が一つで済むため、循環バッファは必要なく、メモリ使用量も抑えられます。目安として、等価期間Nに対して α ≈ 2/(N+1) とする流儀もあります(定義は用途により異なります)。一方で、過去のサンプルによる影響が長く残る点には注意を要します。

ウィンドウ長と雑音抑圧・遅延のトレードオフ

独立で無相関なホワイトノイズを仮定すると、SMAでは雑音の標準偏差が約1/√Nに低減し、S/N比は√N倍に向上します。サンプル数が増えるほどノイズを抑えやすくなります。一方で、線形位相FIRとしての群遅延は(N-1)/2サンプルです(Nが偶数の場合は0.5サンプルの分数遅延となり、因果フィルタでは切り上げ/切り捨てのいずれを採るかが実装により異なります)。たとえば1 msサンプリングでN=16ならば、約7.5 msの群遅延となります。ステップ応答では、立ち上がりがウィンドウ長にわたってなまり、ランプ状に変化します。制御ループに組み込む場合は、目標応答時間からウィンドウ長の上限を逆算します。雑音の抑制が不足する場合は、別のフィルタ手段(EMA、低域通過IIR)と縦続接続します。

実務では、S/N比を6 dB改善するのに必要なウィンドウ長がおおむね4倍に増える点も選定時の目安となります。ISR実行時間の見積もりも忘れず、ワースト実行時間がサンプリング周期に対して十分小さくなるよう設計します。

メディアンフィルタによるスパイク除去

メディアンフィルタは非線形フィルタで、短時間に発生する外れ値(スパイク)を効果的に取り除けます。画像処理での実績が知られていますが、組み込みのセンサ値処理でも有効です。

メディアンフィルタの動作原理と非線形性

ウィンドウ内のサンプルをソートし、中央値を出力する処理です。ウィンドウ長は奇数(3、5、7など)を選ぶと中央値が一意に決まります。スパイクが1点だけならば中央値計算で完全に除去でき、信号の急峻な立ち上がりはほぼ保たれます。一方で、ウィンドウ長を超える連続スパイクや低周波雑音には適さない方法です。

ソート不要の効率実装(部分挿入・ヒストグラム法)

サンプルの値を取得するたびに汎用ソートをおこなうと、O(N log N)となり負荷が大きくなります。組み込みでは、ウィンドウから出る古いサンプルを削除し新しいサンプルを挿入位置に入れる部分挿入法により、O(N)に抑える実装がよく使われます。固定範囲の整数値ならば、ヒストグラム更新法も使えます。ヒストグラムの更新自体は1サンプルあたりO(1)で済みますが、中央値の探索は累積和をたどるため素朴な実装では最悪O(R)(Rは値域サイズ)となります。

外れ値除去と複合フィルタリング

単一のフィルタで抑えきれないノイズには、複数の手法を縦続接続することが実務的な選択です。統計的外れ値検出をおこなったのち、SMAなどの移動平均フィルタを通す構成が産業計測でよく用いられます。

Hampelフィルタによる統計的外れ値検出

Hampelフィルタは、移動窓内の中央値mと中央絶対偏差(MAD:Median Absolute Deviation)を用います。まず MAD = median(|x_i − m|) を求め、標準偏差の推定値を σ^ = 1.4826 × MAD とします。そのうえで、注目サンプルxが |x − m| > n × σ^ を満たす場合に外れ値と判定し、中央値で置き換えます。ここで σ^ は、正規分布を仮定したときの標準偏差の一致推定量です(係数1.4826は正規分布の四分位点から導かれます)。なお一般的な実装では、窓の片側サンプル数を表す近傍数kと、判定のしきい値係数nσは別のパラメータであり、混同しないよう注意します。nσ=3(3σ相当)を採用する形式が、一般的な科学技術計算ソフトウェアの関数などで標準となっています。しきい値係数nσを大きくすれば許容範囲が広がり、小さくすれば検出が厳しくなります。外れ値と判定されたサンプルのみを中央値で置き換え、それ以外のサンプルは元の値を保持するため、通常のメディアンフィルタよりも信号成分を残しやすい特性があります。

メディアンと移動平均の縦続接続

スパイクがときどき混じるホワイトノイズ環境では、3点メディアンでスパイクを落とした後、SMAで残ったホワイトノイズ成分を抑える縦続接続が有効です。順序を入れ替えてSMAを先に置くと、スパイクが平均化で複数サンプルに拡散し、その後段のメディアンでも除去しづらくなるため逆効果になる点に注意します。

整数演算による組み込み最適化

浮動小数点ユニット(FPU)を持たないマイコンでは、固定小数点や整数演算でフィルタを書き直します。EMAなら α を 1/2^k と選び、加算とシフトだけで構成できます。SMAの除算も、N を 2 のk乗にすればシフトに置換できます。係数の量子化誤差が出力に蓄積しないよう、累積精度を入力より1〜2 bit拡張するのが安全です。

センサノイズの種別を見極めて移動平均、メディアンフィルタ、外れ値除去を使い分け、状況により縦続接続や組み込み最適化を活用する。この流れを押さえれば、計測精度と応答性を両立したセンサ前処理を実装しやすくなります。

組み込みソフトの世界 トップへ戻る