FIRフィルタ
FIRフィルタ(Finite Impulse Response filter)はインパルス応答が有限長となる離散時間の線形時不変フィルタである。有限個の係数で定義され、差分方程式は y[n] = Σ_{k=0}^{N-1} h[k] x[n-k] で与えられる。帰還を用いないため構造的に安定であり、係数対称性を用いることで厳密な線形位相が実現できる点が特徴である。設計仕様(通過域・阻止域境界、リップル量、遷移帯域幅)に応じ、window法、Parks–McClellan法、周波数サンプリング法などを使い分ける。実装は直接形畳み込みに加え、長次数では FFT による高速畳み込みや polyphase 分解が有効である。
定義と周波数特性
FIRフィルタの周波数応答は H(e^{jω}) = Σ_{k=0}^{N-1} h[k] e^{-jωk} で与えられる。位相は係数配列の対称性に強く依存し、対称(h[k] = h[N-1-k])または反対称(h[k] = −h[N-1-k])であれば線形位相となる。有限長ゆえ応答は理想特性に対しリップルと遷移帯域を伴うが、係数設計によって通過域リップルと阻止域減衰量のバランスを制御できる。
線形位相と群遅延
係数が対称であれば位相は −ω(N−1)/2 に等しく、群遅延は一定の (N−1)/2 サンプルとなる。これは波形歪みを避けたいベースバンド信号の処理で有利である。反対称係数では微分器やヒルベルト変換器(90°位相シフタ)などの実現に適用できる。線形位相化には偶奇長や零点配置に応じた4つの型(Type I〜IV)が知られている。
設計手法の全体像
- window法:理想インパルス応答を切り出し、ハミングやブラックマン、カイザーなどの window を掛けて側波帯リップルを抑制する。
- Parks–McClellan(Remez)法:チェビシェフ近似により通過域・阻止域のリップルを等波形(equiripple)に最適化する。
- 周波数サンプリング法:所望の振幅・位相を周波数格子上で与え、逆 DFT で時系列係数を得る。
window法の要点
window法は直感的かつ実装が容易である。たとえばカイザー window はパラメータ β でリップルと遷移帯域幅のトレードオフを連続的に調整でき、経験式 N ≈ (A−8)/(2.285Δω)(A は阻止域減衰[dB], Δω は正規化遷移幅)で次数見積もりが可能である。ハミングは阻止域の第1サイドローブを大幅に低下させ、ブラックマンはより広い遷移帯域と引き換えに高い減衰を与える。
Parks–McClellan法の要点
Parks–McClellan法は帯域ごとの重み付けを反復的に調整し、通過域・阻止域の誤差を等波形化する。厳密な仕様(たとえば等リップルの低域通過や帯域阻止)を満たしやすく、同一仕様に対して window 法より低次数となる傾向がある。設計結果は対称係数となり、線形位相が自然に得られる。
実装と計算量
- 直接形(逐次畳み込み):1サンプル当たり O(N) の乗算・加算を要するが、係数対称性で乗算回数を約半減できる。
- 高速畳み込み:長フィルタでは FFT を用いた overlap–save/add が有効で、ブロック長 M に対し O(M log M) の計算量で処理できる。
- polyphase 構造:マルチレート処理(デシメーション/インターポレーション)で演算をダウンサンプル前後に分配し、無駄な計算を抑える。
- 特殊構造:ハーフバンドや Hilbert、微分器などは零係数が多く、実装資源を節約できる。
固定小数点と量子化誤差
FIRフィルタの固定小数点実装では係数量子化と丸め誤差が性能を左右する。係数の有効ビット数は阻止域漏れや通過域リップルに直結するため、スケーリングと Q-format 設計を行い、内部加算器のビット幅を十分に確保する。丸め雑音の分散は係数二乗和に比例するため、設計段階でノイズゲインを推定し、必要に応じて dither を用いる。ブロック浮動小数点や SIMD による飽和算術も有効である。
群遅延・レイテンシとシステム設計
FIRフィルタのレイテンシは (N−1)/2 サンプルで一定となる。リアルタイム通信・制御ではこの遅延を許容範囲に収めるため、遷移帯域に余裕を持たせて次数を下げる、ハーフバンドやマルチステージを使う、あるいは帯域分割後に短次数フィルタを適用するなどの工夫が重要である。ストリーミング処理ではブロック化によるバッファ遅延も考慮する。
マルチレート処理と polyphase
デシメーションではアンチエイリアシング低域通過を入力側で施し、インターポレーションでは画像成分除去の低域通過を出力側で施す。polyphase 分解により、不要となる枝の演算を省略でき、実効計算量を削減できる。矩形応答の累積器・差分器を直列化した CIC は乗算器不要の構造であり、整数量子化と組み合わせて高レート変換に適するが、遷移帯域が広いため補正用の FIRフィルタを後段に置く設計が一般的である。
設計仕様の与え方
標本化周波数 f_s、通過域端 f_p、阻止域端 f_s1(慣例上 f_s と紛らわしいため f_stop とする)、通過域リップル δ_p、阻止域リップル δ_s(対応する減衰 A_s = −20log10 δ_s)を定める。正規化角周波数 ω = 2πf/f_s で仕様を書けばアルゴリズム非依存に扱える。重みは目的に応じて帯域ごとに設定し、音響や通信など応用分野の感度に合わせて最適化する。
用途例
- 帯域制限:アンチエイリアシング、画像成分除去、チャネル分割、均一群遅延が求められるベースバンド整形。
- ノッチ/DCブロック:Σh[k]=0 の設計で直流成分や特定周波数の除去。
- ヒルベルト変換器・微分器:反対称係数により位相器や数値微分器を高精度に生成。
- 等化:マルチパスや振幅歪みに対するインバース特性の近似(零点のユニットサークル配置を活用)。
数値実装上の注意
係数は正規化して L1 もしくは L2 ノルムを管理し、オーバーフロー対策としてスケーリングと飽和を併用する。SIMD 命令や FMA による MAC 最適化、キャッシュ効率のよい循環バッファ、FPGA/ASIC ではパイプラインと係数対称性の共有化により、スループットと消費資源のバランスを取るのが定石である。
設計フローの実務的手順
- 仕様確定:帯域境界・リップル・減衰・遷移幅・遅延許容を数値で定める。
- 次数見積もり:Kaiser の経験式や設計ツールの初期値推定を用いる。
- 係数合成:window または Parks–McClellan を選択し、帯域重みを調整。
- 量子化とスケーリング:Q-format を決め、固定小数点で SNR とダイナミックレンジを検証。
- 検証:振幅・位相・群遅延・実信号での波形維持、そして実装資源(乗算器、メモリ、レイテンシ)を評価する。
よくあるトレードオフ
遷移帯域を狭めるほど次数が増えレイテンシと演算量が増大する。阻止域減衰を厳しくすると係数量子化への感度が高まり、固定小数点ではビット幅が増える。用途の許容誤差とレイテンシ制約を起点に、必要十分な仕様へ調整することが実装最適化の鍵である。