結合共振器型バンドパスフィルタの設計理論と実装

結合共振器型バンドパスフィルタ — 構成要素の概念図

携帯電話の受信フロントエンド、基地局の入力段、レーダーの中間周波部 — これらに共通して必要なのが「欲しい周波数帯だけを通し、それ以外を強く減衰させる」フィルタです。たとえば 5G の n78 バンド(3.4〜3.6 GHz)を使う基地局では、すぐ隣の周波数を使う別事業者の強力な信号を 50 dB 以上叩き落としつつ、自帯域内の挿入損失は 1 dB 以下に抑えたい、といった要求が当たり前に出てきます。このような鋭い選択性を実現する標準的な手段が、複数の共振器を弱く結合させて作る「結合共振器型バンドパスフィルタ(coupled-resonator bandpass filter)」です。

問題は「では共振器をどれくらいの強さで結合させればよいのか」「入出力ポートとの結合はどう決めるのか」が一見すると見当もつかないことです。共振器を 4 個並べたとして、隣り合う結合 $k_{12}, k_{23}, k_{34}$ と入出力の外部 $Q$ を、闇雲に試行錯誤で探すのは現実的ではありません。ここで威力を発揮するのが「ローパスプロトタイプ(low-pass prototype)」という考え方です。一度だけ正規化されたローパスフィルタの素子値 $g_i$ を表から引いてくれば、どんな中心周波数・帯域幅のバンドパスフィルタでも、$g_i$ から機械的に結合係数と外部 $Q$ を計算できるのです。

この設計法を理解すると、次のような場面で見通しが格段に良くなります。

  • 無線通信: デュプレクサやチャネルフィルタの設計。送信・受信帯域を分離する空洞フィルタや誘電体共振器フィルタは、すべてこの結合共振器理論で設計されます
  • マイクロ波通信システム: 入力マルチプレクサ(IMUX)・出力マルチプレクサ(OMUX)のチャネルフィルタ。低損失と急峻なスカート特性を両立するために高次の結合共振器フィルタが使われます
  • 計測器: スペクトラムアナライザの分解能帯域幅フィルタや、プリセレクタ
  • EMC・フィルタ設計一般: 帯域阻止フィルタやダイプレクサも同じインバータの枠組みで設計できます

本記事の内容

  • ローパスプロトタイプ素子値 $g_i$ と Chebyshev 特性の意味
  • 帯域通過変換(周波数マッピング)の導出
  • インピーダンス/アドミタンスインバータ(K/J インバータ)の役割と等価変換
  • 結合係数 $k_{i,i+1} = \mathrm{FBW}/\sqrt{g_i g_{i+1}}$ と外部 $Q_e = g_0 g_1 / \mathrm{FBW}$ の導出
  • 3〜4 段 Chebyshev バンドパスフィルタの設計例
  • 共振器を等価 LC、インバータを ABCD 行列で表したカスケード計算
  • Python による $S_{21}$/$S_{11}$ の挿入損失・帯域内リップル・遷移特性の検証

前提知識

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

結合共振器フィルタとは

イメージとしては、ブランコがいくつも横一列に並んでいて、隣り合うブランコがゆるい紐で繋がれている状況を思い浮かべてください。一番端のブランコを軽く揺らすと、紐を通じてエネルギーが少しずつ隣のブランコへ伝わり、最終的に反対側の端のブランコまで届きます。ただし、各ブランコは自分の固有周期(共振周波数)でしか大きく揺れません。入力周波数がブランコの固有周期に近いときだけエネルギーが効率よく端から端まで伝わり、外れていると伝わらない — これがバンドパスフィルタの動作そのものです。

結合共振器型バンドパスフィルタは、この「ゆるく繋がった共振器の列」を電気回路で実現したものです。各共振器は、ある中心周波数 $f_0$ で共振する LC 回路(あるいは空洞、誘電体共振器、マイクロストリップの半波長線路など)です。隣り合う共振器どうしは弱く結合し、両端の共振器は入出力ポート(典型的には $50\,\Omega$)に結合します。

ここで決めるべき設計パラメータは 2 種類しかありません。

  1. 共振器間の結合の強さ — 隣り合う共振器 $i$ と $i+1$ をどれだけ強く結ぶか。これを 結合係数 $k_{i,i+1}$ で表します
  2. 入出力ポートとの結合の強さ — 端の共振器が外部回路にどれだけエネルギーを漏らすか。これを 外部 $Q$(external quality factor)$Q_e$ で表します

驚くべきことに、これら全てが「ローパスプロトタイプ素子値 $g_i$」と「比帯域 $\mathrm{FBW}$」というたった 2 種類の入力から計算で決まります。$N$ 段のフィルタなら、$N$ 個の共振器、$N-1$ 個の結合係数、入出力 2 つの外部 $Q$ を設計すればよく、それぞれに対して閉じた式が存在するのです。

まずはその出発点である「ローパスプロトタイプ」が何者なのかを押さえましょう。

ローパスプロトタイプと素子値 $g_i$

Chebyshevローパスプロトタイプ素子値 gi (リップル0.1dB)

このグラフは N=2〜5 それぞれの Chebyshev プロトタイプ素子値 $g_i$ を示しています。奇数段(N=3, 5)では $g_1 = g_N$、$g_0 = g_{N+1} = 1$ という対称性が現れ、偶数段では終端 $g_{N+1} > 1$ となって両端インピーダンスが一致しないことが確認できます。また段数が増えると各素子値も増大し、それが後の結合係数・外部Qの数値に直接反映されます。

なぜ「ローパス」から出発するのか

バンドパスフィルタをいきなり設計しようとすると、中心周波数・帯域幅・段数・リップルといった多くのパラメータが絡み合って手に負えません。そこでフィルタ理論では、まず「角周波数 1 rad/s で遮断する、ソース抵抗 $1\,\Omega$ の正規化されたローパスフィルタ」という、極限まで単純化した雛形を考えます。これが ローパスプロトタイプ です。

