パッシブフィルタ回路の理論 — RC/RL/RLCフィルタの伝達関数と周波数特性を導出する

ラジオのチューニングダイヤルを回すと、無数に飛び交う電波の中から特定の放送局だけが聞こえてきます。オーディオ機器のトーンコントロールで低音を強調すると、ベースラインがずっしりと響きます。心電図モニターは、電源由来の 50/60 Hz ノイズを取り除いて、わずか数 mV の心臓の信号を鮮明に表示します。これらすべての裏側で働いているのがフィルタ回路です。

フィルタとは、信号に含まれるさまざまな周波数成分のうち、必要な成分だけを通過させ、不要な成分を減衰させる回路です。「周波数の門番」と言えるでしょう。電子回路の世界では、フィルタを理解しなければまともな信号処理はできません。

フィルタの中でも、抵抗 $R$、コンデンサ $C$、インダクタ $L$ のみで構成され、外部電源を必要としないフィルタをパッシブフィルタ(受動フィルタ)と呼びます。パッシブフィルタを学ぶことで、以下のような分野に直結する基盤知識が身につきます。

  • 通信回路設計 — 受信機のフロントエンドで不要な帯域外信号を除去するプリセレクタフィルタ、送信機で高調波を抑制するハーモニックフィルタなど、通信システムの入り口と出口にフィルタは不可欠です
  • 電源回路のノイズ除去 — スイッチング電源が発生する高周波スイッチングノイズを抑えるEMIフィルタはRCやLCフィルタの典型的応用です
  • 計測・センサ信号処理 — ADコンバータの前段でエイリアシングを防ぐアンチエイリアシングフィルタ、センサ信号から商用電源ノイズを除去するノッチフィルタなど、正確な計測にはフィルタ設計が欠かせません
  • オーディオ回路 — スピーカーのクロスオーバーネットワーク(ウーファーに低音、ツイーターに高音を振り分ける回路)はまさにパッシブフィルタそのものです

本記事の内容

  • フィルタの基本概念(周波数選択性と4種類のフィルタ)
  • 1次RCローパスフィルタの伝達関数導出と遮断周波数 $f_c = 1/(2\pi RC)$
  • 1次RCハイパスフィルタの伝達関数導出
  • 1次RLローパス/ハイパスフィルタの伝達関数導出
  • 2次RLCバンドパスフィルタのQ値と帯域幅
  • 2次RLCバンドストップ(ノッチ)フィルタの理論
  • ボード線図(振幅特性・位相特性)の描き方と読み方
  • フィルタのカスケード接続と注意点
  • Python による各フィルタの周波数応答とステップ応答の可視化

前提知識

この記事を読む前に、以下の記事を読んでおくと理解が深まります。

フィルタの基本概念 — 周波数選択の4パターン

信号と周波数成分

そもそも、なぜ「周波数で分ける」ことが可能なのでしょうか。フーリエの定理によれば、どんな複雑な信号でも、さまざまな周波数の正弦波の重ね合わせとして表現できます。たとえば、マイクに入った音声信号には、人の声(数百 Hz〜数 kHz)だけでなく、空調のハム音(50/60 Hz)やデジタル機器の高周波ノイズ(数十 kHz 以上)が混ざっています。フィルタはこれらの周波数成分を選択的に通過・遮断することで、欲しい信号だけを取り出します。

4種類の理想フィルタ

フィルタは、通過させる周波数帯域によって大きく4種類に分類されます。

ローパスフィルタ(LPF: Low-Pass Filter) は、遮断周波数 $f_c$ より低い周波数の信号を通過させ、$f_c$ より高い信号を減衰させます。日常的な例では、スピーカーのウーファー用クロスオーバーネットワークがこれに当たります。低音成分だけを通す「低域通過」の門番です。

ハイパスフィルタ(HPF: High-Pass Filter) は、$f_c$ より高い信号を通過させ、低い信号を減衰させます。ツイーター用クロスオーバーネットワークや、直流成分を除去するカップリング回路が典型例です。

バンドパスフィルタ(BPF: Band-Pass Filter) は、中心周波数 $f_0$ の近傍の信号だけを通過させ、それ以外を減衰させます。ラジオの同調回路が代表例で、特定の放送局の周波数だけを選択的に受信します。

バンドストップフィルタ(BSF: Band-Stop Filter, ノッチフィルタ) は、特定の周波数帯域だけを除去し、それ以外を通過させます。商用電源ノイズ(50/60 Hz)の除去に使われるノッチフィルタが典型例です。

これら4種類はいずれも、素子の組み合わせ方で実現できます。まずは最も基本的なRCローパスフィルタから、伝達関数の導出を始めましょう。

1次RCローパスフィルタ

回路構成と直感的な理解

1次RCローパスフィルタは、抵抗 $R$ とコンデンサ $C$ を直列に接続し、コンデンサの両端電圧を出力として取り出す回路です。これは最もシンプルなフィルタであり、すべてのフィルタ理論の出発点となります。

なぜこの回路が「低い周波数だけ通す」のか、直感的に考えてみましょう。コンデンサのインピーダンスは $Z_C = 1/(j\omega C)$ ですから、周波数が低いほどインピーダンスが大きくなります。低周波では $Z_C$ が非常に大きいので、入力電圧のほとんどがコンデンサにかかり、出力電圧は入力とほぼ等しくなります。逆に高周波では $Z_C$ が小さくなり、コンデンサは短絡に近づくため、出力電圧はほぼゼロに落ちます。つまり、コンデンサは「低周波はブロック(電圧を保持)し、高周波はスルー(短絡して電圧を落とす)」する素子です。この性質が自然にローパス特性を生み出します。

伝達関数の導出

伝達関数 $H(j\omega)$ は、入力電圧 $V_{\text{in}}$ に対する出力電圧 $V_{\text{out}}$ の比として定義されます。回路は $R$ と $C$ の直列接続ですから、電圧分圧の式を複素インピーダンスで書くだけです。

入力電圧は $R$ と $C$ の分圧で各素子に配分されます。出力はコンデンサの両端電圧ですから、次のように書けます。

$$ H(j\omega) = \frac{V_{\text{out}}}{V_{\text{in}}} = \frac{Z_C}{R + Z_C} $$

$Z_C = \dfrac{1}{j\omega C}$ を代入します。

$$ H(j\omega) = \frac{\dfrac{1}{j\omega C}}{R + \dfrac{1}{j\omega C}} $$

分母・分子に $j\omega C$ を掛けて整理すると、きれいな形になります。

$$ H(j\omega) = \frac{1}{1 + j\omega RC} $$

ここで 時定数 $\tau = RC$ を定義すると、さらに見通しがよくなります。

$$ \boxed{H(j\omega) = \frac{1}{1 + j\omega\tau}} $$

これが1次RCローパスフィルタの伝達関数です。$\omega$ が小さいとき $H \approx 1$(信号がそのまま通過)、$\omega$ が大きいとき $H \approx 1/(j\omega\tau) \to 0$(信号が減衰)という振る舞いが、この式からすぐに読み取れます。

ラプラス変換表現

$j\omega$ を複素周波数 $s$ に置き換えると、ラプラス領域での伝達関数が得られます。

