デジタルフィルタの設計 – カットオフ周波数から係数へ(IIR/バイクアッド)
\(f_c\)、\(f_s\)、\(Q\)から\(b_0, b_1, b_2, a_1, a_2\)を直接求め、コードで使うまで
理論・導出: 2次デジタルローパスフィルタの導出 (アナログ\(G(s)\)、双一次変換、\(H(z)\)、差分方程式)。
カットオフとサンプリング周波数からデジタルフィルタはどう計算するか
この問いは信号処理、オーディオ開発、組み込みプログラミングで最もよく出る論点のひとつである。
本記事では次を段階的に示す。
- カットオフ\(f_c\)とサンプリング周波数\(f_s\)(および\(Q\))からフィルタ係数\(b_0, b_1, b_2, a_1, a_2\)をどう求めるか
- それを再帰(C、DSP、リアルタイム)にすぐ使う方法
目標:望むフィルタから完成した実装へ。
「デジタルフィルタを計算する」とは何か
デジタルフィルタは内部では周波数ではなく差分方程式で記述される。
\[ y[k] = b_0 x[k] + b_1 x[k-1] + b_2 x[k-2] - a_1 y[k-1] - a_2 y[k-2] \]
意図した周波数特性(例:1 kHzのローパス)にするには、\(b_i\)と\(a_i\)を\(f_c\)、\(f_s\)、\(Q\)と整合するよう求める必要がある。
入力パラメータ
典型的な2次IIRローパスには次が必要である。
- カットオフ周波数\(f_c\)(例:1000 Hz)
- サンプリング周波数\(f_s\)(例:48 000 Hz)
- 品質係数\(Q\)(例:Butterworthなら\(1/\sqrt{2} \approx 0.707\))
実務では多くの標準ローパスにこれで足りる。
ステップ1:正規化角周波数
正規化角周波数は、カットオフがナイキスト周波数の半分にどれだけ近いかを表す。 アナログの直感(Hz)とデジタル系(サンプル)を結ぶ中心となる量である。
\[ \omega = 2\pi \frac{f_c}{f_s} \]
ステップ2:双一次変換(プリワープ)
双一次変換は周波数を非線形に歪ませる。 補正なしでは、フィルタが望むカットオフで正確に動かない。
プリワープでこの歪みを補償する。 接線項により、デジタルフィルタのカットオフが正確に一致する。
\[ K = \tan\left(\frac{\omega}{2}\right) \]
ステップ3:係数(2次ローパス)
係数は明確な構造を持つ。
- b0、b1、b2は入力の寄与(フィードフォワード)を決める
- a1、a2はフィードバックを決める
ローパスは、速い変化(高い周波数成分)が フィードバックによって減衰することで実現される。
\[ \mathrm{norm} = \frac{1}{1 + \frac{K}{Q} + K^2} \]
\[ b_0 = K^2 \cdot \mathrm{norm},\quad b_1 = 2 b_0,\quad b_2 = b_0 \]
\[ a_1 = 2(K^2 - 1)\cdot \mathrm{norm},\quad a_2 = \left(1 - \frac{K}{Q} + K^2\right)\cdot \mathrm{norm} \]
これらはそのまま再帰に入れられる(下記)。
例(丸め)
\(f_c = 1000\) Hz、\(f_s = 48\,000\) Hz、\(Q = 0.707\)のとき:
- \(b_0 \approx 0.0039\)、\(b_1 \approx 0.0078\)、\(b_2 \approx 0.0039\)
- \(a_1 \approx -1.8153\)、\(a_2 \approx 0.8310\)
この計算機は望むカットオフを具体的なフィルタ係数に変換する。 つまりどの周波数を通したいかを指定すれば、 マイコンやDSPがそのまま使える数値が得られる。
対話型計算機:デジタルローパス(バイクアッド)
カットオフ周波数、サンプリング周波数、品質\(Q\)から2次デジタルIIRローパスの係数を求める。 入力を変えると自動で再計算され、係数をクリップボードにコピーできる。
注意:係数はコードにそのまま貼り付けられる。 フィルタが正規化係数(a0 = 1)で動作していることを確認すること。
計算用Pythonコード
import math
def lowpass(fc, fs, Q=0.707):
omega = 2 * math.pi * fc / fs
K = math.tan(omega / 2)
norm = 1 / (1 + K / Q + K * K)
b0 = K * K * norm
b1 = 2 * b0
b2 = b0
a1 = 2 * (K * K - 1) * norm
a2 = (1 - K / Q + K * K) * norm
return b0, b1, b2, a1, a2
再帰での使用(C/組み込み)
y = b0*x + b1*x1 + b2*x2
- a1*y1 - a2*y2;
マイコン、オーディオDSP、リアルタイム系で一般的な形である(状態\(x_1,x_2,y_1,y_2\)はローパスの記事参照)。
品質\(Q\)の影響
\(Q\)は伝達関数の形と鋭さを決める。
| \(Q\) | 挙動 |
|---|---|
| \(0.5\) | より強く減衰 |
| \(0.707\) | Butterworth(よく使う既定値) |
| \(> 1\) | \(f_c\)付近の共振/ピーク |
「Qフィルタ 意味」などの検索で指すのは、設計におけるこの\(Q\)の役割である。
よくある誤り
- カットオフがナイキスト限界\(f_s/2\)より上
- 実装で\(a_1,a_2\)の符号が標準の差分方程式と食い違う
- 周波数プリワープなし → 実効カットオフがずれる(本記事では\(K=\tan(\omega/2)\)で対処)
- 非常に大きい\(Q\):数値的に敏感で、パラメータが悪いと不安定になり得る
なぜこの方法が標準か
双一次変換とバイクアッド構造の組み合わせは、安定・効率・実装のしやすさから広く使われる。用途例:オーディオEQ、DSPシステム、制御、組み込み機器。
まとめ
少数のパラメータでカットオフ周波数 → 係数 → 完成した再帰が得られる。IIRバイクアッド・ローパスはデジタル信号処理の主要ツールのひとつであり、理論的な\(H(z)\)による導出と補完的である。
著者: Ruedi von Kryentech
作成: 2026年4月6日 · 最終更新: 2026年4月6日
最終更新時点の技術的内容。