このプロトタイプは、図のようにインダクタとキャパシタが交互に並ぶ「はしご型回路」で表されます。素子値は $g_0, g_1, g_2, \dots, g_N, g_{N+1}$ と番号付けされ、$g_0$ はソース側のコンダクタンス(または抵抗)、$g_1 \sim g_N$ が直列インダクタンスまたは並列キャパシタンス、$g_{N+1}$ が負荷側の抵抗(またはコンダクタンス)を表す、無次元の正規化値です。

重要なのは、このプロトタイプの素子値 $g_i$ が、フィルタの 特性(応答の形)と段数 $N$ だけ で一意に決まることです。中心周波数や帯域幅はまだ一切関係しません。中心周波数や帯域幅は、後で行う「周波数変換」で初めて織り込まれます。この役割分担こそが、フィルタ設計を見通しよくする鍵です。

Chebyshev 特性の素子値

応答の形にはいくつか定番があります。最大平坦(Butterworth)特性は通過帯域内で最も平坦ですが、遮断の鋭さに劣ります。本記事では、通過帯域内で一定の高さのリップル(さざ波)を許す代わりに、より急峻な遮断特性を得る Chebyshev(等リップル)特性 を扱います。隣接チャネルの抑圧が厳しいマイクロ波通信では、この Chebyshev 特性が最もよく使われます。

通過帯域リップル $L_{\mathrm{Ar}}$ [dB] を許容する $N$ 段 Chebyshev ローパスプロトタイプの素子値は、次の閉じた式(再帰式)で計算できます。まずリップルから補助変数を定めます。

$$ \beta = \ln\!\left[\coth\!\left(\frac{L_{\mathrm{Ar}}}{17.37}\right)\right] $$

ここで $17.37 = 40/\ln 10$ という定数で、デシベル表記のリップルを自然対数ベースに変換するためのものです。続いて、

$$ \gamma = \sinh\!\left(\frac{\beta}{2N}\right) $$

を計算します。$\gamma$ は段数 $N$ とリップルの大きさを織り込んだ「スケール因子」だと思ってください。次に、各段の補助量 $a_k, b_k$ を定義します。

$$ a_k = \sin\!\left[\frac{(2k-1)\pi}{2N}\right], \quad k = 1, 2, \dots, N $$

$a_k$ は Chebyshev 多項式の極の位置に対応する正弦項です。さらに、

$$ b_k = \gamma^2 + \sin^2\!\left(\frac{k\pi}{N}\right), \quad k = 1, 2, \dots, N $$

を用意します。これらを使うと、素子値は次の再帰式で順に求まります。最初の素子は、

$$ g_1 = \frac{2 a_1}{\gamma} $$

であり、2 段目以降は前の素子値 $g_{k-1}$ を使って、

$$ g_k = \frac{4 a_{k-1} a_k}{b_{k-1}\, g_{k-1}}, \quad k = 2, 3, \dots, N $$

と計算します。$a_{k-1} a_k$ を $b_{k-1} g_{k-1}$ で割るというこの再帰が、Chebyshev 多項式の係数関係を素子値に翻訳しているわけです。最後に、負荷側の終端 $g_{N+1}$ は段数 $N$ の偶奇で場合分けされます。

$$ g_{N+1} = \begin{cases} 1 & (N \text{ が奇数}) \\[4pt] \coth^2\!\left(\dfrac{\beta}{4}\right) & (N \text{ が偶数}) \end{cases} $$

$N$ が偶数のとき終端が $1$ にならないのは、Chebyshev 特性では偶数段だと両端のインピーダンスを完全には整合できず、$\omega = 0$ で反射が残るためです。奇数段なら両端とも整合し $g_{N+1} = 1$ となります。

この再帰式は実装が容易なので、後ほど Python でそのまま関数化します。これで「応答の形」を担うプロトタイプが手に入りました。次は、この正規化されたローパスを、目的の中心周波数・帯域幅を持つバンドパスへ「引き伸ばす」周波数変換を導きましょう。

ローパスからバンドパスへの周波数変換

周波数マッピングの考え方

ローパスプロトタイプは正規化角周波数 $\Omega$(プライム付きの $\omega$ として $\omega’$ とも書きます)の関数として応答が定義されています。遮断は $\Omega = 1$ で起こり、$\Omega = 0$(直流)が通過帯域の中心です。これを、実際の角周波数 $\omega$ における中心 $\omega_0$、帯域 $\omega_2 – \omega_1$ のバンドパスへ写したい。やりたいことは「ローパスの通過帯域 $-1 \le \Omega \le 1$ を、バンドパスの通過帯域 $\omega_1 \le \omega \le \omega_2$ にぴったり対応させる」ことです。

そのための写像が次の式です。

$$ \Omega = \frac{1}{\mathrm{FBW}}\left(\frac{\omega}{\omega_0} – \frac{\omega_0}{\omega}\right) $$

ここで $\omega_0 = \sqrt{\omega_1 \omega_2}$ は通過帯域の幾何中心、そして 比帯域(fractional bandwidth) を、

$$ \mathrm{FBW} = \frac{\omega_2 – \omega_1}{\omega_0} $$

と定義します。比帯域とは「帯域幅が中心周波数の何割か」を表す無次元量で、たとえば中心 3.5 GHz・帯域 200 MHz なら $\mathrm{FBW} = 0.2/3.5 \approx 0.057$(5.7 %)です。マイクロ波の狭帯域フィルタでは数 % 程度になることが多く、この「FBW が小さい」という事実が後の近似で効いてきます。

写像が正しく対応していることの確認

この写像が本当に「ローパスの遮断 $\Omega = \pm 1$」を「バンドパスの帯域端 $\omega_1, \omega_2$」に対応させているか確かめましょう。$\omega = \omega_0$ を代入すると、

$$ \Omega = \frac{1}{\mathrm{FBW}}\left(\frac{\omega_0}{\omega_0} – \frac{\omega_0}{\omega_0}\right) = 0 $$

