デジタルフィルタ
デジタルフィルタは、サンプリングされた時系列信号(例: $x_0, x_1, \dots, x_N$)に対して処理を施すものです。アナログフィルタとは異なり、デジタル信号処理によって実現されます。代表的なデジタルフィルタに線形フィルタがあります。
線形フィルタ
線形フィルタは、入力信号の線形結合として出力信号を生成します。
FIR (Finite Impulse Response) フィルタ
FIRフィルタは、現在の入力と過去の有限個の入力サンプルのみを用いて出力を計算します。インパルス応答が有限の長さで終わるため、常に安定です。
$$ y_k = w_0 x_k + w_1 x_{k-1} + \dots + w_N x_{k-N} $$
ここで $w_i$ はフィルタ係数です。
IIR (Infinite Impulse Response) フィルタ
IIRフィルタは、現在の入力と過去の有限個の入力サンプルに加え、過去の有限個の出力サンプルも用いて出力を計算します。インパルス応答が無限に続く可能性があるため、設計によっては不安定になることがあります。
$$ y_k = w_0 x_k + w_1 x_{k-1} + \dots + w_N x_{k-N} - v_1 y_{k-1} - \dots - v_M y_{k-M} $$
ここで $w_i, v_i$ はフィルタ係数です。
適応フィルタ
適応フィルタは、入力信号の統計的性質が時間とともに変化する場合や、ノイズの特性が未知である場合など、環境の変化に合わせてフィルタ係数を自動的に調整(学習)するデジタルフィルタです。FIRフィルタとIIRフィルタのどちらの構造に対しても、同様の考え方でフィルタ係数を設計できます。
適応フィルタの入出力と誤差
- 入力: $x_k = x(kT)$ ($k=0, 1, 2, \dots$)
- 出力: $y_k = w_0 x_k + w_1 x_{k-1} + \dots + w_{N-1} x_{k-N+1}$ (ここではFIRフィルタの例を示していますが、IIRフィルタでも同様に考えられます)
- 目標値: $d_k$ (理想的な出力信号)
- 誤差: $e_k = d_k - y_k$
フィルタ係数ベクトル $W$ と入力信号ベクトル $X_k$ を次のように定義します。
$$ W = [w_0, w_1, \dots, w_{N-1}]^T $$ $$ X_k = [x_k, x_{k-1}, \dots, x_{k-N+1}]^T $$
すると、フィルタ出力 $y_k$ は $y_k = W^T X_k = X_k^T W$ と書け、誤差 $e_k$ は次のようになります。
$$ e_k = d_k - W^T X_k $$
フィルタ係数の設計(Wiener-Hopf方程式)
適応フィルタの目的は、誤差の二乗期待値 $J = \frac{1}{2} \mathbb{E}[e_k^2]$ を最小化する最適なフィルタ係数 $W^o$ を見つけることです。
誤差の二乗期待値 $J$ を展開すると、次のようになります。
$$ J = \frac{1}{2} \mathbb{E}[(d_k - W^T X_k)^2] = \frac{1}{2} (\mathbb{E}[d_k^2] - 2W^T \mathbb{E}[d_k X_k] + W^T \mathbb{E}[X_k X_k^T] W) $$
ここで、
- $R = \mathbb{E}[X_k X_k^T]$ は入力信号の自己相関行列
- $R_{dX} = \mathbb{E}[d_k X_k]$ は目標値と入力信号の相互相関ベクトル
とすると、
$$ J = \frac{1}{2} (\mathbb{E}[d_k^2] - 2W^T R_{dX} + W^T R W) $$
この $J$ を $W$ で微分し、0と置くことで、最適なフィルタ係数 $W^o$ を求めることができます。
$$ \frac{\partial J}{\partial W} = -R_{dX} + R W = 0 $$
したがって、最適なフィルタ係数 $W^o$ は次の関係式を満たします。
$$ R W^o = R_{dX} $$
この関係式をWiener-Hopf方程式と呼びます。入力信号の自己相関行列 $R$ が正則(逆行列を持つ)であれば、$W^o$ は解析的に求めることができます。
$$ W^o = R^{-1} R_{dX} $$
フィルタ係数の逐次計算(最急降下法)
実際のシステムでは、入力信号の統計的性質($R$ や $R_{dX}$)が未知であったり、時間とともに変化したりするため、Wiener-Hopf方程式を直接解くことは困難です。そこで、勾配降下法のような逐次的なアルゴリズムを用いて、フィルタ係数を少しずつ更新します。
最も基本的な逐次更新アルゴリズムは、最急降下法に基づいています。
$$ W_{k+1} = W_k - \eta \frac{\partial J}{\partial W_k} $$
ここで $\eta$ は学習率(ステップサイズ)です。$\frac{\partial J}{\partial W_k}$ は、現在のフィルタ係数における誤差関数の勾配です。
この勾配を、瞬時的な誤差 $e_k$ を用いて近似したものが、LMS (Least Mean Squares) アルゴリズムです。
$$ W_{k+1} = W_k + \eta e_k X_k $$
適応フィルタは、エコーキャンセリング、ノイズ除去、チャネル等化など、様々な信号処理分野で応用されています。
参考
- 大松 繁, “信号処理ーデジタルフィルタ”