$$ H(s) = \frac{1}{1 + s\tau} = \frac{1/\tau}{s + 1/\tau} $$

これは1次遅れ系の標準形であり、極が $s = -1/\tau$ に1つだけ存在します。極が負の実軸上にあるので、系は安定です。

遮断周波数の導出

遮断周波数(カットオフ周波数)$f_c$ は、出力の振幅が入力の $1/\sqrt{2}$ 倍(約 $-3\,\text{dB}$)になる周波数として定義されます。なぜ $1/\sqrt{2}$ なのかというと、電力が入力の半分になる条件だからです。電力は電圧の2乗に比例するので、電圧が $1/\sqrt{2}$ 倍になれば電力は半分、すなわち $-3\,\text{dB}$ です。

振幅特性(ゲイン)は伝達関数の絶対値です。

$$ |H(j\omega)| = \frac{1}{\sqrt{1 + (\omega\tau)^2}} $$

$|H| = 1/\sqrt{2}$ となる条件を求めます。

$$ \frac{1}{\sqrt{1 + (\omega_c \tau)^2}} = \frac{1}{\sqrt{2}} $$

両辺の分母を比較すると $1 + (\omega_c \tau)^2 = 2$ 、すなわち $\omega_c \tau = 1$ が得られます。したがって、遮断角周波数は次のようになります。

$$ \omega_c = \frac{1}{\tau} = \frac{1}{RC} $$

周波数 $f$ に変換すると、よく知られた公式が導かれます。

$$ \boxed{f_c = \frac{1}{2\pi RC}} $$

たとえば $R = 1\,\text{k}\Omega$、$C = 0.1\,\mu\text{F}$ のとき、$f_c = 1/(2\pi \times 10^3 \times 10^{-7}) \approx 1{,}592\,\text{Hz}$ となります。約 1.6 kHz 以下の信号はほぼそのまま通過し、それ以上の信号は徐々に減衰していきます。

位相特性

伝達関数の位相(入力に対する出力の位相ずれ)も重要な情報です。

$$ \angle H(j\omega) = -\arctan(\omega\tau) $$

  • $\omega \to 0$ のとき位相は $0°$(低周波ではほぼ遅れなし)
  • $\omega = \omega_c$ のとき位相は $-45°$(遮断周波数でちょうど $-45°$)
  • $\omega \to \infty$ のとき位相は $-90°$ に漸近(高周波では最大 $90°$ の遅れ)

位相が負であることは、出力が入力に対して時間的に遅れていることを意味します。これはコンデンサの充放電に時間がかかるためで、物理的に直感に合います。

RCローパスフィルタの特性がわかったところで、次は逆の特性 — 高い周波数を通過させるハイパスフィルタを見てみましょう。実は、素子の接続を入れ替えるだけで実現できます。

1次RCハイパスフィルタ

回路構成と直感

RCハイパスフィルタは、ローパスフィルタと同じ $R$ と $C$ を使いますが、出力を抵抗の両端電圧から取り出す点が異なります。つまり、コンデンサが入力側に直列に入り、抵抗が接地側に接続される構成です。

直感的に理解するために、先ほどと同じインピーダンスの議論を使いましょう。低周波ではコンデンサのインピーダンス $Z_C = 1/(j\omega C)$ が大きいので、入力電圧のほとんどがコンデンサに吸い取られ、抵抗にかかる電圧(出力)は小さくなります。高周波では $Z_C$ が小さくなり、コンデンサはほぼ短絡になるため、入力電圧がそのまま抵抗にかかります。つまり、低周波をブロックし高周波を通す — ハイパス特性です。

伝達関数の導出

出力は抵抗 $R$ の両端電圧ですから、分圧の式は次のようになります。

$$ H(j\omega) = \frac{R}{R + Z_C} = \frac{R}{R + \dfrac{1}{j\omega C}} $$

分母・分子に $j\omega C$ を掛けて整理します。

$$ H(j\omega) = \frac{j\omega RC}{1 + j\omega RC} = \frac{j\omega\tau}{1 + j\omega\tau} $$

ラプラス領域では次のように書けます。

$$ \boxed{H(s) = \frac{s\tau}{1 + s\tau} = \frac{s}{s + 1/\tau}} $$

この伝達関数は、分子に $s$(つまり $j\omega$)がかかっています。$\omega \to 0$ で $H \to 0$(DC成分は完全に遮断)、$\omega \to \infty$ で $H \to 1$(高周波はそのまま通過)となることが、式から直ちにわかります。

振幅と位相の特性

振幅特性は次のとおりです。

$$ |H(j\omega)| = \frac{\omega\tau}{\sqrt{1 + (\omega\tau)^2}} $$

遮断周波数はローパスフィルタと全く同じ $\omega_c = 1/\tau = 1/(RC)$ です。遮断周波数で $|H| = 1/\sqrt{2}$ となることは、上式に $\omega_c\tau = 1$ を代入して確認できます。

位相特性は次のようになります。

$$ \angle H(j\omega) = \frac{\pi}{2} – \arctan(\omega\tau) = \arctan\left(\frac{1}{\omega\tau}\right) $$

  • $\omega \to 0$ のとき位相は $+90°$(出力が入力に対して $90°$ 進む)
  • $\omega = \omega_c$ のとき位相は $+45°$
  • $\omega \to \infty$ のとき位相は $0°$ に漸近

ローパスフィルタとハイパスフィルタの伝達関数を比較すると、$H_{\text{LP}} + H_{\text{HP}} = 1$ という美しい関係が成り立ちます。つまり、同じ $R$ と $C$ を使ったローパスとハイパスは、出力を足し合わせると元の入力信号を完全に復元します。これは分圧の原理から当然ですが、フィルタ設計の見通しを良くする重要な性質です。

ここまではコンデンサ $C$ を使ったRCフィルタを見てきました。次に、コンデンサの代わりにインダクタ $L$ を使ったRLフィルタを導出します。周波数に対するインピーダンスの振る舞いが逆になるため、同じフィルタ特性を得るための素子配置が入れ替わる点が面白いところです。

1次RLフィルタ

RLローパスフィルタ

RLローパスフィルタは、インダクタ $L$ が入力側に直列に入り、抵抗 $R$ が接地側に接続される構成です。出力は抵抗 $R$ の両端電圧から取り出します。

なぜこの配置でローパスになるのか、直感的に考えましょう。インダクタのインピーダンスは $Z_L = j\omega L$ ですから、RCフィルタのコンデンサとは逆に、周波数が高いほどインピーダンスが大きくなります。低周波ではインダクタはほぼ短絡($Z_L \approx 0$)なので入力がそのまま抵抗に現れますが、高周波ではインダクタが大きなインピーダンスとなって信号をブロックします。したがって、低周波を通して高周波を遮断するローパス特性が得られます。

伝達関数を導出します。出力は $R$ の両端電圧ですから、分圧の式を適用します。

$$ H(j\omega) = \frac{R}{R + j\omega L} = \frac{1}{1 + j\omega \dfrac{L}{R}} $$

ここで時定数 $\tau = L/R$ と定義すると、次の形になります。

$$ \boxed{H(j\omega) = \frac{1}{1 + j\omega\tau}, \quad \tau = \frac{L}{R}} $$