となり、バンドパスの中心がローパスの直流 $\Omega = 0$ に対応します。次に上側帯域端 $\omega = \omega_2$ を入れると、$\omega_0^2 = \omega_1 \omega_2$ の関係を使って、

$$ \frac{\omega_2}{\omega_0} – \frac{\omega_0}{\omega_2} = \frac{\omega_2}{\omega_0} – \frac{\omega_1 \omega_2}{\omega_2 \omega_0} = \frac{\omega_2 – \omega_1}{\omega_0} = \mathrm{FBW} $$

と整理できます。これを写像に戻すと、

$$ \Omega = \frac{1}{\mathrm{FBW}} \cdot \mathrm{FBW} = 1 $$

となり、確かにバンドパスの上側帯域端がローパスの遮断 $\Omega = 1$ に写ります。同様に $\omega = \omega_1$ では $\Omega = -1$ となります。写像が意図通り機能していることが確認できました。

共振器が現れる理由

この周波数変換を回路素子のレベルで見ると、バンドパスフィルタの正体が見えてきます。ローパスプロトタイプの直列インダクタ(リアクタンス $j\Omega L$)に上の写像を代入すると、

$$ j\Omega L = j L \cdot \frac{1}{\mathrm{FBW}}\left(\frac{\omega}{\omega_0} – \frac{\omega_0}{\omega}\right) $$

これは「インダクタとキャパシタの直列共振回路」のリアクタンスと同じ形です。実際、直列 LC 回路のリアクタンスは $j(\omega L’ – 1/\omega C’)$ であり、$\omega/\omega_0 – \omega_0/\omega$ の項とぴったり対応します。同様に、ローパスの並列キャパシタは並列 LC 共振回路に変換されます。

つまり ローパスの各素子は、バンドパスでは LC 共振器に化ける のです。$N$ 段ローパスは $N$ 個の共振器を持つバンドパスになります。ここまでで「なぜ共振器が並ぶのか」が明確になりました。しかし、直列共振器と並列共振器が交互に並ぶ回路は、マイクロ波では作りにくいという実装上の問題があります。空洞共振器も誘電体共振器も、物理的にはどれも同じ「並列共振」型として作るのが自然だからです。この困難を解決するのが、次に説明するインバータです。

インピーダンス/アドミタンスインバータ

インバータとは何か

直列共振器と並列共振器を交互に並べる代わりに、同じ種類の共振器だけ を並べて、その間を「インバータ」という素子で繋ぐ、というのがマイクロ波フィルタ設計の標準的な発想です。インバータには 2 種類あります。

  • インピーダンスインバータ(K インバータ): 入力インピーダンス $Z_{\mathrm{in}}$ を $Z_{\mathrm{in}} = K^2 / Z_L$ に変換する素子。負荷 $Z_L$ を逆数(の $K^2$ 倍)に「ひっくり返す」
  • アドミタンスインバータ(J インバータ): 入力アドミタンス $Y_{\mathrm{in}}$ を $Y_{\mathrm{in}} = J^2 / Y_L$ に変換する素子

K インバータの代表例が「特性インピーダンス $K$、電気長 $90^\circ$ の伝送線路(クォーターウェーブ変成器)」です。四分の一波長線路が負荷を $Z_{\mathrm{in}} = K^2/Z_L$ に変換することは、伝送線路理論からよく知られています。インバータはこの「逆数変換」を一般化した抽象素子だと考えてください。

インバータの威力は、その「ひっくり返す」性質にあります。インバータの先に並列共振器を繋ぐと、インバータの手前から見たインピーダンスは「並列共振器を逆数にしたもの」、すなわち直列共振器のように見えます。したがって、インバータと並列共振器を交互に並べれば、直列・並列が交互に並ぶ本来のはしご型と等価な回路を、並列共振器だけで作れる のです。

K インバータの ABCD 行列

インバータを回路計算で扱うために、ABCD 行列(縦続行列)で表現しておきましょう。理想的な K インバータの ABCD 行列は次の通りです。

$$ \begin{pmatrix} A & B \\ C & D \end{pmatrix}_{K} = \begin{pmatrix} 0 & jK \\ j/K & 0 \end{pmatrix} $$

この行列が本当にインピーダンスを逆数に変換することを確認します。負荷 $Z_L$ を繋いだときの入力インピーダンスは、ABCD 行列の定義から、

$$ Z_{\mathrm{in}} = \frac{A Z_L + B}{C Z_L + D} = \frac{0 \cdot Z_L + jK}{(j/K) Z_L + 0} = \frac{jK}{(j/K)Z_L} = \frac{K^2}{Z_L} $$

と計算でき、確かに $Z_{\mathrm{in}} = K^2/Z_L$ となります。途中、分子の $jK$ と分母の $(j/K)Z_L$ で虚数単位 $j$ が約分され、$K \div (1/K) = K^2$ となる点に注目してください。

同様に J インバータ(アドミタンス基準)の ABCD 行列は、

$$ \begin{pmatrix} A & B \\ C & D \end{pmatrix}_{J} = \begin{pmatrix} 0 & j/J \\ jJ & 0 \end{pmatrix} $$

で、こちらは $Y_{\mathrm{in}} = J^2 / Y_L$ を与えます。K インバータと J インバータは、扱うのがインピーダンスかアドミタンスかの違いだけで、本質は同じです。本記事では並列共振器ベースで設計するので、以降は K インバータを軸に話を進め、最終的に結合係数の言葉に翻訳します。

Kインバータによるインピーダンス逆数変換の概念図

この図が示すように、Kインバータ(λ/4 伝送線路がその代表例)は負荷インピーダンス $Z_L$ を $K^2/Z_L$ に変換します。インバータの右側に並列共振器を繋ぐと、インバータの左側から見た入力インピーダンスは「並列共振器を逆数にしたもの」、すなわち直列共振器と同じ振る舞いをします。これによって、物理的に作りやすい並列共振器だけを並べてバンドパスフィルタを構成できるようになります。

