適応フィルタ(LMS・RLS)
エコーやノイズは環境で刻々と変わるため固定係数では追えません。係数を誤差から逐次更新するLMSとRLSの原理・収束・トレードオフを押さえ、消去系を正しく設計できるようになります。
- 1.適応フィルタは望みの信号と出力の誤差を使ってFIR係数をサンプルごとに更新し、未知で時変な環境(エコー経路や雑音経路)に自動追従する。誤差を最小化する係数を事前設計ではなく学習で求める点が固定フィルタと決定的に違う。
- 2.LMSは最急降下の勾配を1サンプルの瞬時値で近似する最も軽い手法で、更新は w ← w + μ·e·x の一行。安定に収束するにはステップサイズ μ を入力パワーで決まる上限より小さく取る必要があり、μ が大きいほど速いが定常誤差(misadjustment)は増える。
- 3.RLSは最小二乗解を再帰的に厳密追跡し、収束が速く入力の相関に強いが、逆相関行列 P の更新で1サンプルあたり次数の2乗の計算量がかかる。速度と数値安定性・演算量のトレードオフでLMSかRLSかを選ぶ。
係数が固定されないフィルタ
通常のデジタルフィルタは、設計時に決めた係数を動作中ずっと使い続けます。しかし現実の問題には、フィルタが打ち消すべき経路が未知で、しかも時間とともに変わるものが数多くあります。通話中のエコー経路はスピーカからマイクへの音響反射で決まり、人が動けば変化します。伝送路の歪みは温度や配線で変わります。こうした相手には固定係数では追従できません。
適応フィルタは、出力と「望ましい信号」との誤差を使って係数そのものを逐次更新し、未知・時変の環境に自動で合わせ込む仕組みです。中身は多くの場合ただの FIRフィルタ で、違いは係数 w[k] がサンプルごとに動くこと。フィルタの設計を人手ではなく**データからの最適化(学習)**に置き換えた点が本質です。
出力 : y[n] = Σ_{k=0}^{N-1} w_k[n]·x[n-k] = wᵀ x (長さ N の FIR)
誤差 : e[n] = d[n] − y[n] (望みの信号 − 出力)
目的 : 誤差の二乗平均 E{ e[n]² } を最小にする係数ベクトル w を求める
d[n] は望みの信号(desired)、x[n] はフィルタへの入力です。この2つをどう割り当てるかが適応フィルタの構成そのもので、応用ごとに変わります(後述)。
最適解ウィナー解と誤差曲面
まず「目指す先」を押さえます。誤差二乗平均 J(w) = E{e²} を係数 w の関数として展開すると、w に関する**二次形式(下に凸な放物面)**になります。
J(w) = E{d²} − 2 wᵀ p + wᵀ R w
R = E{ x xᵀ } : 入力の自己相関行列(N×N, 半正定値)
p = E{ d x } : 望みの信号と入力の相互相関ベクトル
凸なので勾配 ∇J = 2(R w − p) をゼロに置けば最小点が一意に定まります。これがウィナー解です。
ウィナー・ホップ方程式 : R w* = p → w* = R⁻¹ p
適応アルゴリズムがやることは、R と p を事前に知らなくても、この最適点 w* へ逐次的に近づけることに尽きます。誤差曲面が単一の谷を持つ放物面である——この事実が、勾配を下れば必ず最適解に届くという収束保証の土台になります。
出力 y = wᵀx が係数 w について線形なので、誤差 e = d − wᵀx も w の一次式です。それを二乗して期待値を取れば、w について高々二次の項しか現れません。結果として J(w) は係数空間上で楕円状の等高線を持つ単一の放物面になり、局所最適が存在せず勾配降下が大域最適に到達できます。ニューラルネットのような非凸最適化と違い、線形適応フィルタの最適化が素直なのはこのためです。
最急降下からLMSへ
w* へ向かうもっとも基本的な反復が最急降下法です。勾配 ∇J の逆向きにステップサイズ μ だけ係数を動かします。
最急降下 : w[n+1] = w[n] − μ·∇J = w[n] + 2μ (p − R w[n])
しかしこれには R と p、すなわち統計量の期待値が必要で、時変環境では実時間で得られません。そこで LMS(Least Mean Squares) は、期待値を取る前の1サンプルの瞬時値で勾配を近似します。∇J = −2 E{e x} の期待値を外し、e[n]·x[n] そのものを勾配の推定値として使います。
LMS 更新則 : w[n+1] = w[n] + μ·e[n]·x[n]
各係数で書くと : w_k[n+1] = w_k[n] + μ·e[n]·x[n-k]
この一行が LMS のすべてです。誤差 e[n] が大きく、その方向に相関する入力 x[n-k] ほど、対応する係数を大きく動かす——直観的にも妥当な更新になっています。1サンプルあたりの計算量は出力計算とあわせて約 2N 回の乗算、O(N) の線形オーダーで、極めて軽いのが LMS 最大の魅力です。瞬時勾配は真の勾配のまわりで揺れる確率的近似なので、係数は最適点の周囲を細かくジグザグしながら平均的に w* へ収束します。
収束とステップサイズの上限
LMS が発散せず収束するかは、ステップサイズ μ が握ります。係数誤差の平均が0へ収束する条件は、入力自己相関行列 R の固有値 λ を使って次で与えられます。
収束条件 : 0 < μ < 2 / λ_max (λ_max は R の最大固有値)
固有値の総和 Σλ は R のトレース、すなわち各タップの入力パワーの総和 N·E{x²}(=入力信号の総パワー)に等しいため、実務では扱いやすい保守的な目安として次を使います。
実用目安 : 0 < μ < 2 / (N · 入力パワー) = 2 / tr(R)
μ が上限を超えると係数が谷を飛び越えて増幅し、発散します。上限内でも μ の大小には明確なトレードオフがあります。
| ステップサイズ μ | 収束速度 | 定常状態の誤差(misadjustment) | 外乱・時変への追従 |
|---|---|---|---|
| 大きい(上限に近い) | 速い(少ないサンプルで到達) | 大きい(最適点まわりで大きく揺れる) | 速いが雑音に過敏 |
| 小さい | 遅い(多くのサンプルを要する) | 小さい(最適点近くで滑らか) | 遅く時変に置いていかれる |
ここで重要なのがミスアジャストメント(misadjustment)という概念です。瞬時勾配の雑音のせいで、LMS は収束後も w* に静止せず周囲で揺れ続け、その分だけ最小誤差 J_min より過剰な定常誤差が残ります。過剰分は近似的に μ·tr(R)/2 に比例し、μ を大きくするほど速いが定常誤差も増える、という速度と精度の綱引きになります。
LMS の収束速度は入力の自己相関行列 R の固有値の広がり(固有値スプレッド λ_max/λ_min)に強く依存します。白色雑音のように固有値が揃った入力なら全方向が同じ速さで収束しますが、音声のように強く相関した入力では固有値が大きくばらつき、λ_min に対応する遅い方向が収束を律速します。ステップサイズは最も速い方向(λ_max)で発散しないよう小さく抑えねばならず、結果として遅い方向がさらに遅くなる——相関の強い入力ほど LMS は苦手という弱点がここから生じます。
素の LMS は最適な μ が入力パワーに依存し、信号レベルが変わるたびに再調整が要ります。正規化LMS(NLMS) は更新を入力ベクトルのパワーで割り、w ← w + (μ̃ / (ε + xᵀx))·e·x とします(ε は0除算回避の微小値、μ̃ は 0 と 2 の間の無次元)。これで実効ステップが信号レベルに自動追従し、パワーが変動する音声などでも安定した収束が得られます。実装される適応フィルタの多くは素の LMS ではなく NLMS です。
RLS:最小二乗を厳密に再帰追跡する
LMS が瞬時勾配で「だいたいの方向」へ進むのに対し、RLS(Recursive Least Squares) は、これまで観測した全サンプルに対する重み付き最小二乗解を毎サンプル厳密に再計算します。忘却係数 λ(0.95〜1、1 に近いほど過去を長く記憶)で古いデータを指数的に減衰させ、時変にも対応します。
最小化対象 : Σ_{i=1}^{n} λ^{n-i} · e[i]² (λ: 忘却係数, 0 << λ ≤ 1)
毎回 R⁻¹ p を解き直すのは重すぎるため、RLS は行列反転の補題を使って逆相関行列 P = R⁻¹ を漸化式で更新します。中核はカルマンゲインに似た利得ベクトル g の計算です。
利得 : g[n] = P[n-1] x[n] / (λ + xᵀ P[n-1] x[n])
係数更新 : w[n] = w[n-1] + g[n]·e[n] (e[n] = d[n] − w[n-1]ᵀ x[n])
P の更新 : P[n] = (1/λ)·( P[n-1] − g[n] xᵀ P[n-1] )
P が入力統計の逆行列を保持しているため、RLS は固有値の散らばりの影響を実質的に取り除き、相関の強い入力でも数タップ〜数十タップ分の短時間で収束します。LMS の弱点をまさに補う構造です。ただし P は N×N 行列で、その更新に1サンプルあたり O(N²) の乗算がかかります。次数が大きいと LMS の O(N) に対して桁で重くなります。
RLS は P の再帰更新を繰り返すため、有限精度演算では丸め誤差が蓄積して P が対称性や正定値性を失い、発散することがあります。忘却係数 λ が1に近いほど誤差が抜けにくく蓄積しやすいのも注意点です。実装では P の対称化を毎ステップ強制する、平方根版(QR分解に基づく array/square-root RLS)を使う、などの安定化が要ります。速いが「置いておくだけで安定」な LMS とは対照的に、RLS は数値面の作り込みを前提とするアルゴリズムです。
LMS と RLS の対比
両者は「同じウィナー解 w* を目指す」点で共通ですが、そこへの近づき方と代償が対照的です。
| 観点 | LMS(瞬時勾配) | RLS(再帰最小二乗) |
|---|---|---|
| 原理 | 最急降下の勾配を1サンプルで近似 | 重み付き最小二乗解を毎回厳密に追跡 |
| 更新の核 | w ← w + μ·e·x | 逆相関行列 P とゲイン g を漸化更新 |
| 計算量/サンプル | O(N)(乗算 約2N 回) | O(N²)(P の更新が支配的) |
| 収束速度 | 遅い(数百〜数千サンプル) | 速い(数十サンプル級) |
| 入力相関への強さ | 弱い(固有値スプレッドで律速) | 強い(P が相関を白色化) |
| 定常誤差 | μ に応じた misadjustment が残る | 小さい(最小二乗に忠実) |
| 数値安定性 | 堅牢(発散しにくい) | 丸め誤差で P が崩れやすく要対策 |
| 主な調整パラメータ | ステップサイズ μ | 忘却係数 λ |
要するに、演算資源が限られ収束の速さより堅牢さと軽さを優先するなら LMS(NLMS)、相関の強い入力で速い収束が要り、O(N²) の演算と数値安定化の手間を払えるなら RLS、という選択になります。組込みや MCU では圧倒的に LMS 系が主流です。
応用:エコー消去とノイズ除去
適応フィルタの威力は、d[n] と x[n] の割り当てを変えるだけで多様な問題に化ける汎用性にあります。代表例がシステム同定の形を取るエコー消去です。
音響/回線エコー消去(システム同定型):
x[n] : 遠端信号(スピーカへ送る = エコー経路 h への入力)
d[n] : マイク入力 = 近端音声 s[n] + エコー( h * x )[n]
適応フィルタ w が未知のエコー経路 h を推定 → y[n] ≈ エコー成分
e[n] = d[n] − y[n] ≈ 近端音声 s[n](エコーが差し引かれ、残るのは話者の声)
ここでの妙味は、消したいエコーを推定し、誤差 e[n] が消し残りそのものになる点です。e を最小化する=エコーを最大限打ち消す、が自動的に一致します。人が動いて経路 h が変わっても、適応フィルタが係数を追従させ続けるため消去性能が保たれます。
適応ノイズキャンセリングは割り当てを変えた双子の構成です。主マイクに「目的音+雑音」、参照マイクに「雑音源と相関するが目的音を含まない信号」を入れ、適応フィルタが参照から主に混じった雑音成分を推定して差し引きます。誤差出力 e[n] がクリーンな目的音になります。
適応ノイズキャンセリング:
d[n] : 目的音 s[n] + 雑音 n0[n](主マイク)
x[n] : n0 と相関する参照雑音 n1[n](参照マイク, s を含まない)
w が n1 → n0 の伝達を推定 → y[n] ≈ n0[n]
e[n] = d[n] − y[n] ≈ s[n](雑音だけが消え、目的音が残る)
このほか、送信前に伝送路の逆特性を学習して歪みを打ち消す適応等化(inverse modeling)、過去サンプルから次を予測する適応線形予測など、教科書的には (1) システム同定、(2) 逆モデリング、(3) 雑音除去、(4) 予測、の4構成に整理されます。いずれも「d と x に何を割り当て、e に何を残したいか」で設計が決まります。
- 基本構成:適応フィルタ(多くは FIR)+誤差
e = d − yによる係数更新。目的はE{e²}を最小化するウィナー解w* = R⁻¹ pへの追従。 - LMS 更新則:
w ← w + μ·e·x。瞬時勾配で最急降下を近似。計算量O(N)。 - 収束条件:
0 < μ < 2/λ_max(実用目安2/tr(R))。μ 大で速いが misadjustment 大、μ 小で遅いが定常誤差小。 - LMS の弱点:入力の固有値スプレッド(相関)で収束が律速。対策に NLMS。
- RLS:最小二乗を再帰追跡、忘却係数
λ、収束は速いがO(N²)で数値的に不安定になりやすい。 - 応用の型:システム同定=エコー消去、逆モデリング=等化、雑音除去=ノイズキャンセリング、予測。
まとめ
適応フィルタは、係数を事前に固定せず誤差 e = d − y を手がかりに逐次更新することで、未知で時変な経路に追従するフィルタです。目的は誤差二乗平均を最小化するウィナー解 w* = R⁻¹ p への到達で、誤差曲面が単一の放物面(凸)だからこそ勾配降下で大域最適に届きます。LMS は勾配を1サンプルの瞬時値で近似する w ← w + μ·e·x の一行で、計算量 O(N) と堅牢さが魅力ですが、収束はステップサイズ μ(上限 2/λ_max)と入力相関に縛られ、速度と定常誤差(misadjustment)がトレードオフになります。RLS は最小二乗解を逆相関行列 P の再帰更新で厳密追跡し、相関の強い入力でも速く収束しますが、O(N²) の演算と数値安定化の手間を要します。応用は d と x の割り当て次第でエコー消去・ノイズキャンセリング・等化・予測へと展開でき、いずれも「誤差に何を残すか」で設計が決まります。逐次推定という点では カルマンフィルタ と発想を共有し、固定係数の デジタルフィルタ設計 や畳み込みを扱う 線形時不変システム の理解が土台になります。
信号処理・制御 Article
適応フィルタ(LMS・RLS)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
適応フィルタ
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 6
導入後に効く点
LMSは最急降下の勾配を1サンプルの瞬時値で近似する最も軽い手法で、更新は w ← w + μ·e·x の一行。安定に収束するにはステップサイズ μ を入力パワーで決まる上限より小さく取る必要があり、μ が大きいほど速いが定常誤差(misadjustment)は増える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 6
判断チェックリスト
- 自社の用途が「適応フィルタ / LMS」に近いか確認する。
- 強みである「適応フィルタは望みの信号と出力の誤差を使ってFIR係数をサンプルごとに更新し、未知で時変な環境(エコー経路や雑音経路)に自動追従する。誤差を最小化する係数を事前設計ではなく学習で求める点が固定フィルタと決定的に違う。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。