これはRCローパスフィルタの伝達関数と全く同じ形です。遮断周波数も同様に $f_c = 1/(2\pi\tau) = R/(2\pi L)$ となります。RCフィルタでは $\tau = RC$、RLフィルタでは $\tau = L/R$ — 時定数の表現こそ違いますが、数学的構造は完全に同一です。

RLハイパスフィルタ

RLハイパスフィルタは、抵抗 $R$ が入力側に直列に入り、インダクタ $L$ の両端電圧を出力として取り出す構成です。

$$ H(j\omega) = \frac{j\omega L}{R + j\omega L} = \frac{j\omega\tau}{1 + j\omega\tau} $$

こちらもRCハイパスフィルタと同じ形式で、遮断周波数は $f_c = R/(2\pi L)$ です。

RCフィルタとRLフィルタの使い分け

数学的には等価なRCフィルタとRLフィルタですが、実用上は明確な使い分けがあります。RCフィルタは、コンデンサが小型・安価・理想に近い特性を持つため、kHz 帯以下の低周波フィルタリングに広く使われます。一方、RLフィルタは、高周波(MHz 帯以上)でインダクタのインピーダンスが十分に大きくなる領域で有効です。ただし、インダクタはコンデンサに比べてサイズが大きく、寄生抵抗も無視できないため、一般的にはRCフィルタやLCフィルタが好まれます。

ここまでの1次フィルタは、減衰の傾斜が $-20\,\text{dB/decade}$(周波数が10倍になるごとに振幅が $1/10$)に限られます。もっと急峻なフィルタ特性が欲しい場合 — たとえば特定の周波数だけを選択的に通過・除去したい場合 — は、$R$、$L$、$C$ の3素子を組み合わせた2次フィルタが必要になります。

2次RLCバンドパスフィルタ

回路構成とバンドパスの原理

RLC直列バンドパスフィルタは、$R$、$L$、$C$ を直列に接続し、抵抗 $R$ の両端電圧を出力として取り出す回路です。

なぜこの回路がバンドパス特性を示すのか、直感的に考えましょう。低周波では $Z_C = 1/(j\omega C)$ が非常に大きいため、ほとんどの電圧がコンデンサに取られ、抵抗にかかる電圧は小さくなります。高周波では $Z_L = j\omega L$ が大きくなり、同様に抵抗にかかる電圧は減ります。ところが、$Z_L = -Z_C$(すなわち $\omega L = 1/(\omega C)$)となる特定の周波数では、インダクタとコンデンサのインピーダンスが互いに打ち消し合い、回路全体のインピーダンスは抵抗 $R$ だけになります。このとき電流が最大になり、抵抗の電圧降下も最大 — つまり出力が最大になります。これが直列共振であり、共振周波数の近傍だけを通過させるバンドパス特性の物理的な起源です。

伝達関数の導出

入力電圧は $R$, $L$, $C$ の直列インピーダンスの和に配分されるので、抵抗 $R$ の両端電圧を出力とする伝達関数は次のようになります。

$$ H(j\omega) = \frac{R}{R + j\omega L + \dfrac{1}{j\omega C}} $$

分母を整理するために、分母・分子に $j\omega C$ を掛けます。

$$ H(j\omega) = \frac{j\omega RC}{1 – \omega^2 LC + j\omega RC} $$

ここで、共振角周波数 $\omega_0$ とQ値(Quality Factor)を次のように定義します。

$$ \omega_0 = \frac{1}{\sqrt{LC}}, \quad Q = \frac{\omega_0 L}{R} = \frac{1}{\omega_0 RC} = \frac{1}{R}\sqrt{\frac{L}{C}} $$

$\omega_0$ は $L$ と $C$ だけで決まる固有の共振周波数であり、$Q$ は共振のシャープさ(鋭さ)を表す無次元量です。$Q$ が大きいほど共振ピークが鋭くなり、狭い帯域だけを選択的に通過させることができます。

これらのパラメータを使って伝達関数を書き直しましょう。$RC = 1/(\omega_0 Q)$ の関係を使います。まず $\omega_0 RC = 1/Q$ であることに注意して、分子と分母を $LC$ でスケーリングし直すと、最終的に次の標準形が得られます。

$$ \boxed{H(j\omega) = \frac{\dfrac{j\omega}{\omega_0 Q}}{1 – \left(\dfrac{\omega}{\omega_0}\right)^2 + \dfrac{j\omega}{\omega_0 Q}}} $$

ラプラス領域では次のように表されます。

$$ H(s) = \frac{\dfrac{s}{\omega_0 Q}}{1 + \dfrac{s}{\omega_0 Q} + \dfrac{s^2}{\omega_0^2}} = \frac{\dfrac{\omega_0}{Q} s}{s^2 + \dfrac{\omega_0}{Q} s + \omega_0^2} $$

共振周波数での振る舞い

$\omega = \omega_0$ を伝達関数に代入してみましょう。

$$ H(j\omega_0) = \frac{\dfrac{j\omega_0}{\omega_0 Q}}{1 – 1 + \dfrac{j\omega_0}{\omega_0 Q}} = \frac{j/Q}{j/Q} = 1 $$

共振周波数では伝達関数の大きさが1、つまり入力がそのまま出力に現れます。これは先ほどの直感(共振時にLとCが打ち消し合い、回路が純抵抗になる)と一致しています。

Q値と帯域幅の関係

バンドパスフィルタの重要な指標に帯域幅 $B$ があります。帯域幅は、ゲインが最大値から $-3\,\text{dB}$ だけ低下する2つの周波数 $f_1$, $f_2$ の差として定義されます。

$$ B = f_2 – f_1 $$

Q値と帯域幅の関係は次の式で表されます。

$$ \boxed{B = \frac{f_0}{Q}} $$

この関係は非常に重要です。Q値が大きいほど帯域幅が狭くなる、つまりフィルタの選択性が高くなることを意味します。たとえば $f_0 = 1\,\text{MHz}$、$Q = 100$ のバンドパスフィルタは、帯域幅がわずか $10\,\text{kHz}$ しかなく、$1\,\text{MHz}$ 付近のごく狭い範囲の信号だけを通過させます。ラジオの同調回路で放送局を選択できるのは、まさにこのQ値が十分に高いからです。

逆に、$Q$ が小さいと帯域幅が広くなり、選択性は低下しますが、通過帯域内のゲイン変動が小さくなるというトレードオフがあります。

Q値と帯域幅の導出過程をもう少し詳しく見ておきましょう。$|H(j\omega)| = 1/\sqrt{2}$ となる条件から、次の方程式が得られます。

$$ \left|1 – \left(\frac{\omega}{\omega_0}\right)^2 + \frac{j\omega}{\omega_0 Q}\right|^2 = 2\left(\frac{\omega}{\omega_0 Q}\right)^2 $$

左辺を展開すると、実部と虚部の2乗の和になります。

$$ \left(1 – \frac{\omega^2}{\omega_0^2}\right)^2 + \left(\frac{\omega}{\omega_0 Q}\right)^2 = 2\left(\frac{\omega}{\omega_0 Q}\right)^2 $$

両辺を整理して $(\omega/\omega_0 Q)^2$ を消すと、次のようになります。