インバータという道具立てが揃いました。次は、このインバータの値 $K$ をプロトタイプ素子値 $g_i$ からどう決めるか、そしてそれが結合係数と外部 $Q$ にどう対応するかを導きます。

結合係数と外部 $Q$ の導出

インバータ値とプロトタイプ素子値の関係

ローパスプロトタイプ(素子値 $g_i$)を、すべて同一の並列共振器とその間の K インバータからなる回路へ等価変換すると、各インバータの値 $K_{i,i+1}$ と、入出力のインバータ $K_{01}, K_{N,N+1}$ が次のように定まります。共振器のリアクタンススロープパラメータ(共振器が共振点近傍でどれだけ急峻にリアクタンスが変化するか)を $x_i$ とすると、入力側インバータは、

$$ K_{01} = \sqrt{\frac{R_0\, x_1\, \mathrm{FBW}}{g_0 g_1}} $$

中間のインバータは隣り合う共振器のスロープパラメータ $x_i, x_{i+1}$ を使って、

$$ K_{i,i+1} = \mathrm{FBW}\sqrt{\frac{x_i\, x_{i+1}}{g_i g_{i+1}}}, \quad i = 1, 2, \dots, N-1 $$

出力側インバータは、

$$ K_{N,N+1} = \sqrt{\frac{x_N\, R_{N+1}\, \mathrm{FBW}}{g_N g_{N+1}}} $$

と書けます。ここで $R_0, R_{N+1}$ はソース・負荷抵抗です。これらの式の導出は、インバータ+共振器のはしご回路の入力インピーダンスを、もとのローパスプロトタイプを周波数変換した回路の入力インピーダンスと共振点近傍で一致させる、という「マッチング」から得られます。

結合係数への翻訳

実際の物理設計では、インバータ値 $K$ そのものより「無次元の結合係数 $k$」「外部 $Q$」で考える方が便利です。なぜなら、空洞や誘電体共振器の結合の強さは、電磁界シミュレーションや測定で「結合係数」「外部 $Q$」として直接読み取れる量だからです。インバータ値を共振器のスロープパラメータで正規化すると、これらの量に変換できます。

中間段の 結合係数 は、インバータ値をスロープパラメータで割って、

$$ k_{i,i+1} = \frac{K_{i,i+1}}{\sqrt{x_i x_{i+1}}} $$

と定義されます。先ほどの $K_{i,i+1}$ の式を代入すると、

$$ k_{i,i+1} = \frac{\mathrm{FBW}\sqrt{x_i x_{i+1}/(g_i g_{i+1})}}{\sqrt{x_i x_{i+1}}} = \frac{\mathrm{FBW}}{\sqrt{g_i g_{i+1}}} $$

と、見事にスロープパラメータ $x_i$ が約分されて消えます。結果として、結合係数はプロトタイプ素子値と比帯域だけで決まる、極めてシンプルな式になります。

$$ \boxed{\;k_{i,i+1} = \frac{\mathrm{FBW}}{\sqrt{g_i g_{i+1}}}, \quad i = 1, 2, \dots, N-1\;} $$

この式の意味するところは直感的です。比帯域 $\mathrm{FBW}$ が大きい(広帯域)ほど結合を強くする必要があり、$g_i g_{i+1}$ が大きい段ほど結合を弱くする、ということです。

外部 $Q$ への翻訳

入出力ポートとの結合は 外部 $Q$(external quality factor) $Q_e$ で表します。外部 $Q$ は「端の共振器に蓄えられたエネルギーが、外部回路へどれだけゆっくり漏れるか」を表す量で、$Q_e$ が大きいほど結合は弱くなります。入力側インバータ $K_{01}$ をスロープパラメータと整合のために変形すると、入力側外部 $Q$ は、

$$ Q_{e1} = \frac{x_1}{K_{01}^2 / R_0} = \frac{x_1 R_0}{K_{01}^2} $$

と表されます。$K_{01}^2 = R_0 x_1 \mathrm{FBW}/(g_0 g_1)$ を代入すると、

$$ Q_{e1} = \frac{x_1 R_0}{R_0 x_1 \mathrm{FBW}/(g_0 g_1)} = \frac{g_0 g_1}{\mathrm{FBW}} $$

となり、ここでもスロープパラメータ $x_1$ とソース抵抗 $R_0$ が約分されて消えます。出力側も同様に計算でき、最終的に外部 $Q$ もプロトタイプ素子値と比帯域だけで決まります。

$$ \boxed{\;Q_{e1} = \frac{g_0 g_1}{\mathrm{FBW}}, \qquad Q_{eN} = \frac{g_N g_{N+1}}{\mathrm{FBW}}\;} $$

これで設計に必要な式が出揃いました。プロトタイプ素子値 $g_i$ と比帯域 $\mathrm{FBW}$ さえあれば、$N-1$ 個の結合係数と 2 つの外部 $Q$ がすべて計算できます。スロープパラメータ $x_i$ が最終式から消えてくれるおかげで、共振器の具体的な実装(LC か空洞か誘電体か)に依らず、同じ結合係数・外部 $Q$ を目標値として設計できるのが、この方法の美しい点です。

段間結合係数と外部Qの段数依存性

左のグラフは段数 N=2〜5 それぞれの段間結合係数 $k_{i,i+1}$ を棒グラフで示しています。FBW が同じでも、Chebyshev フィルタでは対称な段構造のため端に近い結合が強く中央が弱い傾向が読み取れます。右のグラフの外部Q(入力側=濃色、出力側=淡色)は、段数が増えると大きくなります。外部Qが大きいほど入出力ポートとの結合が弱い(エネルギーが外部に漏れにくい)ことを意味し、高次フィルタほど入出力結合の調整が精密に要求されることがわかります。

設計式が手に入ったので、次は具体的な数値で 3 段・4 段のフィルタを設計してみましょう。

設計例 — 3段/4段 Chebyshev バンドパスフィルタ

仕様の設定

