衛星から地上局へ届く電波の電力は、しばしば $-130$ dBm($10^{-16}$ W のオーダー)という途方もなく微弱なレベルです。この信号を増幅して復調器に渡すまでの間に、受信機内部の素子は熱雑音を上乗せしてしまいます。同じ受信機でも、初段にどんな増幅器を置くか、各段の利得をどう配分するかによって、最終的な信号対雑音比(SNR)は 10 dB 以上変わることがあります。では、複数の増幅器・ミキサ・減衰器を直列につないだとき、系全体の雑音性能はどう決まるのでしょうか。その答えを与えるのが、ハラルド・フリス(Harald Friis)が 1944 年に示した フリスの雑音指数公式(Friis formula for noise figure) です。
この公式を理解すると、次のような実務的な問いに定量的に答えられるようになります。
- 受信機フロントエンドの設計: なぜ衛星受信機やレーダー受信機は、アンテナ直下に低雑音増幅器(LNA)を置くのか。アンテナから受信機本体まで距離がある場合、ケーブルを引いてから増幅するのと、アンテナ直下で増幅してからケーブルを引くのとで、なぜ性能が劇的に変わるのか
- 無線通信のリンクバジェット: 受信機の総合雑音指数は、システムノイズ温度を通じて通信可能距離やデータレートの上限を決めます。5G 基地局や深宇宙通信のリンク設計に直結します
本記事では、雑音指数(noise figure)の定義を SNR の劣化として復習したうえで、2 段縦続の出力雑音電力を一行ずつ足し合わせ、フリスの公式 $$ F_{\text{total}} = F_1 + \frac{F_2 – 1}{G_1} + \frac{F_3 – 1}{G_1 G_2} + \cdots $$ を導出します。そして、初段の利得 $G_1$ が後段の雑音寄与を割り算で抑え込む構造を読み解き、Python で総合雑音指数の計算・初段利得に対する感度曲線・利得配分の最適化を実装して、「初段に高利得・低雑音の段を置け」という設計指針を数値で裏付けます。
本記事の内容
- 雑音指数の定義(入出力 SNR 比)と雑音温度との関係の復習
- 2 段縦続の出力雑音電力を加算してフリスの公式を一行ずつ導出
- 初段利得 $G_1$ が後段寄与を抑える効果と、設計上の意味
- Python 実装: 段リストから総合雑音指数を計算する関数
- 初段 LNA 利得を振った感度曲線の可視化
- 各段の雑音指数を固定して利得配分を最適化する数値実験
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
雑音指数とは
増幅器は信号を大きくしてくれますが、無料ではありません。増幅器の中では抵抗の熱運動やトランジスタの内部雑音が新たな「ノイズ」を生み、それも一緒に増幅されて出力されます。理想的な増幅器なら入力の信号とノイズをそっくり同じ倍率で大きくするだけですが、現実の増幅器は自分自身のノイズを上乗せするため、出力側では信号に対するノイズの割合(雑音の相対量)が入力時よりも悪化します。
この「増幅器を通すと SNR がどれだけ悪くなるか」を一つの数値で表したのが雑音指数です。たとえるなら、静かな会議室(入力)でクリアに聞こえていた話し声が、ざわついた廊下に置かれたスピーカー(増幅器)を通すと聞き取りにくくなるようなものです。スピーカー自身がノイズを足してしまうために、相対的に声が埋もれてしまうわけです。雑音指数は、このスピーカーがどれだけ「うるさい」かを定量化する指標だと考えてください。
雑音係数の定義
厳密な定義を述べます。雑音係数(noise factor)$F$ は、入力の信号対雑音比 $\mathrm{SNR}_{\text{in}}$ と出力の信号対雑音比 $\mathrm{SNR}_{\text{out}}$ の比として定義されます。
$$ F = \frac{\mathrm{SNR}_{\text{in}}}{\mathrm{SNR}_{\text{out}}} $$
理想的な(雑音を一切足さない)増幅器では $\mathrm{SNR}_{\text{in}} = \mathrm{SNR}_{\text{out}}$ なので $F = 1$ です。現実の増幅器は必ず雑音を足すため $\mathrm{SNR}_{\text{out}} < \mathrm{SNR}_{\text{in}}$ となり、$F > 1$ になります。$F$ が 1 に近いほど雑音性能が良い、という関係です。
ここで一つ注意すべき約束事があります。この定義は、入力雑音が標準温度 $T_0 = 290$ K の熱雑音であるという前提のもとで使われます。これは IEEE が定めた標準条件で、異なる増幅器を公平に比較するための共通の「ものさし」を提供します。入力雑音電力を $N_{\text{in}}$、入力信号電力を $S_{\text{in}}$ とすると、$\mathrm{SNR}_{\text{in}} = S_{\text{in}} / N_{\text{in}}$ です。
雑音係数をデシベル表記したものが 雑音指数(noise figure, NF) です。
$$ \mathrm{NF} = 10 \log_{10} F \quad [\text{dB}] $$
たとえば $F = 2$ なら $\mathrm{NF} \approx 3.0$ dB、$F = 1.26$ なら $\mathrm{NF} \approx 1.0$ dB です。本記事では、線形量である雑音係数 $F$ を使って計算を進め、最後にデシベルへ変換する、という流れを基本とします。線形量で足し算・割り算を行い、表示のときだけ対数に直す、という使い分けが計算ミスを防ぐコツです。
雑音温度との関係
雑音係数とよく一緒に使われるのが 等価雑音温度 $T_e$ です。これは、増幅器が内部で発生する雑音を、入力側に置いた仮想的な抵抗の熱雑音に換算した温度です。増幅器の利得を $G$、帯域幅を $B$、ボルツマン定数を $k$ とすると、増幅器自身が出力に付け加える雑音電力は $G k T_e B$ と書けます。
雑音係数と雑音温度の間には、次の関係があります(この導出自体は次節の加算則の特別な場合として自然に出てきます)。
$$ F = 1 + \frac{T_e}{T_0}, \qquad T_e = (F – 1) T_0 $$
たとえば $F = 2$($\mathrm{NF} = 3$ dB)の増幅器の等価雑音温度は $T_e = (2 – 1) \times 290 = 290$ K です。$F = 1.26$($\mathrm{NF} = 1$ dB)なら $T_e \approx 75$ K となり、超低雑音 LNA の世界では雑音温度のほうが直感的に扱いやすいことが多くなります。
雑音指数の意味と表記法を押さえたところで、いよいよ本題に入りましょう。増幅器を 1 段だけ使うことはまれで、実際の受信機は増幅器・ミキサ・フィルタ・減衰器を何段も直列につなぎます。次節では、まず最もシンプルな 2 段縦続を取り上げ、出力雑音電力を地道に積み上げることでフリスの公式を導出します。
フリスの公式の導出
何を求めるのか
ゴールを明確にしておきましょう。2 つの増幅器(段 1 と段 2)が直列に接続されているとします。段 1 の利得を $G_1$、雑音係数を $F_1$、段 2 の利得を $G_2$、雑音係数を $F_2$ とします。このとき、この 2 段全体をひとつの増幅器とみなしたときの総合雑音係数 $F_{\text{total}}$ を、$F_1, F_2, G_1, G_2$ で表す ことが目標です。
考え方の骨子はこうです。雑音係数は「出力に現れる全雑音電力」を「入力雑音だけが理想増幅された雑音電力」で割った量として書き直せます。そこで、出力にたどり着く雑音電力を、(1) もともとの入力雑音由来、(2) 段 1 が足した雑音由来、(3) 段 2 が足した雑音由来、の 3 つに分けて足し合わせれば、$F_{\text{total}}$ が求まります。利得はすべて電力利得(線形量)として扱います。
1 段の雑音係数を電力で書き直す
まず準備として、1 段の増幅器の雑音係数を出力雑音電力の言葉で表現し直します。入力雑音電力を標準温度の熱雑音 $N_0 = k T_0 B$ とします。利得 $G$、雑音係数 $F$ の増幅器に入力雑音 $N_0$ を入れると、出力の全雑音電力 $N_{\text{out}}$ は次の 2 つの和です。
$$ N_{\text{out}} = \underbrace{G N_0}_{\text{入力雑音の増幅分}} + \underbrace{N_{\text{add}}}_{\text{増幅器が足した雑音}} $$
ここで $N_{\text{add}}$ は増幅器自身が出力に付け加える雑音電力です。一方、雑音係数の定義 $F = \mathrm{SNR}_{\text{in}} / \mathrm{SNR}_{\text{out}}$ を信号と雑音の電力で書き下すと、信号は利得 $G$ 倍されるので $S_{\text{out}} = G S_{\text{in}}$ であり、
$$ F = \frac{S_{\text{in}} / N_0}{S_{\text{out}} / N_{\text{out}}} = \frac{S_{\text{in}} / N_0}{G S_{\text{in}} / N_{\text{out}}} = \frac{N_{\text{out}}}{G N_0} $$
となります。信号電力 $S_{\text{in}}$ が約分されて消える点に注目してください。これは雑音係数が信号レベルによらず、雑音の比だけで決まる量であることを意味します。この式を $N_{\text{out}}$ について解くと、
$$ N_{\text{out}} = F G N_0 $$
が得られます。すなわち「出力の全雑音電力は、入力雑音を理想増幅した値 $G N_0$ の $F$ 倍になる」ということです。
さらに、増幅器が自分で足した雑音 $N_{\text{add}}$ を取り出してみます。$N_{\text{out}} = G N_0 + N_{\text{add}}$ と $N_{\text{out}} = F G N_0$ を等しいと置くと、
$$ G N_0 + N_{\text{add}} = F G N_0 $$
両辺から $G N_0$ を引いて $N_{\text{add}}$ について解くと、
$$ N_{\text{add}} = (F – 1) G N_0 $$
この式が導出の心臓部です。増幅器が出力に付け加える雑音電力は $(F – 1) G N_0$ であり、$(F – 1)$ という因子が「理想からのずれ」を表しています。理想増幅器なら $F = 1$ で $N_{\text{add}} = 0$ です。なお、入力換算では $N_{\text{add}} / G = (F-1) N_0 = (F-1) k T_0 B = k T_e B$ となり、先ほどの $T_e = (F-1) T_0$ がここから自然に出てくることも確認できます。
2 段の出力雑音を足し合わせる
準備が整いました。段 1($G_1, F_1$)と段 2($G_2, F_2$)を直列につなぎ、入力に標準雑音 $N_0$ を与えたときの最終出力雑音電力 $N_{\text{out,total}}$ を、出力側から見て 3 つの寄与に分けて積み上げます。
まず 段 1 の出力 での雑音電力を求めます。段 1 単体に $N_0$ を入れたのですから、上で求めた $N_{\text{out}} = F G N_0$ をそのまま使って、
$$ N_1 = F_1 G_1 N_0 $$
次に、この $N_1$ が段 2 に入力されます。段 2 は受け取った入力をそのまま $G_2$ 倍する一方で、段 2 自身の雑音 $N_{\text{add},2} = (F_2 – 1) G_2 N_0$ を付け加えます。したがって最終出力の全雑音電力は、
$$ N_{\text{out,total}} = G_2 N_1 + N_{\text{add},2} $$
ここに $N_1 = F_1 G_1 N_0$ と $N_{\text{add},2} = (F_2 – 1) G_2 N_0$ を代入すると、
$$ N_{\text{out,total}} = G_2 (F_1 G_1 N_0) + (F_2 – 1) G_2 N_0 $$
共通因子 $G_2 N_0$ でくくると、見通しが良くなります。
$$ N_{\text{out,total}} = G_2 N_0 \big[ F_1 G_1 + (F_2 – 1) \big] $$
総合雑音係数を取り出す
ここで再び 1 段の関係 $N_{\text{out}} = F G N_0$ を、2 段全体に当てはめます。2 段全体の総合利得は $G_{\text{total}} = G_1 G_2$ なので、総合雑音係数 $F_{\text{total}}$ は、
$$ F_{\text{total}} = \frac{N_{\text{out,total}}}{G_{\text{total}} N_0} = \frac{G_2 N_0 \big[ F_1 G_1 + (F_2 – 1) \big]}{G_1 G_2 N_0} $$
分子と分母にある $G_2$ と $N_0$ が約分されます。残るのは、
$$ F_{\text{total}} = \frac{F_1 G_1 + (F_2 – 1)}{G_1} $$
最後に分子を $G_1$ で項別に割ると、第 1 項では $G_1$ が約分されて $F_1$ が残り、第 2 項には $1/G_1$ が掛かります。
$$ \boxed{ \; F_{\text{total}} = F_1 + \frac{F_2 – 1}{G_1} \; } $$
これが 2 段縦続のフリスの公式です。第 1 項は初段の雑音係数 $F_1$ がそのまま残り、第 2 項では後段の雑音寄与 $(F_2 – 1)$ が初段利得 $G_1$ で割られている、という構造に注目してください。この「割り算」が、本記事のすべてを支配する鍵となります。
N 段への一般化
同じ論法を 3 段、4 段と繰り返せば、一般の $N$ 段に拡張できます。3 段目を加える場合、段 3 が足す雑音 $(F_3 – 1) G_3 N_0$ は、出力に届くまでに段 3 だけを通過しますが、入力雑音や前段の雑音と公平に比較するために総合利得 $G_1 G_2 G_3$ で規格化すると、その寄与は $(F_3 – 1)/(G_1 G_2)$ となります。一般に $k$ 段目の寄与は、それより前のすべての段の利得の積で割られます。こうして得られるのが、フリスの公式の完全形です。
$$ F_{\text{total}} = F_1 + \frac{F_2 – 1}{G_1} + \frac{F_3 – 1}{G_1 G_2} + \frac{F_4 – 1}{G_1 G_2 G_3} + \cdots + \frac{F_N – 1}{\prod_{k=1}^{N-1} G_k} $$
総和記号でコンパクトに書くと、次のようになります。
$$ F_{\text{total}} = F_1 + \sum_{i=2}^{N} \frac{F_i – 1}{\displaystyle \prod_{k=1}^{i-1} G_k} $$
各項の分母にある「それより前の段の利得の積」が、後段の雑音寄与をどんどん小さくしていく、という構造が一目で読み取れます。たとえば第 5 段の雑音は、前 4 段の利得の積で割られるため、もし各段が 10 dB(10 倍)の利得なら、第 5 段の寄与は $1/10^4 = 1/10000$ に圧縮されます。
公式が導けたので、次節ではこの式が何を物語っているのか — なぜ初段がそれほど重要なのか — を、具体的な数値を入れて読み解きましょう。
初段が支配する理由
数値で実感する
フリスの公式の意味を体感するために、簡単な数値例を計算してみます。3 段の受信機を考え、各段のパラメータを次のように設定します。
| 段 | 役割 | 雑音指数 $\mathrm{NF}$ | 雑音係数 $F$ | 利得 $G$ |
|---|---|---|---|---|
| 1 | LNA | 1.0 dB | 1.259 | 20 dB(100 倍) |
| 2 | ミキサ | 8.0 dB | 6.310 | 5 dB(3.162 倍) |
| 3 | IF 増幅器 | 5.0 dB | 3.162 | 30 dB(1000 倍) |
フリスの公式に代入します。まず第 2 項は $(F_2 – 1)/G_1 = (6.310 – 1)/100 = 0.0531$ です。次に第 3 項は $(F_3 – 1)/(G_1 G_2) = (3.162 – 1)/(100 \times 3.162) = 2.162/316.2 = 0.00684$ です。これらを足すと、
$$ F_{\text{total}} = 1.259 + 0.0531 + 0.00684 = 1.319 $$
デシベルに直すと $\mathrm{NF}_{\text{total}} = 10 \log_{10}(1.319) \approx 1.20$ dB です。注目すべきは、ミキサの雑音指数が 8 dB と決して小さくないにもかかわらず、総合雑音指数はほぼ初段 LNA の 1.0 dB に張り付いている、という事実です。ミキサ単体では雑音だらけに見えても、初段で 20 dB(100 倍)増幅したあとに来るため、その寄与は $100$ で割られて無視できるほど小さくなったのです。
初段利得が「盾」になる
このメカニズムをもう一段抽象化しましょう。フリスの公式の第 2 項以降は、すべて初段利得 $G_1$(およびそれ以降の段の利得の積)で割られています。これは、初段が高利得であればあるほど、後段の雑音を「盾」のように防いでくれることを意味します。
直感的なたとえを用いると、初段の増幅は「声を最初に思い切り大きくしておく」操作に相当します。最初に十分大きな声にしておけば、その後どんなにうるさい部屋(雑音の多い後段)を通っても、声に対する相対的なノイズの割合は小さいままです。逆に、最初に増幅せず小さな声のまま後段に渡すと、後段が足すノイズに信号が埋もれてしまいます。
ここで重要な逆説的な事実があります。もし初段の利得 $G_1$ が小さい、あるいは初段が損失($G_1 < 1$)だと、後段の雑音がそのまま、あるいは増幅されて効いてしまう のです。これが、アンテナと受信機の間に長いケーブル(損失 = 利得 1 未満の段)を入れてはいけない理由です。次にこの「悪い設計」を数値で見てみましょう。
悪い設計: ケーブルを先に入れる
衛星受信のシーンで、アンテナと受信機本体が同軸ケーブルで 3 dB 分離れているとします。損失 3 dB のケーブルは、利得 $G = 10^{-3/10} \approx 0.501$(半分)で、かつ受動素子の損失は雑音係数に等しい($F = 1/G \approx 1.995$、すなわち $\mathrm{NF} \approx 3$ dB)という性質を持ちます。
設計 A(悪い): ケーブルを先に、LNA を後に置く。段構成は[ケーブル($F_1 = 1.995, G_1 = 0.501$)→ LNA($F_2 = 1.259, G_2 = 100$)→ ミキサ($F_3 = 6.310, G_3 = 3.162$)]。
$$ F_{\text{total}} = 1.995 + \frac{1.259 – 1}{0.501} + \frac{6.310 – 1}{0.501 \times 100} = 1.995 + 0.517 + 0.106 = 2.618 $$
$\mathrm{NF}_{\text{total}} \approx 4.18$ dB です。
設計 B(良い): LNA をアンテナ直下に、ケーブルを LNA の後に置く。段構成は[LNA($F_1 = 1.259, G_1 = 100$)→ ケーブル($F_2 = 1.995, G_2 = 0.501$)→ ミキサ($F_3 = 6.310, G_3 = 3.162$)]。
$$ F_{\text{total}} = 1.259 + \frac{1.995 – 1}{100} + \frac{6.310 – 1}{100 \times 0.501} = 1.259 + 0.00995 + 0.106 = 1.375 $$
$\mathrm{NF}_{\text{total}} \approx 1.38$ dB です。
設計 A と設計 B では、まったく同じ部品を使っているにもかかわらず、総合雑音指数が $4.18$ dB と $1.38$ dB で、$2.8$ dB も違います。雑音指数が 3 dB 違うということは、雑音電力がほぼ 2 倍違うということであり、リンクバジェット上では通信可能距離や達成可能データレートに直結する大差です。これが「アンテナ直下に LNA を置け」という鉄則の数学的根拠です。受動素子であるケーブルの損失は、その前に十分な利得を稼いでおけば後段の雑音として軽く扱えますが、利得を稼ぐ前に損失を被ると致命傷になります。
これで初段の決定的な重要性が定量的に理解できました。では次に、任意の段数に対応した計算ツールを Python で実装し、これらの計算を自動化するとともに、感度や最適化を可視化していきましょう。
Python実装
総合雑音指数を計算する関数
まず、各段の雑音指数(dB)と利得(dB)のリストを受け取り、フリスの公式で総合雑音指数を計算する関数を実装します。実務では雑音指数も利得も dB で与えられることが多いので、内部で線形量に変換してから公式を適用し、最後に dB へ戻す設計にします。
import numpy as np
def db_to_linear(db):
"""dB を線形比に変換(電力比)"""
return 10 ** (db / 10)
def linear_to_db(lin):
"""線形比を dB に変換(電力比)"""
return 10 * np.log10(lin)
def cascade_noise_figure(nf_db_list, gain_db_list):
"""
フリスの公式で縦続接続の総合雑音指数を計算する。
nf_db_list : 各段の雑音指数 [dB] のリスト
gain_db_list: 各段の利得 [dB] のリスト
戻り値 : 総合雑音指数 [dB]
"""
F = db_to_linear(np.array(nf_db_list)) # 各段の雑音係数(線形)
G = db_to_linear(np.array(gain_db_list)) # 各段の利得(線形)
F_total = F[0] # 初段の寄与
gain_product = 1.0 # 前段までの利得の積
for i in range(1, len(F)):
gain_product *= G[i - 1] # 段 i より前の利得の積
F_total += (F[i] - 1) / gain_product # フリスの公式の第 i 項
return linear_to_db(F_total)
この関数は、初段の雑音係数 F[0] から始め、2 段目以降について「それより前の段の利得の積」を gain_product に蓄積しながら、各段の寄与 $(F_i – 1)/\prod G_k$ を足し込んでいきます。ループの構造がフリスの公式の総和記号にそのまま対応していることが見て取れます。
実際に先ほどの 3 段受信機(LNA → ミキサ → IF 増幅器)で検算してみましょう。
# 段構成: [LNA, ミキサ, IF増幅器]
nf_db = [1.0, 8.0, 5.0] # 各段の雑音指数 [dB]
gain_db = [20.0, 5.0, 30.0] # 各段の利得 [dB]
nf_total = cascade_noise_figure(nf_db, gain_db)
print(f"総合雑音指数 NF_total = {nf_total:.3f} dB")
# 各段が総合雑音係数にどれだけ寄与しているか分解
F = db_to_linear(np.array(nf_db))
G = db_to_linear(np.array(gain_db))
contrib = [F[0] - 1] # 初段は (F1 - 1) を基準項として表示
gp = 1.0
for i in range(1, len(F)):
gp *= G[i - 1]
contrib.append((F[i] - 1) / gp)
for i, c in enumerate(contrib):
print(f"段 {i+1} の雑音係数寄与 (F_i-1)/ΣG = {c:.5f}")
実行すると、総合雑音指数は約 $1.20$ dB と出力され、手計算と一致します。寄与の分解を見ると、初段の $(F_1 – 1) = 0.259$ が圧倒的に大きく、第 2 段(ミキサ)の寄与は $0.053$、第 3 段の寄与は $0.0068$ と桁違いに小さいことが数値で確認できます。ミキサの雑音指数が 8 dB と大きくても、初段の 20 dB 利得で割られるため総合性能をほとんど劣化させない、という先ほどの議論がコードでも裏付けられました。
初段 LNA 利得に対する感度曲線
次に、初段 LNA の利得 $G_1$ を変化させたとき、総合雑音指数がどう振る舞うかを可視化します。これにより、「どこまで初段利得を上げれば後段の影響を消せるか」が一目で分かります。
import numpy as np
import matplotlib.pyplot as plt
# 後段は固定: ミキサ(NF=8dB,G=5dB), IF(NF=5dB,G=30dB)
nf_back = [8.0, 5.0]
gain_back = [5.0, 30.0]
lna_nf = 1.0 # 初段 LNA の雑音指数 [dB] は固定
# 初段 LNA 利得を 0〜30 dB まで振る
g1_range = np.linspace(0, 30, 200)
nf_totals = []
for g1 in g1_range:
nf_db = [lna_nf] + nf_back
gain_db = [g1] + gain_back
nf_totals.append(cascade_noise_figure(nf_db, gain_db))
plt.figure(figsize=(9, 5.5))
plt.plot(g1_range, nf_totals, color='navy', lw=2.2, label='総合 NF')
plt.axhline(lna_nf, color='crimson', ls='--', lw=1.5,
label=f'初段 LNA 単体 NF = {lna_nf} dB(下限)')
plt.xlabel('初段 LNA の利得 $G_1$ [dB]')
plt.ylabel('総合雑音指数 $NF_{total}$ [dB]')
plt.title('Sensitivity of Total Noise Figure to First-Stage Gain')
plt.grid(alpha=0.3)
plt.legend()
plt.tight_layout()
plt.savefig('friis_gain_sensitivity.png', dpi=150, bbox_inches='tight')
plt.show()
このグラフから、初段利得と総合雑音指数の関係について重要な性質が読み取れます。第一に、初段利得が 0 dB(増幅なし)に近いと総合雑音指数は 4 dB 以上にまで跳ね上がり、後段の雑音がもろに効いてしまうことが分かります。第二に、初段利得を上げていくと総合雑音指数は急速に下がり、おおよそ 15〜20 dB の利得で初段単体の 1.0 dB(赤い破線、理論的下限)にほぼ漸近します。第三に、それ以上利得を上げても改善はわずかで、収穫逓減に入ります。つまり「初段に十分な利得を持たせれば、総合雑音指数は初段の雑音指数で決まる」という設計指針が、曲線の形そのものとして可視化されています。
利得配分の最適化
最後に、より実務的な問題を扱います。複数の段の雑音指数が固定されているとき、総利得を一定に保ちながら、各段にどう利得を配分すれば総合雑音指数が最小になるでしょうか。ここでは 3 段構成で、各段の雑音指数を固定し、総利得 $G_1 + G_2 + G_3 = 50$ dB という制約のもとで $G_1, G_2$ を振って総合雑音指数の地図を描きます($G_3$ は制約から従属的に決まります)。
import numpy as np
import matplotlib.pyplot as plt
# 各段の雑音指数 [dB] は固定(初段が最も低雑音)
nf_db = [1.5, 6.0, 10.0]
total_gain_db = 50.0 # 総利得を 50 dB に固定
# G1, G2 を振り、G3 = 総利得 - G1 - G2 とする
g1_vals = np.linspace(2, 40, 120)
g2_vals = np.linspace(2, 40, 120)
G1, G2 = np.meshgrid(g1_vals, g2_vals)
NF_map = np.full_like(G1, np.nan)
for i in range(G1.shape[0]):
for j in range(G1.shape[1]):
g1, g2 = G1[i, j], G2[i, j]
g3 = total_gain_db - g1 - g2
if g3 < 2: # 各段に最低 2 dB は割り当てる物理的制約
continue
NF_map[i, j] = cascade_noise_figure(nf_db, [g1, g2, g3])
# 最小点を探す
idx = np.nanargmin(NF_map)
i_min, j_min = np.unravel_index(idx, NF_map.shape)
g1_opt, g2_opt = G1[i_min, j_min], G2[i_min, j_min]
g3_opt = total_gain_db - g1_opt - g2_opt
print(f"最適配分: G1={g1_opt:.1f} dB, G2={g2_opt:.1f} dB, G3={g3_opt:.1f} dB")
print(f"最小総合 NF = {NF_map[i_min, j_min]:.3f} dB")
この探索を実行すると、最適配分は初段 $G_1$ にできるだけ多くの利得を割り当てる方向、すなわち $G_1$ を制約の許す上限近く(残り 2 段に最低限を残した値)に寄せたところで総合雑音指数が最小になります。これはフリスの公式の構造から当然予想される結果です。後段の雑音はすべて前段の利得の積で割られるため、初段に利得を集中させるほど後段の寄与が圧縮されるからです。続いて、この最小点を含む全体像をヒートマップで可視化します。
plt.figure(figsize=(9, 7))
cs = plt.contourf(G1, G2, NF_map, levels=30, cmap='viridis')
plt.colorbar(cs, label='総合雑音指数 $NF_{total}$ [dB]')
plt.contour(G1, G2, NF_map, levels=12, colors='white',
linewidths=0.5, alpha=0.5)
plt.scatter([g1_opt], [g2_opt], color='red', s=120, marker='*',
edgecolor='white', zorder=5, label='最適配分')
plt.xlabel('初段利得 $G_1$ [dB]')
plt.ylabel('2 段目利得 $G_2$ [dB]')
plt.title('Total Noise Figure vs Gain Allocation (G3 = 50dB - G1 - G2)')
plt.legend()
plt.tight_layout()
plt.savefig('friis_gain_allocation.png', dpi=150, bbox_inches='tight')
plt.show()
このヒートマップから、利得配分が総合雑音指数に与える影響がはっきりと読み取れます。色が濃い(雑音指数が低い)領域は図の右下、すなわち初段利得 $G_1$ が大きい領域に集中しています。逆に、初段利得が小さく 2 段目以降に利得を寄せると、雑音指数が悪化します。赤い星印で示した最適点は、初段に利得を最大限割り当てた位置にあり、これは「最も雑音指数の低い段(初段 LNA)にできるだけ早く・できるだけ大きな利得を持たせよ」という設計鉄則を視覚的に裏付けています。等高線が初段利得の軸に対してほぼ垂直に走っていることからも、総合雑音指数が主として $G_1$ に支配されていることが分かります。
等価雑音温度での確認
雑音温度の言葉でも同じ計算ができることを確認しておきましょう。フリスの公式は雑音温度の形でも書け、$T_{\text{total}} = T_1 + T_2/G_1 + T_3/(G_1 G_2) + \cdots$ となります。これは雑音係数版の両辺から 1 を引き、$T_e = (F-1)T_0$ を代入すれば直ちに得られます。
import numpy as np
T0 = 290.0 # 標準温度 [K]
def cascade_noise_temp(nf_db_list, gain_db_list):
"""雑音温度の形でフリスの公式を計算し、等価雑音温度 [K] を返す"""
F = 10 ** (np.array(nf_db_list) / 10)
G = 10 ** (np.array(gain_db_list) / 10)
Te = (F - 1) * T0 # 各段の等価雑音温度
T_total = Te[0]
gp = 1.0
for i in range(1, len(Te)):
gp *= G[i - 1]
T_total += Te[i] / gp
return T_total
nf_db = [1.0, 8.0, 5.0]
gain_db = [20.0, 5.0, 30.0]
T_sys = cascade_noise_temp(nf_db, gain_db)
F_from_T = 1 + T_sys / T0
print(f"システム雑音温度 T_total = {T_sys:.1f} K")
print(f"温度から換算した NF = {10*np.log10(F_from_T):.3f} dB")
実行すると、システム雑音温度は約 $92.5$ K となり、これを雑音係数に換算した値は雑音係数版の計算結果と完全に一致します。雑音温度表示の利点は、複数の低雑音段を扱うときに 1 K 単位の差が直接見えることと、アンテナ雑音温度(空や地面から到来する雑音)と受信機雑音温度を同じ K の単位で足し合わせて、システム雑音温度 $T_{\text{sys}} = T_{\text{ant}} + T_{\text{rx}}$ としてリンクバジェットに乗せられることです。雑音係数とシステム雑音温度は同じ物理を別の言葉で語っているにすぎない、という点を押さえておきましょう。
まとめ
本記事では、縦続接続された増幅器系の総合雑音性能を与えるフリスの雑音指数公式を、出力雑音電力の積み上げから一行ずつ導出し、その意味と設計指針を Python で定量的に確認しました。要点を整理します。
- 雑音係数の定義 $F = \mathrm{SNR}_{\text{in}} / \mathrm{SNR}_{\text{out}}$ から、1 段の出力雑音電力は $N_{\text{out}} = F G N_0$、増幅器が足す雑音は $N_{\text{add}} = (F-1) G N_0$ と書ける
- フリスの公式 $F_{\text{total}} = F_1 + (F_2-1)/G_1 + (F_3-1)/(G_1 G_2) + \cdots$ は、出力雑音を 3 つの寄与に分けて足し、総合利得で規格化することで自然に導かれる
- 初段が支配する: 後段の雑音寄与はすべて前段の利得の積で割られるため、初段に高利得・低雑音の段(LNA)を置けば総合雑音指数はほぼ初段の値で決まる
- 設計鉄則: アンテナ直下に LNA を置き、損失(ケーブル等)は十分に利得を稼いだ後段に回す。同じ部品でも順序を変えるだけで雑音指数が数 dB 変わる
- 利得配分の最適化: 各段の雑音指数が固定なら、総合雑音指数は初段利得に最も多くを割り当てたときに最小になる
フリスの公式は、受信機設計・リンクバジェット・レーダー方程式など、微弱信号を扱うあらゆる場面で土台となる関係式です。雑音係数と等価雑音温度はコインの裏表であり、システム雑音温度を通じて通信性能の上限と結びつくことも見ました。
次のステップとして、以下の記事も参考にしてください。