$$ \left(1 – \frac{\omega^2}{\omega_0^2}\right)^2 = \left(\frac{\omega}{\omega_0 Q}\right)^2 $$

平方根をとり、正負両方の場合を考えると、2つの遮断角周波数 $\omega_1$, $\omega_2$ が得られます。これらの差から帯域幅 $\Delta\omega = \omega_2 – \omega_1 = \omega_0/Q$ が導かれ、周波数に直すと $B = f_0/Q$ が確認できます。

バンドパスフィルタの逆の特性 — 特定の周波数帯だけを除去するバンドストップフィルタも、RLC回路の素子配置を変えるだけで実現できます。

2次RLCバンドストップフィルタ

回路構成と直感

RLC直列バンドストップフィルタ(ノッチフィルタ)は、$R$、$L$、$C$ を直列に接続し、$L$ と $C$ の直列接続の両端電圧を出力として取り出す回路です。

直感的な理解はバンドパスと「補」の関係にあります。バンドパスでは抵抗の電圧を取り出しましたが、バンドストップでは残りの部分($L$ と $C$)の電圧を取り出します。共振周波数 $\omega_0$ では $L$ と $C$ のインピーダンスが打ち消し合って $Z_L + Z_C = 0$ となるため、$L$-$C$ 間の電圧はゼロになります。つまり、共振周波数で出力がゼロ — 特定の周波数だけが除去されるのです。一方、共振から離れた低周波や高周波では、$L$ と $C$ のインピーダンスの和が大きくなり、出力が回復します。

伝達関数の導出

出力は $L$ と $C$ の直列インピーダンスの電圧降下ですから、分圧の式は次のようになります。

$$ H(j\omega) = \frac{j\omega L + \dfrac{1}{j\omega C}}{R + j\omega L + \dfrac{1}{j\omega C}} $$

分子は $L$ と $C$ のインピーダンスの和です。

$$ j\omega L + \frac{1}{j\omega C} = \frac{-\omega^2 LC + 1}{j\omega C} = \frac{1 – \omega^2 LC}{j\omega C} $$

分母は先ほどのバンドパスと同じ $R + j\omega L + 1/(j\omega C)$ ですから、分母・分子に $j\omega C$ を掛けると次のようになります。

$$ H(j\omega) = \frac{1 – \omega^2 LC}{1 – \omega^2 LC + j\omega RC} $$

$\omega_0$ と $Q$ を使った標準形に書き直すと、次のとおりです。

$$ \boxed{H(j\omega) = \frac{1 – \left(\dfrac{\omega}{\omega_0}\right)^2}{1 – \left(\dfrac{\omega}{\omega_0}\right)^2 + \dfrac{j\omega}{\omega_0 Q}}} $$

ラプラス領域では次の形になります。

$$ H(s) = \frac{s^2 + \omega_0^2}{s^2 + \dfrac{\omega_0}{Q} s + \omega_0^2} $$

バンドパスとバンドストップの補関係

バンドパスフィルタの伝達関数 $H_{\text{BP}}$ とバンドストップフィルタの伝達関数 $H_{\text{BS}}$ の間には、美しい補関係が成り立ちます。

$$ H_{\text{BP}}(j\omega) + H_{\text{BS}}(j\omega) = 1 $$

これは、RLC直列回路において抵抗にかかる電圧と $L$-$C$ にかかる電圧を足すと入力電圧に等しくなるという、キルヒホッフの電圧則(KVL)そのものです。この関係を使えば、バンドパスの伝達関数から直ちにバンドストップの伝達関数を求めることができます。

共振周波数での振る舞いを確認しましょう。$\omega = \omega_0$ を代入すると分子が $1 – 1 = 0$ となるため $H(j\omega_0) = 0$ です。共振周波数の信号は完全に除去されます。一方、$\omega \to 0$ と $\omega \to \infty$ では $H \to 1$ となり、共振周波数から離れた信号はそのまま通過します。

Q値が大きいほどノッチ(凹み)が狭く深くなり、除去する周波数の精度が高まります。たとえば、50 Hz の電源ノイズだけを正確に除去したい場合は、$f_0 = 50\,\text{Hz}$ で $Q$ を十分に大きく設計します。

ここまでで各種フィルタの伝達関数が出揃いました。次に、これらの周波数特性を視覚的に表現する強力なツール — ボード線図について解説します。

ボード線図の描き方と読み方

ボード線図とは

ボード線図(Bode plot)は、伝達関数の振幅特性(ゲイン)と位相特性を、周波数の対数軸に対して描いたグラフです。1930年代にベル研究所のヘンドリック・ボードが開発したこの表現方法は、フィルタや制御系の周波数特性を視覚的に理解するための標準ツールとなっています。

ボード線図の横軸は周波数(対数スケール)、縦軸はゲイン(デシベル: dB)と位相(度)の2段構成です。対数スケールを使う理由は、フィルタの特性が数桁にわたる周波数範囲で変化するため、線形スケールでは全体像が見えなくなるからです。

ゲインのデシベル表示

伝達関数の振幅をデシベルで表すと、次のようになります。

$$ G(\omega) = 20\log_{10}|H(j\omega)| \quad [\text{dB}] $$

デシベルを使う利点は、積が和に変換されることです。複数のフィルタをカスケード接続した場合、全体のゲインは各段のゲインの積ですが、dB 表示では単純な足し算になります。これにより、複雑なシステムの解析が劇的に簡単になります。

1次ローパスフィルタのボード線図

RCローパスフィルタのゲインをデシベルで表すと次のようになります。

$$ G(\omega) = 20\log_{10}\frac{1}{\sqrt{1 + (\omega/\omega_c)^2}} = -10\log_{10}\left[1 + \left(\frac{\omega}{\omega_c}\right)^2\right] $$

この特性は、2本の漸近線(直線)で近似できます。

低周波側の漸近線($\omega \ll \omega_c$)では $(\omega/\omega_c)^2 \ll 1$ なので $G \approx 0\,\text{dB}$。水平な直線です。

高周波側の漸近線($\omega \gg \omega_c$)では $(\omega/\omega_c)^2 \gg 1$ なので次のようになります。

$$ G \approx -20\log_{10}\frac{\omega}{\omega_c} \quad [\text{dB}] $$

これは周波数が10倍(1 decade)増加するごとにゲインが $-20\,\text{dB}$ 減少する直線です。この傾きを $-20\,\text{dB/decade}$(または $-6\,\text{dB/octave}$)と呼びます。

2本の漸近線は $\omega = \omega_c$ で交わり、この点での実際のゲインは $-3\,\text{dB}$ です。漸近線との差(最大約 $3\,\text{dB}$)は、正確な曲線を描くときの修正量になります。

1次ハイパスフィルタのボード線図

ハイパスフィルタのゲインは次のとおりです。

$$ G(\omega) = 20\log_{10}\frac{\omega/\omega_c}{\sqrt{1 + (\omega/\omega_c)^2}} $$

低周波側では $+20\,\text{dB/decade}$ の傾きで上昇し、$\omega_c$ を超えると $0\,\text{dB}$ に漸近します。ローパスの鏡像のような特性です。

2次フィルタのボード線図