具体例として、次の仕様のバンドパスフィルタを設計します。

  • 中心周波数 $f_0 = 3.5$ GHz(5G の sub-6 帯を想定)
  • 帯域幅 $\Delta f = 200$ MHz($f_1 = 3.4$ GHz, $f_2 = 3.6$ GHz)
  • 通過帯域リップル $L_{\mathrm{Ar}} = 0.1$ dB
  • ソース・負荷インピーダンス $Z_0 = 50\,\Omega$

比帯域は、

$$ \mathrm{FBW} = \frac{f_2 – f_1}{f_0} = \frac{0.2}{3.5} \approx 0.0571 $$

です。約 5.7 % の狭帯域フィルタになります。

3段の場合の素子値と設計値

リップル 0.1 dB、$N = 3$ の Chebyshev プロトタイプ素子値を前述の再帰式で計算すると、おおよそ次の値になります(後で Python でも確認します)。

$$ g_0 = 1, \quad g_1 \approx 1.0316, \quad g_2 \approx 1.1474, \quad g_3 \approx 1.0316, \quad g_4 = 1 $$

$N = 3$ は奇数なので $g_4 = 1$ で、両端が整合しています。また $g_1 = g_3$ という対称性も見られます。これらから結合係数を計算すると、

$$ k_{12} = \frac{\mathrm{FBW}}{\sqrt{g_1 g_2}} = \frac{0.0571}{\sqrt{1.0316 \times 1.1474}} \approx 0.0525 $$

$$ k_{23} = \frac{\mathrm{FBW}}{\sqrt{g_2 g_3}} \approx 0.0525 $$

対称構造なので $k_{12} = k_{23}$ となります。外部 $Q$ は、

$$ Q_{e1} = \frac{g_0 g_1}{\mathrm{FBW}} = \frac{1 \times 1.0316}{0.0571} \approx 18.06 $$

$$ Q_{e3} = \frac{g_3 g_4}{\mathrm{FBW}} = \frac{1.0316 \times 1}{0.0571} \approx 18.06 $$

これも対称です。つまり、3 段フィルタは「外部 $Q \approx 18$ で入出力に結合し、隣り合う共振器を結合係数 $k \approx 0.0525$ で結ぶ」だけで実現できます。物理設計の段階では、たとえば誘電体共振器なら、共振器間の間隔を調整して $k = 0.0525$ を、入出力タップ位置を調整して $Q_e = 18$ を実現する、という流れになります。

4段の場合

$N = 4$(偶数)では終端が $g_5 = \coth^2(\beta/4) \ne 1$ となり、わずかに整合がずれます。段数を増やすと、結合係数と外部 $Q$ の数が増え($k_{12}, k_{23}, k_{34}$ と $Q_{e1}, Q_{e4}$)、より急峻な遮断特性が得られます。段数とスカート特性のトレードオフは、後の Python での周波数応答比較で視覚的に確認します。

ローパスプロトタイプからバンドパスへの周波数変換マップ

左のグラフがローパスプロトタイプの応答(正規化周波数Ωの関数)で、$|\Omega| \le 1$ の通過帯域が水色の帯で示されています。右のグラフは周波数変換後のバンドパス応答で、通過帯域が 3.4〜3.6 GHz に引き伸ばされています。変換式 $\Omega = (1/\mathrm{FBW})(\omega/\omega_0 – \omega_0/\omega)$ がローパスの $\Omega=0$ をバンドパスの中心 $f_0=3.5$ GHz に、$\Omega=\pm 1$ を帯域端に正確に対応させていることが両グラフの対比から確認できます。

数値が出たので、これが本当に正しいフィルタ応答を与えるのかを検証する必要があります。そのために、共振器とインバータを回路素子としてモデル化し、ABCD 行列をカスケード乗算して $S$ パラメータを計算しましょう。

回路モデルと ABCD 行列による $S$ パラメータ計算

並列 LC 共振器のモデル化

各共振器を、中心角周波数 $\omega_0 = 2\pi f_0$ で共振する並列 LC 回路としてモデル化します。並列 LC のアドミタンスは、

$$ Y_{\mathrm{res}}(\omega) = j\left(\omega C – \frac{1}{\omega L}\right) $$

です。共振条件 $\omega_0 = 1/\sqrt{LC}$ を満たすように $L, C$ を選びます。共振器のサセプタンススロープパラメータ $b$(並列共振の場合)は $b = \omega_0 C = 1/(\omega_0 L)$ で、これがインバータ計算で使った $x_i$ に対応します。本記事の検証では、すべての共振器を同一の $L, C$(同じ $b$)とし、結合係数・外部 $Q$ を満たすインバータ値を設定する方針を採ります。

並列共振器は回路的には「シャント(並列)アドミタンス」なので、その ABCD 行列は、

$$ \begin{pmatrix} A & B \\ C & D \end{pmatrix}_{\mathrm{res}} = \begin{pmatrix} 1 & 0 \\ Y_{\mathrm{res}} & 1 \end{pmatrix} $$

となります。シャント素子の ABCD 行列がこの形になることは、ネットワーク理論の基本です。

インバータ値の決定

結合係数・外部 $Q$ から、J インバータ(アドミタンスベース)の値を逆算します。共振器のサセプタンススロープ $b = \omega_0 C$ を使うと、中間の J インバータは、

$$ J_{i,i+1} = k_{i,i+1}\, b = k_{i,i+1}\, \omega_0 C $$

入出力の J インバータは外部 $Q$ とソースコンダクタンス $G_0 = 1/Z_0$ を使って、

$$ J_{01} = \sqrt{\frac{G_0\, b}{Q_{e1}}} = \sqrt{\frac{b}{Z_0\, Q_{e1}}}, \qquad J_{N,N+1} = \sqrt{\frac{b}{Z_0\, Q_{eN}}} $$

