スマートフォンのマイクに向かって話しかけると、あなたの声は電気信号に変換されます。しかし、その信号はわずか数ミリボルト程度 — そのままでは何の役にも立ちません。この微弱な信号を「使えるレベル」まで大きくする回路が増幅回路(アンプ)です。
増幅回路は、無線通信の受信フロントエンド(アンテナから届く数マイクロボルトの信号を増幅する)から、オーディオシステムのパワーアンプ(スピーカーを駆動するために数十ワットの電力を出力する)まで、エレクトロニクスのあらゆる場面で不可欠な存在です。また、センサ回路においても、熱電対やひずみゲージの微小な出力電圧を計測可能なレベルに引き上げるために増幅回路が活躍しています。
本記事では、増幅回路の基本概念から始めて、バイポーラトランジスタのエミッタ接地増幅器とMOSFETのソース接地増幅器を設計し、小信号等価回路を使って利得を計算する方法を体系的に解説します。さらに、周波数特性(ミラー効果と高域遮断)や多段増幅についても扱い、Pythonによるシミュレーションで理論の正しさを確かめます。
本記事の内容
- 増幅の基本概念(電圧利得・電流利得・電力利得)
- エミッタ接地増幅器のバイアス設計と動作点
- 小信号等価回路による利得計算
- ソース接地増幅器の設計と利得
- 周波数特性とミラー効果
- Pythonでの利得計算と周波数応答シミュレーション
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
増幅とは何か
増幅の直感的イメージ
増幅を理解するための最もシンプルなアナロジーは「水門(すいもん)」です。川に設置された水門を考えてください。あなたが水門のハンドルをわずかに回す(入力)と、大量の水が流れ出します(出力)。ハンドルを動かすエネルギーは小さいですが、流れる水のエネルギーは巨大です。水門自体がエネルギーを生み出しているわけではなく、川の水(電源)のエネルギーを「制御」しているのです。
トランジスタ増幅器もまったく同じです。入力信号(小さなハンドルの動き)がトランジスタを制御し、電源から供給される大きなエネルギーを使って、入力信号と同じ「形」の大きな出力信号を作り出します。増幅器はエネルギーを生成するのではなく、電源のエネルギーを入力信号の形に整形する装置です。
利得の定義
増幅の度合いを定量化するのが利得(Gain)です。利得には3種類あります。
電圧利得 $A_v$ は、出力電圧と入力電圧の比です。
$$ A_v = \frac{v_{out}}{v_{in}} $$
例えば、入力が $10 \, \text{mV}$ で出力が $1 \, \text{V}$ なら、$A_v = 100$(40 dB)です。
電流利得 $A_i$ は、出力電流と入力電流の比です。
$$ A_i = \frac{i_{out}}{i_{in}} $$
電力利得 $A_p$ は、出力電力と入力電力の比で、電圧利得と電流利得の積になります。
$$ A_p = \frac{P_{out}}{P_{in}} = A_v \cdot A_i $$
利得はしばしばデシベル(dB)で表現されます。電圧利得のデシベル表記は次のとおりです。
$$ A_v \, [\text{dB}] = 20 \log_{10} |A_v| $$
電力利得の場合は係数が $10$ になります。
$$ A_p \, [\text{dB}] = 10 \log_{10} A_p $$
デシベルを使う理由は、多段増幅で利得の掛け算がdBの足し算になるため計算が楽になること、そして非常に広い範囲の値を扱いやすいことです。例えば $A_v = 1{,}000{,}000$ は $120 \, \text{dB}$ と簡潔に書けます。
利得の概念が理解できたところで、次に、実際にトランジスタを使ってどのように増幅器を構成するのかを見ていきましょう。最も基本的なエミッタ接地増幅器から始めます。
エミッタ接地増幅器のバイアス設計
なぜバイアスが必要なのか
トランジスタは本来、非線形なデバイスです。入力電圧と出力電流の関係はきれいな直線ではなく、指数関数的です。このままでは、入力信号の「形」が出力でひずんでしまいます。
ここで重要なのがバイアス(直流動作点)の設計です。非線形な特性曲線の中でも、適切な点を選んでその付近だけを見れば、近似的に直線(線形)とみなすことができます。これは、地球の表面が球面であっても、自分の周りだけ見れば平坦に見えるのと同じ発想です。
この「適切な点」を動作点(Q点: Quiescent Point)と呼び、直流バイアスによってトランジスタをこの点で動作させます。入力の交流信号は、この動作点の周りで微小に振動するだけなので、線形近似が成り立ちます。これが小信号解析の基本的な考え方です。
固定バイアス回路
最もシンプルなバイアス方式は、ベース抵抗 $R_B$ を通じてベース電流を供給する固定バイアス回路です。
電源電圧 $V_{CC}$ からベース抵抗 $R_B$ を通じてベースに電流が流れます。キルヒホッフの電圧則(KVL)を適用すると、ベース-エミッタ間のループでは次の式が成り立ちます。
$$ V_{CC} = I_B R_B + V_{BE} $$
ここで $V_{BE} \approx 0.7 \, \text{V}$(シリコントランジスタの場合)ですから、ベース電流は次のように求まります。
$$ I_B = \frac{V_{CC} – V_{BE}}{R_B} $$
コレクタ電流は電流増幅率 $\beta$($h_{FE}$)を使って次のように表されます。
$$ I_C = \beta I_B = \beta \cdot \frac{V_{CC} – V_{BE}}{R_B} $$
コレクタ-エミッタ間の電圧は、出力側のKVLから次のように求まります。
$$ V_{CE} = V_{CC} – I_C R_C $$
しかし、固定バイアス回路には致命的な欠点があります。$\beta$ はトランジスタの個体差が大きく(同じ型番でも50から300まで変わることがあります)、温度によっても変化します。$\beta$ が変わると $I_C$ が大きく変化し、動作点がずれてしまいます。最悪の場合、トランジスタが飽和領域に入ってしまい、増幅ができなくなります。
電圧分割バイアス回路(自己安定化バイアス)
実用的な増幅回路では、$\beta$ の変動に対して動作点を安定させるために電圧分割バイアス回路を使います。この回路では、2つの抵抗 $R_1$ と $R_2$ でベース電圧を設定し、エミッタ抵抗 $R_E$ で電流帰還をかけます。
回路の解析にはテブナンの等価回路を使います。ベースから見た等価電圧 $V_{BB}$ と等価抵抗 $R_{BB}$ は次のとおりです。
$$ V_{BB} = V_{CC} \cdot \frac{R_2}{R_1 + R_2} $$
$$ R_{BB} = R_1 \| R_2 = \frac{R_1 R_2}{R_1 + R_2} $$
ベース-エミッタ間のKVLを書くと、次のようになります。
$$ V_{BB} = I_B R_{BB} + V_{BE} + I_E R_E $$
$I_E = (\beta + 1) I_B$ を代入して $I_B$ について解くと、次の式が得られます。
$$ I_B = \frac{V_{BB} – V_{BE}}{R_{BB} + (\beta + 1) R_E} $$
ここで重要なポイントがあります。$(\beta + 1) R_E \gg R_{BB}$ となるように設計すれば、分母の $R_{BB}$ は無視でき、次のように近似できます。
$$ I_B \approx \frac{V_{BB} – V_{BE}}{(\beta + 1) R_E} $$
このとき、コレクタ電流は次のようになります。
$$ I_C = \beta I_B \approx \frac{\beta}{\beta + 1} \cdot \frac{V_{BB} – V_{BE}}{R_E} \approx \frac{V_{BB} – V_{BE}}{R_E} $$
最後の近似は $\beta \gg 1$ であることを使いました。この結果、$I_C$ は $\beta$ にほとんど依存しなくなります。これが電圧分割バイアスの安定化メカニズムです。$R_E$ が「電流帰還」の役割を果たし、温度変化や個体差による $\beta$ の変動を吸収してくれます。
動作点の設計例
具体的な数値で設計してみましょう。以下のスペックを想定します。
- 電源電圧: $V_{CC} = 12 \, \text{V}$
- コレクタ電流: $I_C = 2 \, \text{mA}$(目標値)
- $\beta = 100$(典型値)
- $V_{CE} = 6 \, \text{V}$($V_{CC}/2$ に設定 — 最大振幅のため)
まず、$V_{CE} = V_{CC}/2$ に設定する理由を説明します。出力信号は $V_{CE}$ を中心に上下に振れますが、$V_{CE}$ が $V_{CC}/2$ のときに正負両方向に最大の振幅を確保できます。これはまさに、振り子の静止位置を中央に置くと両方向に最も大きく振れるのと同じ考え方です。
コレクタ側の全抵抗の電圧降下は $V_{CC} – V_{CE} = 6 \, \text{V}$ です。この電圧降下を $R_C$ と $R_E$ で分割します。一般的な設計指針として $R_E$ での電圧降下を $V_{CC}$ の $10\%$ 程度(ここでは約 $1.2 \, \text{V}$)にします。
$$ R_E = \frac{1.2 \, \text{V}}{2 \, \text{mA}} = 600 \, \Omega \approx 620 \, \Omega \quad (\text{E24系列}) $$
$$ R_C = \frac{V_{CC} – V_{CE} – V_{R_E}}{I_C} = \frac{12 – 6 – 1.2}{0.002} = 2{,}400 \, \Omega \approx 2.4 \, \text{k}\Omega $$
ベース電圧は $V_B = V_{BE} + V_{R_E} = 0.7 + 1.2 = 1.9 \, \text{V}$ です。
安定条件 $(\beta + 1) R_E \gg R_{BB}$ を満たすために、分割電流を $I_C$ の10倍程度($20 \, \text{mA}$ ……は大きすぎるので、通常は $10 I_B$ 程度)にします。$I_B = I_C/\beta = 20 \, \mu\text{A}$ ですから、分割電流を $200 \, \mu\text{A}$ とすると、次のようになります。
$$ R_2 = \frac{V_B}{200 \, \mu\text{A}} = \frac{1.9}{0.0002} = 9{,}500 \, \Omega \approx 10 \, \text{k}\Omega $$
$$ R_1 = \frac{V_{CC} – V_B}{200 \, \mu\text{A}} = \frac{10.1}{0.0002} = 50{,}500 \, \Omega \approx 51 \, \text{k}\Omega $$
これでバイアス設計が完了しました。次は、この動作点の周りでの「小さな信号」の振る舞いを解析する手法 — 小信号解析 — に進みます。
小信号等価回路
小信号解析の考え方
バイアスで動作点(Q点)を設定した後、入力にはQ点の周りで微小に振動する交流信号を加えます。動作点の近傍では、トランジスタの非線形特性を線形近似できます。これは、関数 $f(x)$ を $x = x_0$ のまわりでテイラー展開して1次の項だけを残す操作と本質的に同じです。
$$ f(x_0 + \Delta x) \approx f(x_0) + f'(x_0) \cdot \Delta x $$
ここで $f(x_0)$ はバイアス(直流)成分、$f'(x_0) \cdot \Delta x$ が小信号(交流)成分に対応します。解析では、直流成分は定数なので無視し、交流成分だけを扱います。このとき、直流電源は交流的には0V(グランド)、直流電流源は交流的には開放とみなします。
バイポーラトランジスタの小信号パラメータ
バイポーラトランジスタの小信号等価回路を構成するために、まず重要なパラメータを導出しましょう。
相互コンダクタンス $g_m$ は、ベース-エミッタ間電圧の微小変化に対するコレクタ電流の変化率です。バイポーラトランジスタの電流-電圧特性 $I_C = I_S \exp(V_{BE}/V_T)$ を $V_{BE}$ で微分すると、次のようになります。
$$ g_m = \frac{\partial I_C}{\partial V_{BE}} \bigg|_{Q} = \frac{I_C}{V_T} $$
ここで $V_T = kT/q \approx 26 \, \text{mV}$(室温)は熱電圧です。$I_C = 2 \, \text{mA}$ の場合、$g_m = 2 \times 10^{-3} / 26 \times 10^{-3} \approx 76.9 \, \text{mS}$ となります。この式から、$g_m$ は動作点の $I_C$ に比例することがわかります。電流を増やせば利得を上げられるという、直感に合う結果です。
入力抵抗 $r_\pi$ は、ベースから見た小信号抵抗です。ベース電流 $i_b = i_c/\beta = g_m v_{be}/\beta$ の関係から、次のように求まります。
$$ r_\pi = \frac{v_{be}}{i_b} = \frac{\beta}{g_m} = \frac{\beta V_T}{I_C} $$
先ほどの設計例($I_C = 2 \, \text{mA}$, $\beta = 100$)では $r_\pi = 100 \times 26 / 2 = 1{,}300 \, \Omega = 1.3 \, \text{k}\Omega$ です。
出力抵抗 $r_o$ は、アーリー効果(チャネル長変調)による有限の出力コンダクタンスを表します。
$$ r_o = \frac{V_A + V_{CE}}{I_C} \approx \frac{V_A}{I_C} $$
$V_A$(アーリー電圧)はトランジスタ固有の値で、典型的には50〜200Vです。$V_A = 100 \, \text{V}$ の場合、$r_o = 100/0.002 = 50 \, \text{k}\Omega$ です。
エミッタ接地増幅器の小信号等価回路
これらのパラメータを使って、エミッタ接地増幅器の小信号等価回路を構成します。交流解析では、直流電源 $V_{CC}$ はグランドに落ち、結合コンデンサ(入力・出力)とバイパスコンデンサ(エミッタ抵抗をバイパス)は短絡とみなせます(十分低い周波数に対して)。
等価回路は次のように構成されます。入力側では、信号源から $R_{BB} = R_1 \| R_2$ と $r_\pi$ の並列回路を通じて $v_{be}$ が印加されます。出力側では、電流制御電流源 $g_m v_{be}$ が $R_C$ と $r_o$ の並列負荷に電流を流します。
電圧利得を求めましょう。出力電圧は次のとおりです。
$$ v_{out} = -g_m v_{be} (R_C \| r_o) $$
負号は、コレクタ電流が増加すると $R_C$ での電圧降下が増え、$V_{CE}$(出力電圧)が減少するためです。つまり、エミッタ接地増幅器は反転増幅器です。
入力電圧 $v_{in}$ とベース-エミッタ間電圧 $v_{be}$ の関係は次のとおりです(バイアス抵抗による分圧を考慮)。
$$ v_{be} = v_{in} \cdot \frac{R_{BB} \| r_\pi}{R_s + R_{BB} \| r_\pi} $$
$R_s$ は信号源の出力インピーダンスです。簡単のため $R_s = 0$ とすると $v_{be} = v_{in}$ となり、電圧利得は次のように表されます。
$$ A_v = \frac{v_{out}}{v_{in}} = -g_m (R_C \| r_o) $$
$r_o \gg R_C$ の場合(通常この条件が成り立つ)、$R_C \| r_o \approx R_C$ と近似でき、次の簡潔な式が得られます。
$$ A_v \approx -g_m R_C = -\frac{I_C R_C}{V_T} $$
先ほどの設計例では $A_v \approx -76.9 \times 10^{-3} \times 2{,}400 = -184.6$(約 $-45.3 \, \text{dB}$)です。入力の10 mVが約1.85 Vに増幅されることになります。
エミッタ抵抗がバイパスされていない場合
実際の回路では、バイパスコンデンサを省略して $R_E$ を交流的にも残すことがあります。これにより利得は下がりますが、利得の安定性やリニアリティが大幅に改善されます。この場合、等価回路のエミッタ側に $R_E$ が挿入され、利得は次のようになります。
$$ A_v = -\frac{g_m R_C}{1 + g_m R_E} \approx -\frac{R_C}{R_E} \quad (g_m R_E \gg 1 \text{ の場合}) $$
$g_m R_E \gg 1$ の近似が成り立つとき、利得はトランジスタのパラメータ($g_m$, $\beta$)に依存せず、外付け抵抗の比だけで決まります。これは非常に実用的で、部品の精度だけで利得を制御できます。$R_C = 2.4 \, \text{k}\Omega$, $R_E = 620 \, \Omega$ の場合、$A_v \approx -3.87$ です。利得は劇的に下がりましたが、$\beta$ や温度が変わっても利得はほぼ変化しません。
エミッタ接地増幅器の設計と解析の手法が理解できました。同じ考え方はMOSFETにも適用できます。次は、ソース接地増幅器の小信号解析を見ていきましょう。
ソース接地増幅器
MOSFETの小信号パラメータ
MOSFETの場合、ゲート電流は理想的にはゼロですから、入力インピーダンスは非常に高く(実質的に無限大)、$r_\pi$ に相当するパラメータは存在しません。これはバイポーラトランジスタとの大きな違いであり、MOSFETアンプの利点の一つです。
MOSFETの相互コンダクタンスは、飽和領域でのドレイン電流 $I_D = \frac{1}{2} \mu_n C_{ox} \frac{W}{L} (V_{GS} – V_{th})^2$ をゲート-ソース間電圧で微分して求めます。
$$ g_m = \frac{\partial I_D}{\partial V_{GS}} \bigg|_{Q} = \mu_n C_{ox} \frac{W}{L} (V_{GS} – V_{th}) = \sqrt{2 \mu_n C_{ox} \frac{W}{L} \cdot I_D} $$
2番目の等号では、$I_D$ の式を代入して書き直しました。バイポーラとの違いに注目してください。BJTでは $g_m = I_C/V_T$ と電流に線形比例しますが、MOSFETでは $g_m \propto \sqrt{I_D}$ と平方根に比例します。同じ電流では、一般にバイポーラのほうが高い $g_m$ を持ちます。
出力抵抗はチャネル長変調パラメータ $\lambda$ を使って次のように表されます。
$$ r_o = \frac{1}{\lambda I_D} $$
ソース接地増幅器の利得
ソース接地増幅器の小信号等価回路は、エミッタ接地と構造的に同じです。ただし、入力にはゲート電流が流れないため、信号源からの分圧損失が小さいという利点があります。
ソース抵抗がバイパスされている場合の電圧利得は次のとおりです。
$$ A_v = -g_m (R_D \| r_o) $$
ソース抵抗 $R_S$ がバイパスされていない場合は次のようになります。
$$ A_v = -\frac{g_m R_D}{1 + g_m R_S} $$
$g_m R_S \gg 1$ のとき、利得は $A_v \approx -R_D/R_S$ となり、エミッタ接地の場合と同じく外付け抵抗比で決まります。
バイポーラとMOSFETの比較
ここで、両者の特性を整理しておきましょう。
| 特性 | エミッタ接地(BJT) | ソース接地(MOSFET) |
|---|---|---|
| 入力インピーダンス | 中程度($r_\pi = \beta/g_m$、数k$\Omega$) | 非常に高い(理想的に無限大) |
| $g_m$ | $I_C/V_T$(電流に比例) | $\sqrt{2 k_n I_D}$($\sqrt{I_D}$ に比例) |
| 同じ電流での $g_m$ | 高い | 低い |
| 利得 | $-g_m R_C$ | $-g_m R_D$ |
| バイアスの安定性 | $\beta$ 依存 | $V_{th}$ 依存 |
| 用途 | 低雑音・高利得が必要な場面 | 高入力インピーダンス・集積回路 |
増幅器の直流的な設計と中域の利得解析が完了しました。しかし、実際の増幅器は全ての周波数で同じ利得を持つわけではありません。次は、周波数によって利得がどう変化するかを見ていきます。
周波数特性
低域遮断と高域遮断
増幅器の周波数応答は、大きく3つの領域に分かれます。
- 低域遮断領域: 結合コンデンサやバイパスコンデンサのインピーダンスが大きくなり、利得が低下
- 中域帯域(ミッドバンド): コンデンサが理想的に動作し、設計した利得が得られる
- 高域遮断領域: トランジスタの内部容量(寄生容量)によって利得が低下
低域遮断は、結合コンデンサの値を大きくすればいくらでも低い周波数まで延ばせます。本質的に重要なのは高域遮断で、これはトランジスタの物理的な限界によって決まります。
ミラー効果
高域遮断を理解するためのカギとなるのがミラー効果です。
バイポーラトランジスタには、ベース-コレクタ間に内部容量 $C_\mu$(コレクタ接合容量)が存在します。この容量は物理的には小さい値(数pF)ですが、増幅器の入力から見ると驚くほど大きな容量として振る舞います。
なぜでしょうか? $C_\mu$ の一端はベース(入力)に、もう一端はコレクタ(出力)に接続されています。入力電圧が $\Delta v$ だけ増加すると、反転増幅のため出力電圧は $-A_v \Delta v$ だけ変化します。したがって、$C_\mu$ の両端の電圧変化は $\Delta v – (-A_v \Delta v) = (1 + A_v) \Delta v$ になります。
コンデンサに流れる電流は端子間電圧の変化に比例しますから、$C_\mu$ には「本来の $(1 + A_v)$ 倍」の電流が流れることになります。これは、入力側から見ると、$C_\mu$ が $(1 + |A_v|)$ 倍に拡大されたように見えるということです。この現象をミラー効果と呼び、入力から見た等価容量をミラー容量と呼びます。
$$ C_{Miller} = C_\mu (1 + |A_v|) $$
例えば、$C_\mu = 2 \, \text{pF}$, $|A_v| = 100$ の場合、$C_{Miller} = 2 \times 101 = 202 \, \text{pF}$ になります。たった2 pFの容量が、入力から見ると200 pFを超える容量に化けるのです。
高域遮断周波数
入力側の全容量は、ベース-エミッタ間容量 $C_\pi$ とミラー容量 $C_{Miller}$ の和になります。
$$ C_{in} = C_\pi + C_\mu(1 + |A_v|) $$
この容量と入力側の等価抵抗 $R_{in}$ がRC低域フィルタを形成し、高域遮断周波数($-3 \, \text{dB}$ 周波数)は次のように求まります。
$$ f_H = \frac{1}{2\pi R_{in} C_{in}} $$
ここで $R_{in}$ は信号源抵抗 $R_s$、バイアス抵抗 $R_{BB}$、トランジスタの入力抵抗 $r_\pi$ の合成です。
$$ R_{in} = R_s \| R_{BB} \| r_\pi $$
出力側にもミラー効果による容量が現れますが、通常は $(1 + 1/|A_v|) C_\mu \approx C_\mu$ と小さいため、入力側の支配的なポールに比べて高い周波数にあり、高域遮断は主に入力側のミラー容量で決まります。
利得-帯域幅積
ミラー効果から、興味深いトレードオフが見えてきます。利得 $|A_v|$ を大きくすると $C_{Miller}$ が増加し、$f_H$ が低下します。つまり、利得と帯域幅はトレードオフの関係にあります。
この関係を定量化するのが利得-帯域幅積(GBW: Gain-Bandwidth Product)です。
$$ \text{GBW} = |A_v| \times f_H \approx \text{const} $$
GBWはトランジスタの物理的特性で決まる定数で、設計者がいかに巧みに利得と帯域幅を配分するかという問題になります。高い利得が必要だが広い帯域幅も欲しいという場合には、多段増幅が解決策となります。
周波数特性の理論的な理解ができたところで、次は多段増幅について見ていきましょう。
多段増幅
なぜ多段にするのか
単一段の増幅器で得られる利得には実用的な上限があります。例えば、エミッタ接地増幅器で $A_v = -200$ を得ることはできますが、そのためには高い $g_m$(つまり大きな $I_C$)と大きな $R_C$ が必要で、電源電圧や消費電力の制約に引っかかります。
一方、利得20の増幅器を3段カスケード接続すれば、全体の利得は $20 \times 20 \times 20 = 8{,}000$ になります。dBで表すと $26 + 26 + 26 = 78 \, \text{dB}$ です。各段の設計は楽で、しかも合計では非常に大きな利得が得られます。
カスケード接続の利得
多段増幅器の全体利得は、各段の利得の積になります。
$$ A_{v,total} = A_{v1} \times A_{v2} \times \cdots \times A_{vn} $$
ただし、これは各段が次段の入力インピーダンスに影響されないという理想的な場合です。実際には、次段の入力インピーダンスが前段の負荷として作用し、利得が低下します(負荷効果)。
前段の出力抵抗を $R_{out,1}$、次段の入力抵抗を $R_{in,2}$ とすると、段間の電圧分圧により次のような減衰が生じます。
$$ \text{段間減衰} = \frac{R_{in,2}}{R_{out,1} + R_{in,2}} $$
この負荷効果を軽減するためには、各段の間にバッファ(エミッタフォロワやソースフォロワ — 電圧利得はほぼ1だが、出力インピーダンスが低い)を挿入する方法があります。
多段増幅の周波数特性
$n$ 段の同一増幅器をカスケード接続した場合、全体の $-3 \, \text{dB}$ 帯域幅は各段の帯域幅より狭くなります。各段の $-3 \, \text{dB}$ 帯域幅が $f_H$ のとき、$n$ 段全体の帯域幅は次の式で近似されます。
$$ f_{H,total} = f_H \sqrt{2^{1/n} – 1} $$
例えば、3段カスケードでは $f_{H,total} = f_H \sqrt{2^{1/3} – 1} \approx 0.51 f_H$ となります。各段の帯域幅の約半分に縮小します。
ここまでで、増幅回路の理論的な枠組みが整いました。次は、Pythonを使ってこれらの理論を数値的に検証し、可視化してみましょう。
Pythonでの小信号解析と周波数応答シミュレーション
動作点の計算と利得の確認
まず、電圧分割バイアス回路の動作点と小信号パラメータを計算し、各パラメータが$\beta$に対してどの程度安定かを確認します。
import numpy as np
import matplotlib.pyplot as plt
# 回路パラメータ
VCC = 12.0 # 電源電圧 [V]
R1 = 51e3 # バイアス抵抗1 [Ω]
R2 = 10e3 # バイアス抵抗2 [Ω]
RC = 2.4e3 # コレクタ抵抗 [Ω]
RE = 620.0 # エミッタ抵抗 [Ω]
VBE = 0.7 # ベース-エミッタ電圧 [V]
VT = 26e-3 # 熱電圧(室温) [V]
VA = 100.0 # アーリー電圧 [V]
# βを変化させて動作点の安定性を確認
beta_values = np.arange(50, 301, 1)
# テブナン等価回路
VBB = VCC * R2 / (R1 + R2)
RBB = R1 * R2 / (R1 + R2)
IC_list = []
VCE_list = []
Av_list = []
gm_list = []
for beta in beta_values:
IB = (VBB - VBE) / (RBB + (beta + 1) * RE)
IC = beta * IB
IE = (beta + 1) * IB
VCE = VCC - IC * RC - IE * RE
gm = IC / VT
r_pi = beta / gm
ro = VA / IC
# エミッタバイパスあり(交流的にREを短絡)
Av = -gm * (RC * ro) / (RC + ro)
IC_list.append(IC * 1e3) # mA単位
VCE_list.append(VCE)
Av_list.append(Av)
gm_list.append(gm * 1e3) # mS単位
fig, axes = plt.subplots(2, 2, figsize=(12, 9))
# IC vs β
axes[0, 0].plot(beta_values, IC_list, 'b-', linewidth=2)
axes[0, 0].set_xlabel(r'$\beta$ (hFE)', fontsize=12)
axes[0, 0].set_ylabel(r'$I_C$ [mA]', fontsize=12)
axes[0, 0].set_title('Collector Current vs Beta', fontsize=13)
axes[0, 0].grid(True, alpha=0.3)
# VCE vs β
axes[0, 1].plot(beta_values, VCE_list, 'r-', linewidth=2)
axes[0, 1].set_xlabel(r'$\beta$ (hFE)', fontsize=12)
axes[0, 1].set_ylabel(r'$V_{CE}$ [V]', fontsize=12)
axes[0, 1].set_title('Collector-Emitter Voltage vs Beta', fontsize=13)
axes[0, 1].grid(True, alpha=0.3)
# gm vs β
axes[1, 0].plot(beta_values, gm_list, 'g-', linewidth=2)
axes[1, 0].set_xlabel(r'$\beta$ (hFE)', fontsize=12)
axes[1, 0].set_ylabel(r'$g_m$ [mS]', fontsize=12)
axes[1, 0].set_title('Transconductance vs Beta', fontsize=13)
axes[1, 0].grid(True, alpha=0.3)
# Av vs β
axes[1, 1].plot(beta_values, Av_list, 'm-', linewidth=2)
axes[1, 1].set_xlabel(r'$\beta$ (hFE)', fontsize=12)
axes[1, 1].set_ylabel(r'$A_v$', fontsize=12)
axes[1, 1].set_title('Voltage Gain vs Beta', fontsize=13)
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('bias_stability.png', dpi=150, bbox_inches='tight')
plt.show()
# 数値確認
print(f"VBB = {VBB:.2f} V, RBB = {RBB/1e3:.2f} kΩ")
print(f"\nβ=50: IC={IC_list[0]:.3f} mA, VCE={VCE_list[0]:.2f} V, Av={Av_list[0]:.1f}")
print(f"β=100: IC={IC_list[50]:.3f} mA, VCE={VCE_list[50]:.2f} V, Av={Av_list[50]:.1f}")
print(f"β=300: IC={IC_list[250]:.3f} mA, VCE={VCE_list[250]:.2f} V, Av={Av_list[250]:.1f}")
print(f"\nIC変動率(β=50→300): {(IC_list[250]-IC_list[0])/IC_list[50]*100:.1f}%")
上のグラフから、電圧分割バイアスの安定化効果が明確に読み取れます。$\beta$ が50から300まで6倍に変化しても、$I_C$ の変動は比較的小さく(設計が適切であれば10〜20%程度)に抑えられています。これは、エミッタ抵抗 $R_E$ による電流帰還が効いているためです。対照的に、固定バイアス($R_E = 0$)では $I_C$ は $\beta$ にそのまま比例して変化するため、動作点が大きくずれてしまいます。$V_{CE}$ も比較的安定しており、$\beta$ の変動によって飽和領域に落ちてしまうリスクが低いことがわかります。利得 $A_v$ は $I_C$ の変動を反映して若干変化しますが、許容範囲内です。
エミッタ抵抗有無による利得比較
次に、エミッタバイパスコンデンサの有無が利得にどう影響するかを確認します。
import numpy as np
import matplotlib.pyplot as plt
# 回路パラメータ
VCC = 12.0
RC = 2.4e3
RE = 620.0
VT = 26e-3
VA = 100.0
# 動作点(β=100)
IC = 1.97e-3 # 設計値に近い値
gm = IC / VT
ro = VA / IC
# バイパスあり
Av_bypass = -gm * (RC * ro) / (RC + ro)
# バイパスなし
Av_no_bypass = -gm * RC / (1 + gm * RE)
# REを変化させた場合の利得変化(バイパスなし)
RE_values = np.linspace(0, 2000, 200)
Av_vs_RE = [-gm * RC / (1 + gm * r) for r in RE_values]
Av_approx = [-RC / r if r > 0 else -gm * RC for r in RE_values]
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
# 左: REによる利得変化
axes[0].plot(RE_values, np.abs(Av_vs_RE), 'b-', linewidth=2, label='Exact: $g_m R_C / (1 + g_m R_E)$')
axes[0].plot(RE_values[1:], np.abs(Av_approx[1:]), 'r--', linewidth=2, label='Approx: $R_C / R_E$')
axes[0].axvline(x=620, color='gray', linestyle=':', alpha=0.7, label=f'$R_E = 620\\,\\Omega$')
axes[0].set_xlabel(r'$R_E$ [$\Omega$]', fontsize=12)
axes[0].set_ylabel(r'$|A_v|$', fontsize=12)
axes[0].set_title('Voltage Gain vs Emitter Resistance', fontsize=13)
axes[0].legend(fontsize=10)
axes[0].grid(True, alpha=0.3)
axes[0].set_ylim([0, 200])
# 右: βによる利得変化(バイパスあり vs なし)
beta_vals = np.arange(50, 301, 1)
Av_with = []
Av_without = []
for b in beta_vals:
IB = (1.97 / (8.36 + (b+1)*0.62)) * 1e-3 # 簡略化
ic = b * IB
g = ic / VT
r = VA / ic
Av_with.append(abs(g * (RC * r) / (RC + r)))
Av_without.append(abs(g * RC / (1 + g * RE)))
axes[1].plot(beta_vals, Av_with, 'b-', linewidth=2, label='With bypass (CE)')
axes[1].plot(beta_vals, Av_without, 'r-', linewidth=2, label='Without bypass')
axes[1].set_xlabel(r'$\beta$ (hFE)', fontsize=12)
axes[1].set_ylabel(r'$|A_v|$', fontsize=12)
axes[1].set_title('Gain Stability: Bypass vs No Bypass', fontsize=13)
axes[1].legend(fontsize=10)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('gain_comparison.png', dpi=150, bbox_inches='tight')
plt.show()
print(f"バイパスあり: Av = {Av_bypass:.1f} ({20*np.log10(abs(Av_bypass)):.1f} dB)")
print(f"バイパスなし: Av = {Av_no_bypass:.2f} ({20*np.log10(abs(Av_no_bypass)):.1f} dB)")
print(f"RC/RE近似: Av ≈ {-RC/RE:.2f}")
左のグラフから、$R_E$ を増やすと利得が急速に低下することが読み取れます。$R_E = 0$(バイパスコンデンサで短絡した場合に相当)では $|A_v| \approx 182$ ですが、$R_E = 620 \, \Omega$ では $|A_v| \approx 3.9$ まで落ちます。一方で、$R_E$ が十分大きい領域では厳密式(青)と近似式 $R_C/R_E$(赤破線)がよく一致しており、$g_m R_E \gg 1$ の近似の妥当性が確認できます。
右のグラフがより重要です。バイパスコンデンサありの場合(青)、$\beta$ の変動に伴って利得が大きく変化しています。一方、バイパスなしの場合(赤)では、利得は $\beta$ によらずほぼ一定です。これが $R_E$ を交流的に残す最大のメリットです。利得を犠牲にして安定性を得るというトレードオフが明確に可視化されています。
周波数応答のボード線図
最後に、ミラー効果を含めた増幅器の周波数応答をシミュレーションします。
import numpy as np
import matplotlib.pyplot as plt
# 回路パラメータ
RC = 2.4e3
RE = 620.0
VT = 26e-3
VA = 100.0
IC = 1.97e-3
beta = 100
# 小信号パラメータ
gm = IC / VT
r_pi = beta / gm
ro = VA / IC
# トランジスタ寄生容量(典型値)
C_pi = 15e-12 # ベース-エミッタ容量 [F]
C_mu = 2e-12 # ベース-コレクタ容量 [F]
# 結合・バイパスコンデンサ
C_in = 10e-6 # 入力結合 [F]
C_out = 10e-6 # 出力結合 [F]
C_E = 100e-6 # エミッタバイパス [F]
# 信号源・負荷
Rs = 1e3 # 信号源抵抗 [Ω]
RL = 10e3 # 負荷抵抗 [Ω]
R1 = 51e3
R2 = 10e3
RBB = R1 * R2 / (R1 + R2)
# 中域利得(バイパスあり)
Av_mid = gm * (RC * ro * RL) / (RC * ro + RC * RL + ro * RL)
# ミラー効果
C_Miller_in = C_mu * (1 + gm * (RC * ro * RL) / (RC * ro + RC * RL + ro * RL))
C_Miller_out = C_mu * (1 + 1 / (gm * (RC * ro * RL) / (RC * ro + RC * RL + ro * RL)))
# 入力側の等価抵抗と容量
R_in = 1 / (1/Rs + 1/RBB + 1/r_pi) # 直列ではなく、Rsは直列、RBB||r_piが並列
# 正確には: Rsと(RBB||r_pi)の直列からr_piにかかる時定数
R_pi_eff = RBB * r_pi / (RBB + r_pi)
R_in_total = Rs * R_pi_eff / (Rs + R_pi_eff) # テブナン抵抗
# ポール周波数
C_in_total = C_pi + C_Miller_in
f_H = 1 / (2 * np.pi * R_in_total * C_in_total)
# 低域のポール周波数(結合コンデンサによる)
f_L_in = 1 / (2 * np.pi * (Rs + R_pi_eff) * C_in)
f_L_out = 1 / (2 * np.pi * (RC + RL) * C_out)
# エミッタバイパスのポール
Re_eff = 1 / (1/RE + 1/(r_pi/(beta+1) + Rs/(beta+1)))
f_L_E = 1 / (2 * np.pi * Re_eff * C_E)
# 周波数応答の計算
freq = np.logspace(0, 9, 1000) # 1 Hz ~ 1 GHz
omega = 2 * np.pi * freq
# 簡略化した伝達関数(主要ポールのみ)
# 低域: 入力結合、出力結合、エミッタバイパスの3つのポール
# 高域: ミラー効果による入力ポール
H_low_in = 1j * omega * (Rs + R_pi_eff) * C_in / (1 + 1j * omega * (Rs + R_pi_eff) * C_in)
H_low_out = 1j * omega * (RC + RL) * C_out / (1 + 1j * omega * (RC + RL) * C_out)
# エミッタバイパスの効果(低域ではREが残り利得が下がる)
Z_E = RE / (1 + 1j * omega * RE * C_E)
Av_freq = gm * (RC * ro * RL) / (RC * ro + RC * RL + ro * RL) / (1 + gm * Z_E)
Av_freq = Av_freq * (1 + gm * 0) / 1 # バイパス完全時が基準
# 高域
H_high = 1 / (1 + 1j * omega * R_in_total * C_in_total)
# 全体(簡略モデル)
# 中域利得 × 低域ポール × 高域ポール
Av_total = Av_mid * H_low_in * H_low_out * H_high
# 利得[dB]と位相
gain_dB = 20 * np.log10(np.abs(Av_total))
phase_deg = np.angle(Av_total, deg=True)
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(12, 8), sharex=True)
# ゲイン
ax1.semilogx(freq, gain_dB, 'b-', linewidth=2)
ax1.axhline(y=20*np.log10(Av_mid) - 3, color='r', linestyle='--', alpha=0.7, label='-3 dB')
ax1.axvline(x=f_H, color='g', linestyle=':', alpha=0.7, label=f'$f_H$ = {f_H/1e6:.1f} MHz')
ax1.set_ylabel('Gain [dB]', fontsize=12)
ax1.set_title('Bode Plot: Common-Emitter Amplifier', fontsize=14)
ax1.legend(fontsize=11)
ax1.grid(True, which='both', alpha=0.3)
ax1.set_ylim([0, 50])
# 位相
ax2.semilogx(freq, phase_deg, 'b-', linewidth=2)
ax2.axhline(y=-45, color='gray', linestyle='--', alpha=0.5)
ax2.axhline(y=-90, color='gray', linestyle='--', alpha=0.5)
ax2.set_xlabel('Frequency [Hz]', fontsize=12)
ax2.set_ylabel('Phase [deg]', fontsize=12)
ax2.grid(True, which='both', alpha=0.3)
ax2.set_ylim([-200, 50])
plt.tight_layout()
plt.savefig('bode_plot.png', dpi=150, bbox_inches='tight')
plt.show()
print(f"中域利得: |Av| = {Av_mid:.1f} ({20*np.log10(Av_mid):.1f} dB)")
print(f"高域遮断周波数: f_H = {f_H/1e6:.2f} MHz")
print(f"ミラー容量: C_Miller = {C_Miller_in*1e12:.1f} pF")
print(f"入力容量合計: C_in = {C_in_total*1e12:.1f} pF")
print(f"GBW = {Av_mid * f_H / 1e6:.1f} MHz")
ボード線図から、増幅器の周波数応答の全体像が読み取れます。
-
低域(数Hz〜数十Hz): 結合コンデンサの効果で利得が $+20 \, \text{dB/dec}$ の傾きで上昇しています。低域遮断周波数以下では信号がコンデンサを通過できず、利得が急激に低下します。
-
中域帯域(数十Hz〜数MHz): 利得は一定で、設計した値(約40〜45 dB)を維持しています。この帯域が実際に使用される周波数範囲です。
-
高域(数MHz以上): ミラー効果による入力容量のため、利得が $-20 \, \text{dB/dec}$ の傾きで低下しています。高域遮断周波数 $f_H$ は、$C_\mu$ がミラー効果によって増幅され、数百pFの等価容量として働くことで決まっています。
位相特性を見ると、低域では結合コンデンサによる $+90°$ の位相進みが、高域では寄生容量による $-90°$ の位相遅れが生じています。中域帯域では位相は一定(反転増幅のため $-180°$ 付近)です。
BJTとMOSFETの利得比較
最後に、同じバイアス電流でのBJTとMOSFETの利得特性を比較します。
import numpy as np
import matplotlib.pyplot as plt
# 共通パラメータ
VT = 26e-3 # 熱電圧
RD = RC = 2.4e3 # 負荷抵抗
# MOSFETパラメータ
kn = 2e-3 # μnCox(W/L) [A/V^2]
# ドレイン電流(=コレクタ電流)を変化
ID_values = np.linspace(0.1e-3, 5e-3, 100)
# BJT: gm = IC/VT
gm_bjt = ID_values / VT
Av_bjt = gm_bjt * RC
# MOSFET: gm = sqrt(2*kn*ID)
gm_mosfet = np.sqrt(2 * kn * ID_values)
Av_mosfet = gm_mosfet * RD
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 5))
# gm比較
ax1.plot(ID_values * 1e3, gm_bjt * 1e3, 'b-', linewidth=2, label='BJT: $I_C/V_T$')
ax1.plot(ID_values * 1e3, gm_mosfet * 1e3, 'r-', linewidth=2, label=r'MOSFET: $\sqrt{2k_nI_D}$')
ax1.set_xlabel('Drain/Collector Current [mA]', fontsize=12)
ax1.set_ylabel(r'$g_m$ [mS]', fontsize=12)
ax1.set_title('Transconductance Comparison', fontsize=13)
ax1.legend(fontsize=11)
ax1.grid(True, alpha=0.3)
# 利得比較
ax2.plot(ID_values * 1e3, Av_bjt, 'b-', linewidth=2, label='BJT')
ax2.plot(ID_values * 1e3, Av_mosfet, 'r-', linewidth=2, label='MOSFET')
ax2.set_xlabel('Drain/Collector Current [mA]', fontsize=12)
ax2.set_ylabel(r'$|A_v| = g_m R_C$', fontsize=12)
ax2.set_title('Voltage Gain Comparison', fontsize=13)
ax2.legend(fontsize=11)
ax2.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('bjt_vs_mosfet.png', dpi=150, bbox_inches='tight')
plt.show()
# 数値比較(IC = ID = 2 mA)
ID_ref = 2e-3
gm_b = ID_ref / VT
gm_m = np.sqrt(2 * kn * ID_ref)
print(f"ID = IC = 2 mA での比較:")
print(f" BJT gm = {gm_b*1e3:.1f} mS, |Av| = {gm_b*RC:.1f}")
print(f" MOSFET gm = {gm_m*1e3:.1f} mS, |Av| = {gm_m*RD:.1f}")
print(f" gm比(BJT/MOSFET) = {gm_b/gm_m:.1f}")
このグラフから、BJTとMOSFETの根本的な違いが明確に見えます。BJTの $g_m$ は電流に対して線形に増加する($g_m = I_C / V_T$)のに対し、MOSFETの $g_m$ は $\sqrt{I_D}$ に比例するため、同じ電流ではBJTのほうが圧倒的に大きな $g_m$ を持ちます。$I_D = 2 \, \text{mA}$ では、BJTは約77 mS、MOSFETは約2.8 mSとなり、30倍近い差があります。
この差は利得にも直結します。同じ負荷抵抗で比較すると、BJTのほうがはるかに高い利得を達成できます。しかし、MOSFETには入力インピーダンスが極めて高い、集積化に適している、電力消費が小さいといった利点があり、現代の集積回路ではMOSFETが主流です。高い利得が必要な場合は、多段増幅やカスコード接続で補償します。
まとめ
本記事では、トランジスタ増幅回路の設計と解析を体系的に解説しました。
- 増幅の基本: 増幅器はエネルギーを生成するのではなく、電源のエネルギーを入力信号の形に整形する装置である。利得は電圧・電流・電力の3種類があり、dBで表現される
- バイアス設計: 電圧分割バイアスとエミッタ抵抗による電流帰還で、$\beta$ の変動に対して安定な動作点を実現できる。$(\beta+1)R_E \gg R_{BB}$ が安定条件
- 小信号解析: 動作点の周りでの線形近似により、$g_m$, $r_\pi$, $r_o$ の3つのパラメータでトランジスタの交流的な振る舞いを記述できる
- 利得のトレードオフ: エミッタ(ソース)抵抗をバイパスすれば高利得だが不安定、バイパスしなければ低利得だが安定。$R_E$ なしの利得は $-g_m R_C$、ありの利得は $-R_C/R_E$
- 周波数特性: ミラー効果により、$C_\mu$ が $(1+|A_v|)$ 倍に拡大されて見え、高域遮断を支配する。利得と帯域幅はトレードオフ(GBW一定)
増幅器の設計を理解したことで、次のステップとして帰還(フィードバック)の概念が自然に浮かびます。バイパスなしのエミッタ抵抗が利得を安定化させる仕組みは、実は帰還の一種です。帰還を体系的に理解することで、より高性能な増幅器の設計が可能になります。
次のステップとして、以下の記事も参考にしてください。