2次のバンドパスフィルタでは、遮断特性の傾きが $\pm 20\,\text{dB/decade}$ になります。これは、低周波側では $+20\,\text{dB/decade}$ で上昇し、中心周波数 $f_0$ でピーク($0\,\text{dB}$)に達した後、高周波側では $-20\,\text{dB/decade}$ で下降するという形です。Q値が大きいほどピークが鋭くなり、小さいほどなだらかな山になります。

2次のバンドストップフィルタでは、中心周波数 $f_0$ で深い谷(理論的には $-\infty\,\text{dB}$)が現れ、低周波側と高周波側は $0\,\text{dB}$ に漸近します。

2次のローパスフィルタ(RLC直列で $C$ の両端電圧を出力)やハイパスフィルタ($L$ の両端電圧を出力)では、減衰の傾きが $-40\,\text{dB/decade}$ となり、1次フィルタの2倍の急峻さが得られます。

ボード線図の理論がわかったところで、次にフィルタを複数段つなぐカスケード接続について考えましょう。1次フィルタの減衰が不十分な場合、複数段重ねることでより急峻な特性を得ることができます。

フィルタのカスケード接続

カスケード接続の基本原理

フィルタのカスケード(縦続)接続とは、1段目のフィルタの出力を2段目のフィルタの入力に接続し、段階的にフィルタリングを重ねる手法です。理想的な条件では、$n$ 段のカスケード接続における全体の伝達関数は、各段の伝達関数の積になります。

$$ H_{\text{total}}(j\omega) = H_1(j\omega) \cdot H_2(j\omega) \cdots H_n(j\omega) $$

デシベルで表すと、ゲインは各段の和になります。

$$ G_{\text{total}} = G_1 + G_2 + \cdots + G_n \quad [\text{dB}] $$

たとえば、同一のRCローパスフィルタを2段カスケードすると、高周波での減衰傾斜が $-40\,\text{dB/decade}$ となり、1段の $-20\,\text{dB/decade}$ よりも急峻なフィルタ特性が得られます。

インピーダンスの影響 — 理想と現実のギャップ

ここで重要な注意点があります。上の「伝達関数は各段の積」という関係は、後段の入力インピーダンスが前段の出力インピーダンスに比べて十分に大きい場合にのみ成り立ちます。

パッシブフィルタでは、この条件が必ずしも満たされません。たとえば、同じ素子値のRCローパスフィルタを2段直接カスケードすると、2段目のインピーダンスが1段目の負荷となり、1段目の特性が変わってしまいます。この現象を負荷効果(ローディング効果)と呼びます。

負荷効果を避けるには、以下のいずれかの方法を取ります。

  1. 段間にバッファ(電圧フォロワ)を挿入する — オペアンプの電圧フォロワは入力インピーダンスが非常に高く、出力インピーダンスが非常に低いため、前段と後段を電気的に分離できます。ただし、この時点でパッシブフィルタではなくアクティブフィルタになります。
  2. 段間のインピーダンス比を大きく設計する — 2段目の入力インピーダンスが1段目の出力インピーダンスの10倍以上になるように、素子値を選びます。たとえば、1段目の $R_1 = 1\,\text{k}\Omega$ なら2段目は $R_2 = 10\,\text{k}\Omega$ 以上にします。ただし、$R$ を大きくすると熱雑音が増えるというトレードオフがあります。
  3. RLC直列回路を全体で1つの2次フィルタとして設計する — カスケードの代わりに、$R$, $L$, $C$ を使った2次フィルタを直接設計する方法です。この方法なら負荷効果の問題は生じません。

実際の設計では、パッシブフィルタのカスケードは2〜3段程度にとどめ、それ以上の急峻な特性が必要な場合はアクティブフィルタを採用するのが一般的です。

いよいよ、ここまでの理論をPythonで実装して視覚的に確認しましょう。各フィルタの周波数応答(ボード線図)とステップ応答を描くことで、数式から得た直感が正しいことを目で見て実感できます。

Pythonによる周波数応答の可視化

1次RC/RLフィルタのボード線図

まず、1次RCローパスフィルタとハイパスフィルタのボード線図(ゲインと位相)を描きます。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ設定
R = 1e3          # 1 kΩ
C = 0.1e-6       # 0.1 μF
tau = R * C      # 時定数
fc = 1 / (2 * np.pi * tau)  # 遮断周波数

# 周波数範囲(対数スケール)
f = np.logspace(1, 6, 1000)  # 10 Hz ~ 1 MHz
omega = 2 * np.pi * f

# 1次RCローパスフィルタの伝達関数
H_lp = 1 / (1 + 1j * omega * tau)

# 1次RCハイパスフィルタの伝達関数
H_hp = 1j * omega * tau / (1 + 1j * omega * tau)

# ゲイン [dB] と位相 [deg]
gain_lp = 20 * np.log10(np.abs(H_lp))
phase_lp = np.degrees(np.angle(H_lp))
gain_hp = 20 * np.log10(np.abs(H_hp))
phase_hp = np.degrees(np.angle(H_hp))

# ボード線図の描画
fig, axes = plt.subplots(2, 1, figsize=(10, 8), sharex=True)

# ゲイン特性
axes[0].semilogx(f, gain_lp, 'b-', linewidth=2, label='Low-Pass')
axes[0].semilogx(f, gain_hp, 'r-', linewidth=2, label='High-Pass')
axes[0].axvline(fc, color='gray', linestyle='--', alpha=0.7, label=f'$f_c$ = {fc:.0f} Hz')
axes[0].axhline(-3, color='gray', linestyle=':', alpha=0.5, label='-3 dB')
axes[0].set_ylabel('Gain [dB]')
axes[0].set_title(f'Bode Plot of 1st-Order RC Filters (R={R/1e3:.0f} kΩ, C={C*1e6:.1f} μF)')
axes[0].legend()
axes[0].grid(True, which='both', alpha=0.3)
axes[0].set_ylim(-40, 5)

# 位相特性
axes[1].semilogx(f, phase_lp, 'b-', linewidth=2, label='Low-Pass')
axes[1].semilogx(f, phase_hp, 'r-', linewidth=2, label='High-Pass')
axes[1].axvline(fc, color='gray', linestyle='--', alpha=0.7)
axes[1].axhline(-45, color='b', linestyle=':', alpha=0.3)
axes[1].axhline(45, color='r', linestyle=':', alpha=0.3)
axes[1].set_ylabel('Phase [deg]')
axes[1].set_xlabel('Frequency [Hz]')
axes[1].legend()
axes[1].grid(True, which='both', alpha=0.3)
axes[1].set_ylim(-100, 100)