と求まります。これらは前節で導いたインバータ値の式を、スロープパラメータ $b$ と結合係数・外部 $Q$ の言葉で書き直したものです。J インバータの ABCD 行列は前述の通り $\begin{pmatrix} 0 & j/J \\ jJ & 0 \end{pmatrix}$ です。

カスケード構成

フィルタ全体は、入力ポート($Z_0$)→ $J_{01}$ → 共振器1 → $J_{12}$ → 共振器2 → $\cdots$ → 共振器$N$ → $J_{N,N+1}$ → 出力ポート($Z_0$)という縦続接続になります。ABCD 行列は縦続接続では単純な行列積で合成できるので、全体の ABCD 行列は、

$$ \bm{T}_{\mathrm{total}} = \bm{T}_{J_{01}} \, \bm{T}_{\mathrm{res},1} \, \bm{T}_{J_{12}} \, \bm{T}_{\mathrm{res},2} \cdots \bm{T}_{\mathrm{res},N} \, \bm{T}_{J_{N,N+1}} $$

と書けます。最後に、合成された ABCD 行列 $(A, B, C, D)$ から $S$ パラメータへ変換します。両ポートが同じ基準インピーダンス $Z_0$ のとき、$S_{21}$ と $S_{11}$ は、

$$ S_{21} = \frac{2}{A + B/Z_0 + C Z_0 + D} $$

$$ S_{11} = \frac{A + B/Z_0 – C Z_0 – D}{A + B/Z_0 + C Z_0 + D} $$

で与えられます。分母が両者で共通している点に注意してください。これらの公式は、ABCD パラメータと散乱パラメータの一般的な変換式から導かれるものです。

理論と回路モデルが揃ったので、いよいよ Python で実装し、設計した結合係数・外部 $Q$ が本当に所望の通過帯域特性を生むのかを検証します。

3段ChebyshevバンドパスフィルタのS21/S11応答

先に検証結果を示します。上のグラフは 3 段 Chebyshev バンドパスフィルタの $|S_{21}|$(青=挿入損失)と $|S_{11}|$(橙破線=反射損失)の周波数応答です。通過帯域 3.4〜3.6 GHz(水色の帯)では $|S_{21}|$ がほぼ 0 dB を保ち、帯域外ではすみやかに減衰しています。$|S_{11}|$ は通過帯域内で深く落ち込む点(リターンロスのディップ)が 3 カ所確認でき、これは 3 段構造のリップルのピーク数と対応しています。設計した結合係数・外部 $Q$ が回路応答として正しく反映されています。

Python による実装と検証

プロトタイプ素子値の計算

まず、Chebyshev ローパスプロトタイプの素子値を再帰式で計算する関数を実装します。前述の $\beta, \gamma, a_k, b_k$ を使った式をそのままコードに落とします。

import numpy as np

def chebyshev_prototype(N, ripple_db):
    """N段 Chebyshev ローパスプロトタイプの素子値 g0..g_{N+1} を返す"""
    beta = np.log(1.0 / np.tanh(ripple_db / 17.37))
    gamma = np.sinh(beta / (2 * N))

    a = np.array([np.sin((2 * k - 1) * np.pi / (2 * N)) for k in range(1, N + 1)])
    b = np.array([gamma**2 + np.sin(k * np.pi / N)**2 for k in range(1, N + 1)])

    g = np.zeros(N + 2)
    g[0] = 1.0                      # g0 (ソース)
    g[1] = 2 * a[0] / gamma         # g1
    for k in range(2, N + 1):       # g2..gN
        g[k] = 4 * a[k - 2] * a[k - 1] / (b[k - 2] * g[k - 1])
    # 終端 g_{N+1}
    if N % 2 == 1:
        g[N + 1] = 1.0
    else:
        g[N + 1] = (1.0 / np.tanh(beta / 4))**2
    return g

# 3段, リップル0.1dB のプロトタイプ素子値
g3 = chebyshev_prototype(3, 0.1)
print("N=3:", np.round(g3, 4))

# 4段
g4 = chebyshev_prototype(4, 0.1)
print("N=4:", np.round(g4, 4))

このコードを実行すると、N=3: [1. 1.0316 1.1474 1.0316 1.]N=4: [1. 1.1088 1.3062 1.7704 0.818 1.2210] といった値が得られます。3 段では $g_1 = g_3 = 1.0316$ という対称性が確認でき、終端 $g_4 = 1$ で整合しています。一方 4 段では終端 $g_5 = 1.221 \ne 1$ となっており、偶数段では完全整合しないという理論的な性質がそのまま数値に表れています。標準的なフィルタ設計表(例: Pozar の教科書)の値ともよく一致します。

結合係数と外部 $Q$ の計算

次に、素子値と比帯域から結合係数・外部 $Q$ を計算します。導出した 2 つの公式をそのまま関数化します。

import numpy as np

def coupling_and_qe(g, FBW):
    """素子値 g[0..N+1] と比帯域 FBW から結合係数 k と外部Q を計算"""
    N = len(g) - 2
    # 結合係数 k[i,i+1], i=1..N-1
    k = np.array([FBW / np.sqrt(g[i] * g[i + 1]) for i in range(1, N)])
    # 外部Q(入力側・出力側)
    Qe_in = g[0] * g[1] / FBW
    Qe_out = g[N] * g[N + 1] / FBW
    return k, Qe_in, Qe_out

f0 = 3.5e9          # 中心周波数 [Hz]
BW = 0.2e9          # 帯域幅 [Hz]
FBW = BW / f0       # 比帯域

g3 = chebyshev_prototype(3, 0.1)
k3, Qe_in3, Qe_out3 = coupling_and_qe(g3, FBW)
print(f"FBW = {FBW:.4f}")
print(f"N=3  k = {np.round(k3, 4)}")
print(f"N=3  Qe_in = {Qe_in3:.2f},  Qe_out = {Qe_out3:.2f}")

