ポリフェイズフィルタバンク
間引きや補間のたびに捨てる計算を丸ごと省ける。フィルタを位相成分へ分解するポリフェイズ構造で、マルチレート処理とサブバンド分割の演算量をM分の1へ削る原理を押さえます。
- 1.FIRの係数を係数番号 mod M で M 組の部分列(位相成分)へ分けると、フィルタとダウンサンプラの順序を入れ替えられ、捨てられる出力を計算せずに済む。演算量はおおむね M 分の1になる。
- 2.各位相成分は低いレートで並列に走り、間引き(デシメーション)は「フィルタ後に間引く」から「間引いてからフィルタ」へノーブルアイデンティティで変形できる。補間(インターポレーション)は対称に成立する。
- 3.均等サブバンド分割はプロトタイプフィルタをポリフェイズ分解し、各位相成分の出力へDFTを掛けるDFTフィルタバンクに帰着する。M本のバンドフィルタ演算がFFT1回に集約される。
「作ってすぐ捨てる」を消す発想
間引き(デシメーション)は、フィルタを通した後にサンプルを M 個おきに1個だけ残し、残り M-1 個を捨てる処理です。素朴に実装すると、捨てるサンプルの出力まで律儀に計算してしまいます。ポリフェイズフィルタバンクは、この「作ってすぐ捨てる」無駄をフィルタの構造そのもので取り除く技法です。本稿では、FIR を位相成分へ分解するポリフェイズ構造、マルチレート処理(間引き・補間)との結合、均等サブバンド分割が DFT へ帰着する仕組み、そして演算量が M 分の1になる理由を原理から追います。土台となる 標本化定理とエイリアシング と FIRフィルタとIIRフィルタ を前提に進めます。
まず記法を決めます。ダウンサンプラ(M 間引き)は M サンプルに1個を残す演算、アップサンプラ(L 倍補間)はサンプル間に L-1 個の 0 を挿入する演算です。ダウンサンプラの入出力は次式です。
y[n] = x[M * n] (M 間引き:M サンプルに1個を残す)
M-1 個の中間サンプルは出力に一切現れません。ならばそれを生む乗算も要らないはずだ、というのがすべての出発点です。
ポリフェイズ分解:係数を位相で仕分ける
長さ N の FIR h[k](k = 0 .. N-1)を考えます。係数番号 k を M で割った余り(k mod M)でグループ分けし、M 組の部分列を作ります。これがポリフェイズ成分です。第 p 成分 e_p は、元の係数から p 番目、p+M 番目、p+2M 番目…と M おきに拾った列です。
e_p[m] = h[M * m + p] p = 0 .. M-1, m = 0,1,2,...
各 e_p は元フィルタの「位相をずらした間引き版」で、まさに位相(フェイズ)で仕分けた成分なので ポリフェイズ(多相) と呼びます。畳み込みをこの仕分けで書き直すと、フィルタ全体は M 本の短いサブフィルタの和として表せます。z 変換で見ると、元の伝達関数は各位相成分を z^{-p} で遅延させて足したものに一致します。
H(z) = Σ_{p=0}^{M-1} z^{-p} * E_p(z^M)
ここで E_p は係数 e_p の z 変換です。分解自体は等価変形にすぎず、単独では演算量は変わりません。効果はマルチレート演算と組み合わせた瞬間に現れます。この式変形の背景には、遅延を z^{-1} で表す z 変換の多項式表現がそのまま効いています。
ノーブルアイデンティティ:順序を入れ替える
マルチレートの心臓部が ノーブルアイデンティティ(恒等式) です。これは「フィルタと間引き・補間の順序を、フィルタの引数を書き換えることで交換できる」という規則です。
- 間引き側:
H(z^M)を通してから M 間引きするのは、先に M 間引きしてからH(z)を通すのに等しい。フィルタが「z の M 乗」の形(=係数が M おきにしか非零でない)なら、間引きを内側へ潜り込ませられる。 - 補間側:L 倍アップサンプルしてから
H(z^L)を通すのは、先にH(z)を通してから L 倍アップサンプルするのに等しい。
要点は、間引き・補間の「レートが低い側」でフィルタ演算を実行できる形へ持ち込める点です。演算はサンプル数の少ない側で行うほど安い、という直感がそのまま定理になっています。
この恒等式は無条件では使えません。フィルタが z^M の関数、つまり係数が M サンプル間隔で並ぶ疎な形をしているときだけ成立します。ポリフェイズ分解が E_p(z^M) という「まさに z^M の形」を生むのは、この恒等式を適用可能にするためのお膳立てなのです。
デシメータへの適用:演算を低レート側へ
M 間引きデシメータ(アンチエイリアス LPF H(z) の後に M 間引き)にポリフェイズ分解を代入します。H(z) = Σ z^{-p} E_p(z^M) の各枝は「E_p(z^M) を通し、z^{-p} で遅延し、最後に M 間引き」という構造になります。ここでノーブルアイデンティティを使うと、z^M の中身だった E_p を間引きの 後ろ側(低レート側) へ移せます。結果、各位相成分 E_p は入力の M 分の1のレートで走ります。
入力を M 系統に分配(commutator:入力を p=M-1..0 の順に配る)
枝 p : E_p(z) を低レート(fs/M)で実行
出力 : M 本の枝の出力を加算
入力サンプルを回転式スイッチ(コミュテータ)で M 本の枝へ順に振り分け、各枝を低レートの短い FIR に通して足すだけになります。捨てるサンプルは端から計算されません。
素朴実装は、出力1点ごとに N 回の乗算を高レート fs で行い、しかも出力の M 個に M-1 個は捨てます。ポリフェイズ実装では、各位相成分の長さは約 N/M、それを fs/M のレートで動かします。単位時間あたりの乗算数は「(N/M) 個 × M 枝 × (fs/M) レート = N * fs / M」で、素朴実装の N * fs に対しておおよそ M 分の1です。捨てる出力を最初から作らないぶんが、そのまま削減量になります。
インターポレータ:補間は対称に成立する
L 倍補間(L-1 個の 0 を挿入してから補間 LPF H(z) を通す)も、補間側のノーブルアイデンティティで同じ節約ができます。挿入された 0 に係数を掛けても 0 にしかならない——この無駄を消すのがポイントです。ポリフェイズ分解を使うと、フィルタ演算を アップサンプル前の低レート側 で実行し、その出力をコミュテータで束ねて高レート列を作れます。
| 処理 | 素朴実装の無駄 | ポリフェイズ後の実行レート | 削減の理屈 |
|---|---|---|---|
| M 間引き(デシメーション) | 捨てる M-1 個ぶんの乗算 | 各位相成分を fs/M で実行 | 捨てる出力を計算しない |
| L 倍補間(インターポレーション) | 挿入した 0 への乗算 | 各位相成分を fs/L で実行 | 0 との乗算を実行しない |
| 有理数 L/M 変換 | 上の両方が同時に発生 | アップ後・ダウン前の中間レートで実行 | 両側の無駄を同時に除去 |
有理数レート変換(L/M 倍)は補間デシメータの縦続で、両方の無駄が同時に出ます。ポリフェイズ化すると、演算をレートの低い側へ寄せて両方をまとめて削れます。マルチレートは 標本化定理とエイリアシング のオーバーサンプリングと表裏で、アナログ負担をデジタルの効率的な間引きへ移す実装基盤になっています。
サブバンド分割と DFT フィルタバンク
フィルタバンクは、入力を複数の周波数帯(サブバンド)へ分ける 分析バンク と、それらを再び合成する 合成バンク の対で構成されます。均等幅の M バンドを個別のバンドパス FIR で作ると、M 本ぶんの畳み込みが要り高価です。ここでポリフェイズが決定的に効きます。
均等分割の各バンドフィルタは、1本の プロトタイプ・ローパス H(z) を周波数軸で M 等分の位置へずらした変調版として作れます(h_k[n] = h[n] * exp(j 2π k n / M))。この変調構造をポリフェイズ分解と突き合わせると、M 本のバンド出力は「プロトタイプの M 個の位相成分の出力に対する M 点 DFT」に厳密に一致します。
分析バンク = 入力をコミュテータで M 分配
→ 各枝でプロトタイプの位相成分 E_p を低レート実行
→ M 個の枝出力に M 点 DFT(実装は FFT)
プロトタイプを共有し、バンドごとの違いを「変調(位相回し)」だけに押し込むと、その位相回しの総和が定義上まさに DFT になります。したがって M 本のバンドパス演算は、共通のポリフェイズ・フィルタ処理1式と FFT 1回に集約されます。M が大きいほど、素朴なバンドごと畳み込み(O(M) 本 × フィルタ長)に対する優位が広がり、O(M log M) 側に乗り換えられます。DFT そのものの性質は フーリエ変換とスペクトル解析 を参照してください。
これが DFT フィルタバンク(均等変調フィルタバンク) で、通信のチャネライザ(多数の等間隔チャネルを一括で切り出す)、オーディオコーデックのサブバンド符号化、音声のフィルタバンク前処理などで広く使われます。合成側は逆 DFT とポリフェイズを対称に組みます。
完全再構成という設計目標
分析でサブバンドへ分け、合成で戻したとき、遅延を除いて入力と厳密に一致すること(各サブバンドを間引いてもエイリアスが打ち消されること)を 完全再構成(PR) と呼びます。均等 M バンドを M 間引きすると各サブバンドはナイキストぎりぎりまで詰まり、隣接バンドの折り返しが避けられません。
サブバンドを間引くとバンド内に折り返しが必ず入り込みます。DFT フィルタバンク単体ではこれを完全には消せないため、実務ではプロトタイプの設計に制約を課します。分析・合成のプロトタイプを特定の関係(パワー相補、あるいは QMF・CMFB の直交条件)に合わせると、合成時に各バンドの折り返し成分が互いに逆位相で相殺し、完全再構成が成立します。プロトタイプ設計は デジタルフィルタ設計と窓関数 の阻止量・遷移幅のトレードオフがそのまま効きます。
つまりポリフェイズは「効率」を、プロトタイプ設計と直交条件は「再構成の正しさ」を担います。両者は独立で、効率化してもエイリアス相殺の設計は別途詰める必要があります。
- ポリフェイズ分解:
H(z) = Σ z^{-p} E_p(z^M)、E_p[m] = h[M m + p]。係数を k mod M で仕分ける。 - ノーブルアイデンティティ:フィルタが
z^Mの形なら間引きと順序交換可。演算を低レート側へ寄せるのが目的。 - 削減量:デシメータ・インターポレータともおおむね M(または L)分の1。捨てる出力/0 との乗算を作らないため。
- DFT フィルタバンク:均等バンド=プロトタイプの変調。M 本のバンド演算がポリフェイズ+FFT 1回に集約。
- 完全再構成:間引きのエイリアスは合成側の直交条件(QMF/CMFB, パワー相補)で相殺する。効率化とは別問題。
まとめ
ポリフェイズフィルタバンクは、マルチレート処理に潜む「作ってすぐ捨てる」無駄を、フィルタの構造そのもので除去する技法です。要点は、(1) FIR を係数番号 mod M でポリフェイズ成分 E_p に分解すると H(z) = Σ z^{-p} E_p(z^M) と書け、これがノーブルアイデンティティ適用の準備になること、(2) 恒等式でフィルタ演算を間引き・補間のレートが低い側へ移せ、演算量がおおよそ M 分の1になること、(3) 均等サブバンド分割はプロトタイプの変調に等しく、ポリフェイズ成分の出力への DFT(FFT)へ厳密に帰着すること、(4) 効率化と完全再構成は別問題で、間引きのエイリアス相殺はプロトタイプの直交条件で保証すること、です。ソフトウェア無線のチャネライザ、オーディオ/画像のサブバンド符号化、高効率なサンプルレート変換まで、離散信号を「レートを跨いで」扱うあらゆる場面でこの構造が土台になります。
信号処理・制御 Article
ポリフェイズフィルタバンクを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
DSP
比較で見る軸
難易度: advanced / カテゴリ: 信号処理・制御 / タグ数: 6
導入後に効く点
各位相成分は低いレートで並列に走り、間引き(デシメーション)は「フィルタ後に間引く」から「間引いてからフィルタ」へノーブルアイデンティティで変形できる。補間(インターポレーション)は対称に成立する。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- 信号処理・制御
- タグ数
- 6
判断チェックリスト
- 自社の用途が「DSP / マルチレート」に近いか確認する。
- 強みである「FIRの係数を係数番号 mod M で M 組の部分列(位相成分)へ分けると、フィルタとダウンサンプラの順序を入れ替えられ、捨てられる出力を計算せずに済む。演算量はおおむね M 分の1になる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。