plt.tight_layout()
plt.savefig('rc_filter_bode.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"遮断周波数 fc = {fc:.1f} Hz")
print(f"時定数 τ = {tau*1e3:.3f} ms")

上のグラフから、以下の重要な特徴が読み取れます。

  1. ローパスフィルタ(青線) は、遮断周波数 $f_c \approx 1{,}592\,\text{Hz}$ より低い領域でゲインがほぼ $0\,\text{dB}$(平坦)であり、$f_c$ を超えると $-20\,\text{dB/decade}$ の傾きで直線的に減衰しています。これは理論で予測した漸近線の振る舞いと完全に一致しています。
  2. ハイパスフィルタ(赤線) は、ローパスの鏡像のような特性を示し、$f_c$ 以下では $+20\,\text{dB/decade}$ の傾きで上昇し、$f_c$ 以上で $0\,\text{dB}$ に収束しています。
  3. 遮断周波数(灰色の縦破線)において、両フィルタのゲインがちょうど $-3\,\text{dB}$ で交わっています。これは $|H(j\omega_c)| = 1/\sqrt{2}$ の定義通りです。
  4. 位相特性では、ローパスフィルタが $0° \to -90°$ に変化し、ハイパスフィルタが $+90° \to 0°$ に変化しています。$f_c$ ではそれぞれ $-45°$ と $+45°$ で、理論と一致しています。

2次RLCバンドパス/バンドストップフィルタのボード線図

次に、Q値を変えた場合のバンドパスフィルタとバンドストップフィルタの特性を比較します。

import numpy as np
import matplotlib.pyplot as plt

# 共振周波数の設定
f0 = 1e3         # 中心周波数 1 kHz
omega0 = 2 * np.pi * f0

# Q値を変えて比較
Q_values = [1, 5, 20]
colors = ['#2196F3', '#FF9800', '#4CAF50']

# 周波数範囲
f = np.logspace(1, 5, 2000)  # 10 Hz ~ 100 kHz
omega = 2 * np.pi * f

fig, axes = plt.subplots(2, 2, figsize=(14, 10))

for Q, color in zip(Q_values, colors):
    # 正規化周波数
    s_norm = 1j * omega / omega0

    # バンドパスフィルタの伝達関数
    H_bp = (s_norm / Q) / (1 + s_norm / Q + s_norm**2)

    # バンドストップフィルタの伝達関数
    H_bs = (1 + s_norm**2) / (1 + s_norm / Q + s_norm**2)

    # ゲインと位相
    gain_bp = 20 * np.log10(np.abs(H_bp))
    phase_bp = np.degrees(np.angle(H_bp))
    gain_bs = 20 * np.log10(np.abs(H_bs))
    phase_bs = np.degrees(np.angle(H_bs))

    # 帯域幅の計算
    bw = f0 / Q

    # バンドパス ゲイン
    axes[0, 0].semilogx(f, gain_bp, color=color, linewidth=2,
                         label=f'Q={Q} (BW={bw:.0f} Hz)')
    # バンドパス 位相
    axes[1, 0].semilogx(f, phase_bp, color=color, linewidth=2, label=f'Q={Q}')
    # バンドストップ ゲイン
    axes[0, 1].semilogx(f, gain_bs, color=color, linewidth=2, label=f'Q={Q}')
    # バンドストップ 位相
    axes[1, 1].semilogx(f, phase_bs, color=color, linewidth=2, label=f'Q={Q}')

# バンドパス ゲイン設定
axes[0, 0].set_title(f'Bandpass Filter ($f_0$={f0/1e3:.0f} kHz)')
axes[0, 0].set_ylabel('Gain [dB]')
axes[0, 0].axhline(-3, color='gray', linestyle=':', alpha=0.5)
axes[0, 0].legend()
axes[0, 0].grid(True, which='both', alpha=0.3)
axes[0, 0].set_ylim(-40, 5)

# バンドパス 位相設定
axes[1, 0].set_ylabel('Phase [deg]')
axes[1, 0].set_xlabel('Frequency [Hz]')
axes[1, 0].legend()
axes[1, 0].grid(True, which='both', alpha=0.3)

# バンドストップ ゲイン設定
axes[0, 1].set_title(f'Band-Stop Filter ($f_0$={f0/1e3:.0f} kHz)')
axes[0, 1].set_ylabel('Gain [dB]')
axes[0, 1].axhline(-3, color='gray', linestyle=':', alpha=0.5)
axes[0, 1].legend()
axes[0, 1].grid(True, which='both', alpha=0.3)
axes[0, 1].set_ylim(-40, 5)

# バンドストップ 位相設定
axes[1, 1].set_ylabel('Phase [deg]')
axes[1, 1].set_xlabel('Frequency [Hz]')
axes[1, 1].legend()
axes[1, 1].grid(True, which='both', alpha=0.3)

plt.suptitle('2nd-Order RLC Filters: Effect of Q Factor', fontsize=14, y=1.01)
plt.tight_layout()
plt.savefig('rlc_filter_bode.png', dpi=150, bbox_inches='tight')
plt.show()

上のグラフから、Q値がフィルタ特性に与える影響を明確に読み取ることができます。

  1. バンドパスフィルタ(左列) では、Q値が大きいほどピークが鋭くなり、帯域幅が狭くなっています。$Q = 1$ のときは非常にブロードな特性ですが、$Q = 20$ になると鋭いナイフのようなピークになります。帯域幅の値($B = f_0/Q$)を見ると、$Q = 1$ で $1{,}000\,\text{Hz}$、$Q = 5$ で $200\,\text{Hz}$、$Q = 20$ で $50\,\text{Hz}$ と、理論通りにQに反比例しています。
  2. バンドストップフィルタ(右列) では、中心周波数 $f_0 = 1\,\text{kHz}$ で深い谷(ノッチ)が形成されています。Q値が大きいほどノッチが狭くなり、除去する周波数帯域がピンポイントになります。Q値が小さいと広い帯域にわたって減衰するため、除去したい周波数だけでなく近傍の有用な信号まで影響を受けてしまいます。
  3. 位相特性を見ると、バンドパスでは中心周波数で位相が $0°$ を通過し、低周波から高周波にかけて $+90° \to 0° \to -90°$ と変化しています。バンドストップでは逆に、中心周波数付近で急激な位相変化が起きています。Q値が大きいほど位相の変化が急峻になっており、高いQ値は位相特性にも大きな影響を与えることがわかります。

カスケード接続の効果

1次RCローパスフィルタを複数段カスケード接続したときの特性変化を確認します。ここでは段間の負荷効果を無視した理想的な場合を示します。

import numpy as np
import matplotlib.pyplot as plt

# パラメータ
R = 1e3
C = 0.1e-6
tau = R * C
fc = 1 / (2 * np.pi * tau)

# 周波数範囲
f = np.logspace(1, 6, 1000)
omega = 2 * np.pi * f

# 1次ローパスの伝達関数
H1 = 1 / (1 + 1j * omega * tau)

# カスケード接続(理想的: 負荷効果なし)
n_stages = [1, 2, 3, 4]
colors = ['#2196F3', '#FF9800', '#4CAF50', '#E91E63']

fig, axes = plt.subplots(2, 1, figsize=(10, 8), sharex=True)

for n, color in zip(n_stages, colors):
    H_cascade = H1 ** n
    gain = 20 * np.log10(np.abs(H_cascade))
    phase = np.degrees(np.angle(H_cascade))

    # -3 dB 遮断周波数の計算(理論値)
    # |H|^n = 1/sqrt(2) → |H| = 2^{-1/(2n)}
    # 1/sqrt(1 + (omega*tau)^2) = 2^{-1/(2n)}
    # (omega*tau)^2 = 2^{1/n} - 1
    fc_n = fc * np.sqrt(2**(1/n) - 1)

    axes[0].semilogx(f, gain, color=color, linewidth=2,
                      label=f'{n}-stage ($f_c$={fc_n:.0f} Hz, slope={-20*n} dB/dec)')
    axes[1].semilogx(f, phase, color=color, linewidth=2, label=f'{n}-stage')

axes[0].axhline(-3, color='gray', linestyle=':', alpha=0.5, label='-3 dB')
axes[0].set_ylabel('Gain [dB]')
axes[0].set_title('Cascade of 1st-Order RC Low-Pass Filters (Ideal)')
axes[0].legend(fontsize=9)
axes[0].grid(True, which='both', alpha=0.3)
axes[0].set_ylim(-80, 5)

axes[1].set_ylabel('Phase [deg]')
axes[1].set_xlabel('Frequency [Hz]')
axes[1].legend()
axes[1].grid(True, which='both', alpha=0.3)

plt.tight_layout()
plt.savefig('cascade_filter_bode.png', dpi=150, bbox_inches='tight')
plt.show()

上のグラフから、カスケード接続の効果が明瞭に見て取れます。

  1. 減衰傾斜の増加: 1段で $-20\,\text{dB/decade}$ の傾斜が、2段で $-40$、3段で $-60$、4段で $-80\,\text{dB/decade}$ と段数に比例して急峻になっています。不要な周波数成分を強力に減衰させたい場合にカスケード接続が有効であることがわかります。
  2. 遮断周波数の低下: 段数が増えるほど、全体の $-3\,\text{dB}$ 遮断周波数が低下しています。これは、各段で $-3\,\text{dB}$ 未満の減衰が蓄積するためです。$n$ 段の実効遮断周波数は $f_{c,n} = f_c\sqrt{2^{1/n} – 1}$ で与えられ、段数が増えるほど元の $f_c$ から離れていきます。
  3. 位相遅れの蓄積: 位相遅れも段数に比例して大きくなり、1段で最大 $-90°$ のところが、4段では $-360°$ まで達しています。帰還ループに含まれるフィルタでは、この位相遅れが発振の原因になりうるため注意が必要です。

Pythonによるステップ応答の可視化

周波数応答(ボード線図)はフィルタの定常状態での特性を示しますが、過渡的な振る舞い — 急激な入力変化に対する応答 — も設計上重要です。ここでは、各フィルタのステップ応答をPythonで計算・描画します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# ========================================
# 1次フィルタのステップ応答
# ========================================
R = 1e3
C = 0.1e-6
tau = R * C

# 時間軸
t = np.linspace(0, 5 * tau, 1000)

# RC ローパスのステップ応答(解析解)
y_lp = 1 - np.exp(-t / tau)

# RC ハイパスのステップ応答(解析解)
y_hp = np.exp(-t / tau)

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# ローパス
axes[0].plot(t * 1e3, y_lp, 'b-', linewidth=2, label='Low-Pass')
axes[0].axhline(1 - np.exp(-1), color='gray', linestyle='--', alpha=0.5,
                label=f'$1-e^{{-1}}$ ≈ {1-np.exp(-1):.3f}')
axes[0].axvline(tau * 1e3, color='gray', linestyle=':', alpha=0.5, label=f'τ = {tau*1e3:.3f} ms')
axes[0].set_xlabel('Time [ms]')
axes[0].set_ylabel('Output Voltage / $V_0$')
axes[0].set_title('Step Response: 1st-Order RC Low-Pass')
axes[0].legend()
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim(-0.05, 1.1)

# ハイパス
axes[1].plot(t * 1e3, y_hp, 'r-', linewidth=2, label='High-Pass')
axes[1].axhline(np.exp(-1), color='gray', linestyle='--', alpha=0.5,
                label=f'$e^{{-1}}$ ≈ {np.exp(-1):.3f}')
axes[1].axvline(tau * 1e3, color='gray', linestyle=':', alpha=0.5, label=f'τ = {tau*1e3:.3f} ms')
axes[1].set_xlabel('Time [ms]')
axes[1].set_ylabel('Output Voltage / $V_0$')
axes[1].set_title('Step Response: 1st-Order RC High-Pass')
axes[1].legend()
axes[1].grid(True, alpha=0.3)
axes[1].set_ylim(-0.05, 1.1)

plt.tight_layout()
plt.savefig('step_response_1st.png', dpi=150, bbox_inches='tight')
plt.show()

ステップ応答の結果から、時間領域でのフィルタの振る舞いが直感的に理解できます。

  1. ローパスフィルタ は、ステップ入力に対して指数関数的に立ち上がります。$t = \tau$ で最終値の約 $63.2\%$ に達し、$t = 5\tau$ でほぼ $99.3\%$ に到達します。この「なまし」効果こそがローパスフィルタの本質であり、急激な変化を平滑化する働きを視覚的に確認できます。
  2. ハイパスフィルタ は、ステップ入力の瞬間に出力が最大値に跳ね上がり、その後指数関数的に減衰してゼロに戻ります。これは、ハイパスフィルタが「変化分」だけを通す微分的な性質を持つことを示しています。DC(一定値)には全く応答しません。

次に、2次RLCフィルタのステップ応答をQ値を変えて比較します。

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# ========================================
# 2次RLCフィルタのステップ応答
# ========================================
f0 = 1e3
omega0 = 2 * np.pi * f0

Q_values = [0.5, 0.707, 1, 5, 20]
colors = ['#9C27B0', '#2196F3', '#FF9800', '#4CAF50', '#E91E63']

t = np.linspace(0, 10e-3, 2000)  # 0 ~ 10 ms

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

for Q, color in zip(Q_values, colors):
    # バンドパスフィルタ: H(s) = (omega0/Q * s) / (s^2 + omega0/Q * s + omega0^2)
    num_bp = [omega0 / Q, 0]
    den_bp = [1, omega0 / Q, omega0**2]
    sys_bp = signal.TransferFunction(num_bp, den_bp)
    t_bp, y_bp = signal.step(sys_bp, T=t)

    # 2次ローパスフィルタ: H(s) = omega0^2 / (s^2 + omega0/Q * s + omega0^2)
    num_lp2 = [omega0**2]
    den_lp2 = [1, omega0 / Q, omega0**2]
    sys_lp2 = signal.TransferFunction(num_lp2, den_lp2)
    t_lp2, y_lp2 = signal.step(sys_lp2, T=t)

    axes[0].plot(t_lp2 * 1e3, y_lp2, color=color, linewidth=1.5, label=f'Q={Q}')
    axes[1].plot(t_bp * 1e3, y_bp, color=color, linewidth=1.5, label=f'Q={Q}')

# 2次ローパスのステップ応答
axes[0].axhline(1.0, color='gray', linestyle=':', alpha=0.3)
axes[0].set_xlabel('Time [ms]')
axes[0].set_ylabel('Output')
axes[0].set_title(f'Step Response: 2nd-Order Low-Pass ($f_0$={f0/1e3:.0f} kHz)')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

# バンドパスのステップ応答
axes[1].axhline(0, color='gray', linestyle=':', alpha=0.3)
axes[1].set_xlabel('Time [ms]')
axes[1].set_ylabel('Output')
axes[1].set_title(f'Step Response: Bandpass ($f_0$={f0/1e3:.0f} kHz)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('step_response_2nd.png', dpi=150, bbox_inches='tight')
plt.show()

2次フィルタのステップ応答から、Q値が過渡特性に与える劇的な影響が読み取れます。

  1. 2次ローパスフィルタ(左) のステップ応答は、Q値によって全く異なる振る舞いを示します。$Q = 0.5$(過減衰)では振動なくゆっくり最終値に収束しますが、立ち上がりが遅くなっています。$Q = 1/\sqrt{2} \approx 0.707$ はバターワース特性と呼ばれ、オーバーシュートなしで最速の立ち上がりを実現する最適なQ値です。$Q > 1$ では共振によるオーバーシュートと振動が現れ、$Q = 20$ では長時間にわたるリンギングが生じています。
  2. バンドパスフィルタ(右) のステップ応答は、中心周波数の正弦波状の振動が指数関数的に減衰する形です。$Q$ が大きいほど振動の減衰が遅く、長時間にわたって振動が続きます。これは、高いQ値のバンドパスフィルタがエネルギーを蓄えて長く振動する共振器として振る舞うことを反映しています。
  3. Q値のトレードオフ が明確に見えます。周波数選択性を高めるために $Q$ を大きくすると、ステップ応答の整定時間が長くなります。つまり、「周波数の精度」と「応答の速さ」はトレードオフの関係にあります。フィルタ設計では、用途に応じてこのバランスを取る必要があります。

フィルタ設計の実践的な計算例

ここまでの理論を、具体的な数値例で確認しましょう。設計仕様からフィルタの素子値を逆算する過程を示します。

例1: オーディオ用RCローパスフィルタ

仕様: 可聴域($20\,\text{Hz}$〜$20\,\text{kHz}$)の信号を通し、それ以上の超音波成分を減衰させるローパスフィルタを設計します。遮断周波数 $f_c = 20\,\text{kHz}$ とします。

$R = 1\,\text{k}\Omega$ を選定すると、コンデンサの値は次のように求められます。

$$ C = \frac{1}{2\pi R f_c} = \frac{1}{2\pi \times 10^3 \times 2 \times 10^4} = \frac{1}{4\pi \times 10^7} $$

計算すると $C \approx 7.96\,\text{nF}$ です。標準的な部品値で最も近い $C = 8.2\,\text{nF}$ を選択すると、実際の遮断周波数は次のようになります。

$$ f_c = \frac{1}{2\pi \times 10^3 \times 8.2 \times 10^{-9}} \approx 19{,}411\,\text{Hz} $$

仕様の $20\,\text{kHz}$ からのずれはわずか $3\%$ であり、実用上は問題ありません。このように、パッシブフィルタの設計では標準部品値への丸めが必要になりますが、1次フィルタでは素子値に対する感度が低いため、多少のずれは許容されます。

例2: RLC バンドパスフィルタ(ラジオ同調回路)

仕様: AM放送帯(例えば $f_0 = 1\,\text{MHz}$)の特定局を選択するバンドパスフィルタを設計します。AM放送の帯域幅は $10\,\text{kHz}$($\pm 5\,\text{kHz}$)ですから、$B = 10\,\text{kHz}$ とし、$Q = f_0/B = 100$ とします。

$L = 100\,\mu\text{H}$ を選定すると、$C$ と $R$ は次のように求まります。

$$ C = \frac{1}{\omega_0^2 L} = \frac{1}{(2\pi \times 10^6)^2 \times 100 \times 10^{-6}} \approx 253\,\text{pF} $$

$$ R = \frac{\omega_0 L}{Q} = \frac{2\pi \times 10^6 \times 100 \times 10^{-6}}{100} \approx 6.28\,\Omega $$

$R$ の値が非常に小さいことに注目してください。高いQ値を実現するには抵抗を極めて小さくする必要がありますが、実際のインダクタには巻線抵抗(寄生抵抗)が存在するため、$Q = 100$ を超えるフィルタをパッシブ素子だけで実現するのは困難です。これがアクティブフィルタや水晶振動子が使われる理由の一つです。

例3: 50 Hz ノッチフィルタ

仕様: 電源ノイズ(50 Hz)を除去するバンドストップフィルタを設計します。$f_0 = 50\,\text{Hz}$、$Q = 10$(ノッチ幅 $5\,\text{Hz}$)とします。

$C = 1\,\mu\text{F}$ を選定すると、次のようになります。

$$ L = \frac{1}{\omega_0^2 C} = \frac{1}{(2\pi \times 50)^2 \times 10^{-6}} \approx 10.1\,\text{H} $$

$L \approx 10\,\text{H}$ という値は非常に大きく、現実的な部品ではありません。低周波のフィルタでは必要なインダクタンスが巨大になるため、パッシブRLCフィルタよりもオペアンプを使ったアクティブフィルタ(ツインT型ノッチフィルタなど)が実用的です。このように、パッシブフィルタには物理的制約があり、素子値が現実的な範囲に収まるかどうかの検討は設計プロセスの重要な一部です。

まとめ

本記事では、パッシブフィルタ回路の理論を体系的に解説しました。

  • 1次RCローパスフィルタ — 伝達関数 $H(j\omega) = 1/(1 + j\omega RC)$ を導出し、遮断周波数 $f_c = 1/(2\pi RC)$ が電力半減点であることを確認しました。コンデンサのインピーダンスが周波数依存であることが、ローパス特性の物理的な起源です
  • 1次RCハイパスフィルタ — $H(j\omega) = j\omega RC/(1 + j\omega RC)$ であり、ローパスと「補」の関係 $H_{\text{LP}} + H_{\text{HP}} = 1$ が成り立つことを示しました
  • 1次RLフィルタ — 時定数 $\tau = L/R$ を用いると、RCフィルタと数学的に同一の構造になることを確認しました。使い分けは主に周波数帯域と素子の実装上の制約に依存します
  • 2次RLCバンドパスフィルタ — 共振周波数 $\omega_0 = 1/\sqrt{LC}$ とQ値 $Q = (1/R)\sqrt{L/C}$ が特性を決定し、帯域幅が $B = f_0/Q$ で与えられることを導出しました
  • 2次RLCバンドストップフィルタ — バンドパスとの補関係 $H_{\text{BP}} + H_{\text{BS}} = 1$ を利用して伝達関数を導出し、共振周波数で出力がゼロになることを確認しました
  • ボード線図 — ゲインのデシベル表示と対数周波数軸により、広い周波数範囲のフィルタ特性を漸近線で直感的に理解できることを示しました
  • カスケード接続 — 段数に比例して減衰傾斜が急峻になりますが、負荷効果と遮断周波数の低下に注意が必要です
  • ステップ応答 — 時間領域の解析により、Q値が過渡特性(オーバーシュート、整定時間)に与える影響を明らかにしました

パッシブフィルタはすべてのフィルタ理論の出発点であり、ここで学んだ伝達関数、遮断周波数、Q値、ボード線図の概念は、アクティブフィルタやデジタルフィルタの設計にもそのまま活きます。特に、$s$ 領域の伝達関数は、$z$ 変換を介してデジタルフィルタ(IIRフィルタ)の設計に直結する重要な橋渡しとなります。

次のステップとして、以下の記事も参考にしてください。