実行すると FBW = 0.0571N=3 k = [0.0525 0.0525]N=3 Qe_in = 18.06, Qe_out = 18.06 が出力されます。手計算で確認した値と完全に一致しており、結合係数・外部 $Q$ がともに対称($k_{12} = k_{23}$、$Q_{e1} = Q_{e3}$)になっています。これは 3 段 Chebyshev フィルタが入出力対称な構造であることの反映です。設計の物理的な目標値が、たった数行のコードで得られたことになります。

ABCD 行列による周波数応答の計算

設計した結合係数・外部 $Q$ が正しい通過帯域特性を生むことを、ABCD 行列のカスケードで検証します。共振器を並列 LC、結合を J インバータでモデル化し、周波数掃引して $S_{21}, S_{11}$ を求めます。

import numpy as np

def filter_response(g, FBW, f0, Z0, freqs):
    """結合共振器BPFの S21, S11 を周波数掃引で計算"""
    N = len(g) - 2
    w0 = 2 * np.pi * f0
    # 共振器: 同一の並列LC。サセプタンススロープ b = w0*C を1に正規化する
    C = 1.0 / (Z0 * w0)     # 適当なスケール(Z0基準)
    L = 1.0 / (w0**2 * C)
    b = w0 * C              # サセプタンススロープパラメータ

    # 結合係数・外部Q
    k, Qe_in, Qe_out = coupling_and_qe(g, FBW)
    # J インバータ値
    J = np.zeros(N + 1)
    J[0] = np.sqrt(b / (Z0 * Qe_in))            # J01
    for i in range(1, N):
        J[i] = k[i - 1] * b                     # J12..J_{N-1,N}
    J[N] = np.sqrt(b / (Z0 * Qe_out))           # J_{N,N+1}

    S21 = np.zeros(len(freqs), dtype=complex)
    S11 = np.zeros(len(freqs), dtype=complex)
    for idx, f in enumerate(freqs):
        w = 2 * np.pi * f
        Yres = 1j * (w * C - 1.0 / (w * L))     # 並列共振器アドミタンス
        # 全体のABCD行列を単位行列から積み上げる
        T = np.eye(2, dtype=complex)
        for i in range(N):
            # J インバータ
            T = T @ np.array([[0, 1j / J[i]], [1j * J[i], 0]])
            # 並列共振器(シャント)
            T = T @ np.array([[1, 0], [Yres, 1]])
        # 最後のインバータ J_{N,N+1}
        T = T @ np.array([[0, 1j / J[N]], [1j * J[N], 0]])
        A, B, Cc, D = T[0, 0], T[0, 1], T[1, 0], T[1, 1]
        denom = A + B / Z0 + Cc * Z0 + D
        S21[idx] = 2.0 / denom
        S11[idx] = (A + B / Z0 - Cc * Z0 - D) / denom
    return S21, S11

この関数は、入力 J インバータ → (共振器 → J インバータ) を $N$ 回繰り返す形でカスケードを組み立てています。各周波数で並列共振器のアドミタンス $Y_{\mathrm{res}}$ を計算し直し、ABCD 行列の積で全体を合成してから $S$ パラメータへ変換しています。共振器を全て同一とし、結合の強弱だけを J インバータに担わせる、という設計方針がコードに反映されている点を確認してください。

周波数応答のプロット

実際に 3 段フィルタの応答を描画します。

import numpy as np
import matplotlib.pyplot as plt

f0 = 3.5e9
BW = 0.2e9
FBW = BW / f0
Z0 = 50.0
freqs = np.linspace(3.0e9, 4.0e9, 2001)

g3 = chebyshev_prototype(3, 0.1)
S21, S11 = filter_response(g3, FBW, f0, Z0, freqs)

S21_dB = 20 * np.log10(np.abs(S21))
S11_dB = 20 * np.log10(np.abs(S11))

plt.figure(figsize=(9, 5.5))
plt.plot(freqs / 1e9, S21_dB, label='$|S_{21}|$ (挿入損失)', lw=2)
plt.plot(freqs / 1e9, S11_dB, label='$|S_{11}|$ (反射)', lw=2)
plt.axvline(3.4, color='gray', ls='--', alpha=0.6)
plt.axvline(3.6, color='gray', ls='--', alpha=0.6)
plt.ylim(-60, 5)
plt.xlabel('Frequency [GHz]')
plt.ylabel('Magnitude [dB]')
plt.title('3-stage Chebyshev BPF (f0=3.5GHz, BW=200MHz, ripple=0.1dB)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('bpf_3stage_response.png', dpi=150, bbox_inches='tight')
plt.show()

このグラフから、いくつかの重要な点が読み取れます。まず $|S_{21}|$ が 3.4〜3.6 GHz の通過帯域でほぼ 0 dB(損失なし、理想素子のため)に保たれ、帯域の外側では急速に落ち込んでいます。これは設計通り、所望の帯域だけを通すバンドパス特性が得られていることを示します。次に、通過帯域内で $|S_{11}|$ が深く落ち込む点が複数あり(リターンロスのディップ)、その数が段数 $N = 3$ に対応します。$S_{11}$ が深い周波数では反射がほぼゼロ=入力電力がすべて通過しており、整合が取れている証拠です。帯域端を示す灰色の破線とフィルタのスカートがよく一致しており、結合係数・外部 $Q$ の設計が正しいことが検証できました。

段数によるスカート特性の比較

最後に、段数 $N$ を変えると遮断の鋭さがどう変わるかを比較します。Chebyshev フィルタの最大の利点である「段数を増やすほど急峻になる」ことを視覚化します。

import numpy as np
import matplotlib.pyplot as plt

f0 = 3.5e9
BW = 0.2e9
FBW = BW / f0
Z0 = 50.0
freqs = np.linspace(3.0e9, 4.0e9, 2001)

plt.figure(figsize=(9, 5.5))
for N in [2, 3, 4, 5]:
    g = chebyshev_prototype(N, 0.1)
    S21, _ = filter_response(g, FBW, f0, Z0, freqs)
    plt.plot(freqs / 1e9, 20 * np.log10(np.abs(S21)), lw=2, label=f'N={N}')

plt.axvline(3.4, color='gray', ls='--', alpha=0.6)
plt.axvline(3.6, color='gray', ls='--', alpha=0.6)
plt.ylim(-80, 5)
plt.xlabel('Frequency [GHz]')
plt.ylabel('$|S_{21}|$ [dB]')
plt.title('Effect of filter order N on selectivity (Chebyshev, 0.1dB ripple)')
plt.legend()
plt.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('bpf_order_comparison.png', dpi=150, bbox_inches='tight')
plt.show()

段数N=2,3,4,5による選択度比較

このグラフから、段数 $N$ を増やすほど通過帯域外(スカート部)の傾きが急になり、同じ帯域外周波数での減衰量が大きくなることがはっきり読み取れます。たとえば帯域端から少し離れた 3.7 GHz での減衰量は、$N=2$ では十数 dB 程度ですが、$N=5$ では数十 dB に達します。一方、通過帯域内では段数を増やすほどリップルの「山」の数が増えますが、リップルの高さ自体は設計値(0.1 dB)に保たれています。これが Chebyshev 特性の本質 — リップルの高さを一定に保ったまま、段数で遮断の鋭さを稼ぐ — です。隣接チャネル抑圧の要求が厳しいほど高次のフィルタが必要になる、という実務上の判断が、このグラフから定量的に下せます。

通過帯域内でわずかにリップルが見える点、帯域外で段数に応じて減衰が深くなる点、いずれも理論が予測した通りであり、ローパスプロトタイプ → 結合係数・外部 $Q$ → 回路モデルという設計フロー全体が正しく機能していることが確認できました。

ButterworthとChebyshevの周波数特性比較(N=4)

同じ段数 N=4 で Butterworth(最大平坦)と Chebyshev(等リップル 0.1 dB)を比較したグラフです。Butterworth は通過帯域内がほぼ完全に平坦ですが、帯域外への減衰が緩やかです。一方 Chebyshev は通過帯域内に小さなリップルを持つ代わりに、帯域端付近での減衰が急峻で、同じ帯域外周波数においてより大きな減衰量が得られます。隣接チャネル干渉の抑圧が要求される通信フィルタでは、このトレードオフを把握した上で Chebyshev が選ばれる理由がこのグラフから定量的に理解できます。

3段フィルタの通過帯域内リップルと反射特性の詳細

通過帯域(3.4〜3.6 GHz)を拡大したグラフです。左の $|S_{21}|$ を見ると、設計値 0.1 dB のリップルが帯域内に均等に分布している等リップル特性が確認でき、破線の -0.1 dB 線を超えないことが読み取れます。右の $|S_{11}|$ では、反射がゼロに近づく(深くディップする)点が 3 カ所あり、それらは段数 N=3 の共振点に対応しています。ディップが深いほど入力電力が損失なく出力に伝わっており、帯域内の整合が良好であることを示します。

群遅延特性 — 段数N=3とN=5の比較

群遅延は通過帯域内でのリニア位相からのずれを表し、信号のパルス波形歪みに直結する重要な特性です。N=3(青)と N=5(赤破線)を比較すると、段数が多いほど帯域端での群遅延リップルが大きくなることがわかります。帯域端付近で群遅延が急激に上昇するのは、Chebyshev フィルタが急峻な振幅特性を得るために位相特性を犠牲にしているためです。パルス通信などで波形品質が重要な場合には、群遅延等化器を追加するか、位相特性に優れた Bessel フィルタへの変更を検討する必要があります。

まとめ

本記事では、結合共振器型バンドパスフィルタの設計理論を、ローパスプロトタイプからインバータ、結合係数・外部 $Q$、そして $S$ パラメータ検証まで一気通貫で解説しました。

  • ローパスプロトタイプ は応答の形(Chebyshev 等リップル)と段数 $N$ だけで決まる正規化されたはしご回路で、素子値 $g_i$ は再帰式で計算できる
  • 周波数変換 $\Omega = (1/\mathrm{FBW})(\omega/\omega_0 – \omega_0/\omega)$ により、ローパスの各素子は LC 共振器に化け、バンドパスが得られる
  • インバータ(K/J) は負荷を逆数に変換する素子で、これを使うと並列共振器だけで直列・並列交互のはしご回路と等価な構成を作れる
  • 設計の核心は 2 つの式 — 結合係数 $k_{i,i+1} = \mathrm{FBW}/\sqrt{g_i g_{i+1}}$ と外部 $Q_e = g_0 g_1/\mathrm{FBW}$。スロープパラメータが約分で消えるため、共振器の実装に依らず使える
  • 共振器を並列 LC、結合を J インバータの ABCD 行列 でモデル化しカスケード乗算すれば、$S_{21}/S_{11}$ を計算でき、設計の妥当性を検証できる
  • 段数 $N$ を増やすほどスカート特性が急峻になり、隣接チャネル抑圧が向上する

この結合共振器法は、空洞フィルタ・誘電体共振器フィルタ・マイクロストリップヘアピンフィルタ・SIW フィルタなど、あらゆる実装形態に共通する設計の基盤です。次のステップでは、得られた結合係数・外部 $Q$ を物理寸法(共振器間隔やタップ位置)へ落とし込むために、電磁界シミュレーションで結合係数を抽出する手法や、結合行列(coupling matrix)による一般化合成へ進むとよいでしょう。

次に読むと理解が深まる記事を挙げておきます。

画像なし
アナログプロトタイプ(Butterworth/Chebyshev/楕円)からIIRを設計する
Chebyshev/Butterworth/楕円プロトタイプ素子値の導出から双一次変換によるIIRフィルタ設計まで、アナログフィルタ理論とディジタル実装を一気通貫で解説します。
画像なし
マイクロ波回路の基礎 — 導波管・Sパラメータ・方向性結合器を理解する
マイクロ波回路の根幹をなす導波管の伝播モード、Sパラメータによる高周波回路記述、方向性結合器の設計をABCD行列とともに体系的に解説します。