SN比(信号対雑音比)の理論 — SNR・C/N・Eb/N0の定義と相互変換を完全解説

騒がしい居酒屋で友人と会話しているとき、周囲の雑踏がうるさいほど相手の声が聞き取りにくくなります。しかし、同じ騒がしさでも相手が大きな声で話してくれれば、十分に聞き取れます。ここで本質的なのは「声の絶対的な大きさ」ではなく、「声と周囲の騒音の比」です。声が雑踏の2倍の音量なら聞き取れるし、半分なら聞き取れない — この直感こそが SN比(信号対雑音比、Signal-to-Noise Ratio) の核心です。

無線通信の世界でも全く同じことが起きています。衛星から送られてくる電波がどんなに弱くても、受信機の雑音がそれよりもっと小さければ、信号は正しく復元できます。逆に、どんなに強力な電波でも雑音に埋もれれば通信は不可能です。SN比は、通信システムの品質を決定する最も基本的な指標であり、以下のような場面で不可欠です。

  • 回線設計(リンクバジェット): 送信電力・アンテナ利得・伝搬損失から受信側のSN比を見積もり、通信が成立するかどうかを判定する
  • 変調方式の選択: BPSK、QPSK、16QAM、64QAMなど、どの変調方式を選べば所要のビット誤り率(BER)を達成できるかは、SN比によって決まる
  • シャノン限界との比較: 理論上の通信効率の限界に対して、実際のシステムがどれだけ近づいているかをSN比で評価する
  • 受信機の感度設計: 受信系の雑音温度・雑音指数から、検出可能な最小信号レベルをSN比として定量化する

ところが、SN比には似たような概念が複数あります。SNR(Signal-to-Noise Ratio)、C/N(Carrier-to-Noise Ratio)、$E_b/N_0$(ビットあたりエネルギー対雑音電力密度比)—— これらは名前も記号も似ているのに、それぞれ異なる物理量を表しています。初学者がこれらを混同すると、回線設計で桁違いの計算ミスをすることにもなりかねません。

本記事では、これら3つの概念を基礎から丁寧に定義し、相互の変換公式を導出し、実用的な使い分けを明確にします。

本記事の内容

  • SN比の直感的理解と数学的定義(線形およびdB表現)
  • C/N(搬送波対雑音比)の定義とSNRとの違い
  • $E_b/N_0$ の定義と物理的意味
  • SNR・C/N・$E_b/N_0$ の相互変換公式の導出
  • 各変調方式での必要 $E_b/N_0$
  • シャノン限界の $E_b/N_0$ 表現($-1.59$ dB)
  • 回線設計でのSN比計算の実践
  • Pythonによる各変調方式の必要SNR比較とシャノン限界の可視化

前提知識

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

SN比(SNR)とは何か

日常の直感から始める

SN比を理解するために、もう少し居酒屋のアナロジーを深掘りしましょう。あなたが相手の声を聞き取れるかどうかは、大雑把にいえば「相手の声の音量」と「周囲の騒音の音量」の比率で決まります。

  • 相手の声が80 dB、周囲の騒音が60 dBなら、差は20 dBで快適に聞こえる
  • 相手の声が80 dB、周囲の騒音が75 dBなら、差は5 dBでかなり苦しい
  • 相手の声が80 dB、周囲の騒音が85 dBなら、差は$-5$ dBでほぼ聞き取れない

この「信号(声)と雑音(騒音)の比」がSN比です。通信工学では、信号を電力(ワット)で測り、その比を取ります。

線形スケールでの定義

SN比の最も基本的な定義は、信号電力 $S$ と雑音電力 $N$ の比です。

$$ \text{SNR} = \frac{S}{N} $$

ここで $S$ は受信信号の平均電力(単位: W)、$N$ は雑音の平均電力(単位: W)です。この比は無次元量であり、単位はありません。

例えば、$S = 10\,\mu\text{W}$、$N = 1\,\mu\text{W}$ ならば $\text{SNR} = 10$ です。信号が雑音の10倍の電力を持っているという意味になります。

dBスケールでの定義

通信工学では電力が何桁にもわたって変化するため、対数スケール(dB)で表現するのが標準です。

$$ \text{SNR}_{\text{dB}} = 10 \log_{10} \frac{S}{N} \quad [\text{dB}] $$

底が10の常用対数を使い、係数10をかけます。なぜ10なのかというと、電力比に対してデシベルを定義しているためです(電圧比であれば係数は20になります)。

先ほどの例では $\text{SNR}_{\text{dB}} = 10 \log_{10} 10 = 10\,\text{dB}$ となります。

dB表現の便利さは、掛け算が足し算になる点にあります。信号がアンプで100倍に増幅され、同時に雑音も10倍になったとすると、線形では $\text{SNR} = 100/10 = 10$ と計算しますが、dBでは $20\,\text{dB} – 10\,\text{dB} = 10\,\text{dB}$ と足し引きだけで求められます。回線設計で多段の利得・損失を扱う際に、この性質は極めて有用です。

電力と振幅の関係に注意する

信号や雑音を電圧(振幅)で測定する場合、電力は電圧の2乗に比例するため、次の関係が成り立ちます。

$$ \text{SNR} = \frac{S}{N} = \frac{v_s^2 / R}{v_n^2 / R} = \frac{v_s^2}{v_n^2} = \left(\frac{v_s}{v_n}\right)^2 $$

ここで $v_s$ は信号の実効値電圧、$v_n$ は雑音の実効値電圧、$R$ は負荷抵抗です。負荷抵抗が同一であれば打ち消し合うため、電圧の2乗の比がそのままSNRになります。

dBで表す場合は次のようになります。

$$ \text{SNR}_{\text{dB}} = 10 \log_{10} \left(\frac{v_s}{v_n}\right)^2 = 20 \log_{10} \frac{v_s}{v_n} \quad [\text{dB}] $$

対数の性質から $10 \log_{10} x^2 = 20 \log_{10} x$ となるため、電圧比をdBに変換するときは係数20を使います。この使い分けは初学者がしばしば間違えるポイントですので、「電力比なら10、電圧比なら20」と覚えておくとよいでしょう。

ここまででSN比の基本概念を押さえました。しかし、通信工学の実務ではSNRだけでなく、C/N(搬送波対雑音比)という似た概念が頻繁に登場します。次に、この2つの違いと使い分けを見ていきましょう。

C/N(搬送波対雑音比)とSNRの違い

C/Nの定義

C/N(Carrier-to-Noise Ratio)は、変調された搬送波(キャリア)の電力受信帯域内の雑音電力の比として定義されます。

$$ \frac{C}{N} = \frac{C}{N_0 B} $$

ここで各記号の意味は以下の通りです。

記号 意味 単位
$C$ 受信搬送波電力 W
$N_0$ 雑音電力密度(片側) W/Hz
$B$ 受信帯域幅 Hz
$N = N_0 B$ 帯域 $B$ 内の雑音電力 W

$N_0$ は1 Hz あたりの雑音電力です。熱雑音の理論で学んだように、温度 $T$ の受信系では $N_0 = kT$($k$ はボルツマン定数)となります。帯域幅 $B$ をかけることで、実際に受信系が拾う雑音電力 $N = kTB$ が求まります。

SNRとC/Nの違い — どこが違うのか

一見すると、SNRもC/Nも「信号と雑音の比」という点で同じに見えます。実際、多くの文献でこの2つを同じ意味で使うことがありますが、厳密には以下の点で異なります。

SNR(Signal-to-Noise Ratio) は、情報信号(ベースバンド信号)の電力と雑音電力の比です。復調後のベースバンド段での品質指標として使われることが多い概念です。

C/N(Carrier-to-Noise Ratio) は、RF(無線周波数)段での搬送波電力と帯域内雑音電力の比です。アンテナで受信した段階、つまり復調前の品質指標です。

両者の関係は変調方式によって異なります。例えば、アナログFM通信では、FM復調によるSN比改善効果があるため、復調後のSNRは復調前のC/Nよりも大きくなります。一方、ディジタル通信のBPSKのような線形変調では、復調前後でSN比がほぼ保存されるため、C/NとSNRは数値的にほぼ等しくなります。

回線設計の文脈では、受信点でのC/Nがまず計算され、それを復調方式に応じてSNR(またはBER)に変換するという手順を踏みます。

C/N0 — 帯域幅を含まない指標

実務ではもう一つ、$C/N_0$ という指標もよく使われます。

$$ \frac{C}{N_0} \quad [\text{dB-Hz}] $$

これは帯域幅 $B$ を含まない形式で、「搬送波電力と雑音電力密度の比」を表します。帯域幅は変調方式やフィルタ設計で変わるため、帯域幅を含まない $C/N_0$ はシステム間の比較に便利です。

$C/N$ と $C/N_0$ の関係は次式で表されます。

$$ \frac{C}{N} = \frac{C}{N_0 B} $$

dBに変換すると、単純な引き算になります。

$$ \left(\frac{C}{N}\right)_{\text{dB}} = \left(\frac{C}{N_0}\right)_{\text{dB-Hz}} – 10\log_{10} B $$

例えば、$C/N_0 = 50\,\text{dB-Hz}$ で帯域幅 $B = 1\,\text{MHz} = 10^6\,\text{Hz}$ の場合、$C/N = 50 – 60 = -10\,\text{dB}$ となります。帯域幅が広いほど、取り込む雑音が増えてC/Nが悪化するのは直感的にも理解できるでしょう。

C/Nは受信点での「搬送波レベルの品質」を表す指標でした。しかし、ディジタル通信の性能を議論するには、ビット単位でのエネルギー効率を測る指標が必要です。ここで登場するのが $E_b/N_0$ です。

$E_b/N_0$ — ビットあたりエネルギー対雑音電力密度比

なぜビット単位のエネルギーで考えるのか

ディジタル通信では、情報は最終的にビットの列として送受信されます。1ビットを送るのに使えるエネルギーが大きいほど、雑音に対する耐性が高く、誤り率は下がります。

ここで、信号電力 $S$ そのものではなく、1ビットあたりに割り当てられるエネルギー $E_b$ を考える理由があります。それは、ビットレートを変えたときの公平な比較を可能にするためです。

具体的な例で考えてみましょう。あるシステムが信号電力 $S = 1\,\text{W}$ で $R_b = 1\,\text{Mbps}$ を伝送し、別のシステムが同じ $S = 1\,\text{W}$ で $R_b = 10\,\text{Mbps}$ を伝送するとします。SNRは同じ(信号電力と雑音電力が同じなら)ですが、後者は1ビットあたりに割り当てられるエネルギーが10分の1しかないため、当然ビット誤り率は高くなるはずです。SNRだけではこの違いを表現できません。$E_b/N_0$ なら、ビットレートの違いを正しく反映できるのです。

$E_b/N_0$ の定義

$E_b/N_0$ は次のように定義されます。

$$ \frac{E_b}{N_0} $$

各記号の意味を確認しましょう。

記号 意味 単位
$E_b$ 1ビットあたりの受信エネルギー J(ジュール)= W$\cdot$s
$N_0$ 雑音電力密度(片側) W/Hz = W$\cdot$s = J

$E_b$ と $N_0$ はどちらもエネルギーの次元(J)を持つため、$E_b/N_0$ は無次元量です。

$E_b$ は信号電力 $S$(または搬送波電力 $C$)とビットレート $R_b$ から次のように求めます。

$$ E_b = \frac{S}{R_b} = \frac{C}{R_b} $$

これは「1秒間に $S$ ワットのエネルギーを $R_b$ ビットに均等に配分する」と考えれば自然です。$S$ の単位は W = J/s であり、$R_b$ の単位は bit/s なので、$E_b = S/R_b$ の単位は J/bit となります。

$E_b/N_0$ の物理的意味

$E_b/N_0$ の物理的意味を噛み砕くと、次のようになります。

1ビットを送るために使えるエネルギーが、帯域幅1 Hzあたりの雑音エネルギーの何倍あるか

$E_b/N_0$ が大きいほど、1ビットに対して余裕のあるエネルギーが割り当てられており、雑音に対して強い(ビット誤り率が低い)ことを意味します。

$E_b/N_0$ は変調方式やビットレートによらない正規化された指標であるため、異なるシステム間の性能を公平に比較できます。これが、通信工学で $E_b/N_0$ が「ディジタル通信のSN比」として最も広く使われる理由です。

dBでの表現

実務では $E_b/N_0$ もdBで表します。

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = 10 \log_{10} \frac{E_b}{N_0} \quad [\text{dB}] $$

例えば、$E_b/N_0 = 10$(線形)なら $10\,\text{dB}$、$E_b/N_0 = 100$ なら $20\,\text{dB}$ です。

$E_b/N_0$ の定義とその意義が明確になりました。次は、SNR・C/N・$E_b/N_0$ の3つの指標がどのように結びつくのか、相互変換の公式を導出していきましょう。

SNR・C/N・$E_b/N_0$ の相互変換

$E_b/N_0$ と SNR の関係

この変換を導出するために、$E_b = S/R_b$ の関係を使います。SNRの定義 $\text{SNR} = S/N$ と、$N = N_0 B$ の関係を組み合わせます。

まず、$E_b/N_0$ を $S$ と $N_0$ で書き下します。

$$ \frac{E_b}{N_0} = \frac{S / R_b}{N_0}= \frac{S}{N_0 R_b} $$

ここで、分子と分母に帯域幅 $B$ をかけて変形します。

$$ \frac{E_b}{N_0} = \frac{S}{N_0 R_b} = \frac{S}{N_0 B} \cdot \frac{B}{R_b} $$

$S/(N_0 B) = S/N = \text{SNR}$ なので、次の関係が得られます。

$$ \boxed{\frac{E_b}{N_0} = \text{SNR} \cdot \frac{B}{R_b}} $$

dBで表すと、掛け算が足し算になります。

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = \text{SNR}_{\text{dB}} + 10\log_{10}\frac{B}{R_b} $$

ここで $B/R_b$ は帯域幅とビットレートの比であり、帯域効率 $\eta = R_b/B$(単位: bit/s/Hz)の逆数です。つまり次のようにも書けます。

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = \text{SNR}_{\text{dB}} – 10\log_{10}\eta $$

この式の意味を考えましょう。帯域効率 $\eta$ が高い(1 Hzあたりに多くのビットを詰め込む)ほど、同じSNRでも1ビットあたりに回せるエネルギーが減るため、$E_b/N_0$ は小さくなります。これは直感的にも理解できます。

$E_b/N_0$ と C/N の関係

C/NとSNRの違いが変調方式に依存することは前節で述べましたが、ディジタル通信で搬送波電力 $C$ を信号電力 $S$ として扱う場合(多くのディジタル変調で成り立つ近似)、$C/N$ はそのまま $S/N$ に等しくなります。

$$ \frac{C}{N} = \frac{S}{N} = \text{SNR} $$

したがって、$E_b/N_0$ とC/Nの関係は次のようになります。

$$ \boxed{\frac{E_b}{N_0} = \frac{C}{N} \cdot \frac{B}{R_b}} $$

dBで表すと以下の通りです。

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = \left(\frac{C}{N}\right)_{\text{dB}} + 10\log_{10}\frac{B}{R_b} $$

$E_b/N_0$ と $C/N_0$ の関係

$C/N_0$ からの変換は特に簡潔です。$E_b = C/R_b$ を代入すると、次のようになります。

$$ \frac{E_b}{N_0} = \frac{C/R_b}{N_0} = \frac{C}{N_0 R_b} $$

つまり、$C/N_0$ をビットレートで割るだけです。

$$ \boxed{\frac{E_b}{N_0} = \frac{C/N_0}{R_b}} $$

dBに直すと次の通りです。

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = \left(\frac{C}{N_0}\right)_{\text{dB-Hz}} – 10\log_{10} R_b $$

これは非常に実用的な式です。回線設計では $C/N_0$ がまず求まることが多く、そこからビットレートを引くだけで $E_b/N_0$ が得られます。

変換公式のまとめ

3つの指標の関係をまとめると次の表になります。

変換元 変換先 公式(dB)
SNR $E_b/N_0$ $(E_b/N_0)_{\text{dB}} = \text{SNR}_{\text{dB}} + 10\log_{10}(B/R_b)$
$E_b/N_0$ SNR $\text{SNR}_{\text{dB}} = (E_b/N_0)_{\text{dB}} – 10\log_{10}(B/R_b)$
C/N $E_b/N_0$ $(E_b/N_0)_{\text{dB}} = (C/N)_{\text{dB}} + 10\log_{10}(B/R_b)$
$C/N_0$ $E_b/N_0$ $(E_b/N_0)_{\text{dB}} = (C/N_0)_{\text{dB-Hz}} – 10\log_{10}R_b$
$C/N_0$ C/N $(C/N)_{\text{dB}} = (C/N_0)_{\text{dB-Hz}} – 10\log_{10}B$

全ての変換に共通するのは、帯域幅 $B$ とビットレート $R_b$ の比が介在するという点です。同じ搬送波電力でも、帯域の使い方やビットレートが異なれば、ビット単位のエネルギー効率は変わります。

これで3つの指標の相互変換が完成しました。では、具体的にどの変調方式がどれだけの $E_b/N_0$ を必要とするのでしょうか? 次のセクションでは、代表的な変調方式の必要 $E_b/N_0$ を理論的に整理します。

各変調方式の必要 $E_b/N_0$

BER(ビット誤り率)と $E_b/N_0$ の関係

ディジタル通信では、受信側でビットを正しく判定できなかった割合をBER(Bit Error Rate)と呼び、これが通信品質の直接的な指標です。BERは $E_b/N_0$ の関数として表され、その具体的な形は変調方式によって異なります。

以下に、代表的な変調方式のBER公式を示します。いずれもAWGN(加法性白色ガウス雑音)通信路を仮定しています。

BPSK / QPSK:

$$ P_b = Q\left(\sqrt{\frac{2E_b}{N_0}}\right) $$

ここで $Q(x)$ は標準正規分布の上側確率関数です。

$$ Q(x) = \frac{1}{\sqrt{2\pi}} \int_x^{\infty} e^{-t^2/2}\, dt $$

BPSKとQPSKが同じBER公式を持つのは興味深い事実です。QPSKは1シンボルで2ビットを送れるためBPSKの2倍の帯域効率を持ちますが、シンボルあたりのエネルギーも2倍になるため、ビットあたりの $E_b/N_0$ 性能は同一になります。

M-QAM(矩形QAM、$M = 2^k$、$k$ 偶数):

$$ P_b \approx \frac{4}{\log_2 M}\left(1 – \frac{1}{\sqrt{M}}\right) Q\left(\sqrt{\frac{3\log_2 M}{M-1}\cdot\frac{2E_b}{N_0}}\right) $$

この近似式はグレイ符号化を仮定しており、高SNR領域で良い精度を持ちます。

M-PSK($M \geq 4$):

$$ P_b \approx \frac{2}{\log_2 M} Q\left(\sqrt{\frac{2E_b \log_2 M}{N_0}} \sin\frac{\pi}{M}\right) $$

これもグレイ符号化を仮定した近似式です。

主要変調方式の必要 $E_b/N_0$

実用上よく使われるのは、「BERが $10^{-5}$ を達成するために必要な $E_b/N_0$」という基準値です。以下の表に代表的な値をまとめます。

変調方式 帯域効率 $\eta$ [bit/s/Hz] 必要 $E_b/N_0$ [dB] (BER=$10^{-5}$)
BPSK 1 9.6
QPSK 2 9.6
8-PSK 3 13.0
16-QAM 4 13.4
64-QAM 6 17.8
256-QAM 8 21.6

この表から重要なトレンドが読み取れます。帯域効率を上げる(1 Hzあたりにより多くのビットを詰め込む)ほど、必要な $E_b/N_0$ が大きくなります。つまり、帯域効率と電力効率はトレードオフの関係にあるのです。

BPSK/QPSKは最も電力効率がよく($E_b/N_0$ が小さくて済む)、その代わり帯域効率は低いです。64-QAMや256-QAMは帯域効率に優れますが、雑音への耐性が弱く、高い $E_b/N_0$ が必要です。4Gや5Gの移動体通信では、電波状況に応じて変調方式を動的に切り替える適応変調(AMC: Adaptive Modulation and Coding)が採用されています。基地局に近くSN比が高い場所では64-QAMや256-QAMで高速伝送し、セルの端でSN比が低い場所ではQPSKに切り替えて確実な通信を確保するのです。

この帯域効率と電力効率のトレードオフには、理論上の限界があるのでしょうか? 実は、シャノンの通信路容量定理がこの問いに明確な答えを与えています。

シャノン限界の $E_b/N_0$ 表現

シャノンの通信路容量

1948年にクロード・シャノンが証明した通信路容量定理は、AWGN通信路において誤りなく伝送できる最大ビットレートを与えます。

$$ C_{\text{ch}} = B \log_2\left(1 + \frac{S}{N}\right) = B \log_2\left(1 + \text{SNR}\right) \quad [\text{bit/s}] $$

ここで $C_{\text{ch}}$ は通信路容量(bit/s)、$B$ は帯域幅(Hz)、SNRは線形スケールの信号対雑音比です。この式は、帯域幅 $B$ とSNRが与えられたとき、理論上達成可能な最大伝送レートを定めています。

$E_b/N_0$ による表現への変換

シャノン限界を $E_b/N_0$ で表現してみましょう。まず、ビットレート $R_b$ が通信路容量に達している限界状態 $R_b = C_{\text{ch}}$ を考えます。

帯域効率を $\eta = R_b / B = C_{\text{ch}} / B$ とおくと、シャノンの式は次のように書き直せます。

$$ \eta = \log_2\left(1 + \text{SNR}\right) $$

ここから SNR を求めると次のようになります。

$$ \text{SNR} = 2^{\eta} – 1 $$

前節で導出した変換公式 $E_b/N_0 = \text{SNR} \cdot (B / R_b) = \text{SNR} / \eta$ を使って、$E_b/N_0$ を帯域効率の関数として表します。

$$ \frac{E_b}{N_0} = \frac{2^{\eta} – 1}{\eta} $$

この式がシャノン限界を $E_b/N_0$ と帯域効率 $\eta$ の関係として表したものです。任意の帯域効率に対して、理論上最低限必要な $E_b/N_0$ を与えます。

絶対的な下限: $-1.59$ dB

ここで極めて興味深い結果が得られます。帯域効率を0に近づけた極限、すなわち帯域幅を無限に使えるが伝送レートは極めて低いという状況を考えます。

$$ \lim_{\eta \to 0} \frac{2^{\eta} – 1}{\eta} $$

$2^{\eta} = e^{\eta \ln 2}$ とおくと、$\eta \to 0$ のとき $e^{\eta \ln 2} \approx 1 + \eta \ln 2$ とテイラー展開できます。これを代入すると次のようになります。

$$ \lim_{\eta \to 0} \frac{2^{\eta} – 1}{\eta} = \lim_{\eta \to 0} \frac{(1 + \eta \ln 2) – 1}{\eta} = \ln 2 $$

したがって、$E_b/N_0$ の理論的な絶対下限は次の値です。

$$ \boxed{\left(\frac{E_b}{N_0}\right)_{\min} = \ln 2 \approx 0.6931} $$

dBに変換します。

$$ \left(\frac{E_b}{N_0}\right)_{\min, \text{dB}} = 10\log_{10}(\ln 2) = 10 \times (-0.1592) \approx -1.59\,\text{dB} $$

この $-1.59\,\text{dB}$ という値は、あらゆる符号化・変調方式を組み合わせても絶対に超えられない壁です。帯域幅をいくら広くとっても、1ビットあたり最低 $\ln 2$ のエネルギー(雑音密度との比)がなければ、理論上、誤りのない通信は不可能であることをシャノンの定理は主張しています。

シャノン限界の意義

$-1.59\,\text{dB}$ という値は、通信工学におけるベンチマークとして極めて重要です。各変調・符号化方式がこの限界からどれだけ離れているかが、その方式の「効率の良さ」を示す指標になります。

先ほどの表でBPSK/QPSKの必要 $E_b/N_0$ は $9.6\,\text{dB}$(符号化なし、BER=$10^{-5}$)でしたが、シャノン限界は $-1.59\,\text{dB}$ ですから、約 $11.2\,\text{dB}$ のギャップがあります。ターボ符号やLDPC符号といった現代の誤り訂正符号は、このギャップをわずか $0.1\sim 1\,\text{dB}$ まで縮めており、シャノン限界にほぼ到達しています。

シャノン限界が理論的な天井(実際には床)を示す一方で、実際の回線設計ではどのようにSN比を計算するのでしょうか。次に、実用的な回線設計手順を見ていきましょう。

回線設計におけるSN比計算の実際

リンクバジェットの中でのSN比

回線設計(リンクバジェット)は、送信機から受信機までの電力収支を計算し、受信側で十分なSN比が確保できるかを検証する手続きです。その基本的な流れは次の通りです。

  1. 送信側EIRP(等価等方放射電力)の計算: 送信電力 $P_t$ にアンテナ利得 $G_t$ を掛け、送信系の損失 $L_t$ を差し引く
  2. 伝搬損失の計算: 自由空間損失 $L_{\text{fs}}$、大気減衰、降雨減衰などの合計
  3. 受信電力の計算: 受信アンテナ利得 $G_r$ を加え、受信系の損失 $L_r$ を差し引く
  4. 受信系雑音電力の計算: システム雑音温度 $T_{\text{sys}}$ から $N_0 = kT_{\text{sys}}$ を求める
  5. $C/N_0$、$C/N$、$E_b/N_0$ の計算: 上記の結果を組み合わせて算出する

全てdBスケールで表すと、$C/N_0$ は次の式で求まります。

$$ \left(\frac{C}{N_0}\right)_{\text{dB-Hz}} = \text{EIRP}_{\text{dBW}} – L_{\text{total, dB}} + \left(\frac{G_r}{T_{\text{sys}}}\right)_{\text{dB/K}} + 228.6 $$

ここで $228.6$ はボルツマン定数の逆数をdBで表した値です($-10\log_{10}(1.38 \times 10^{-23}) \approx 228.6$)。$G_r/T_{\text{sys}}$ は受信系の「性能指数(Merit Factor)」と呼ばれ、受信アンテナ利得と雑音温度の比を表します。

計算例: 衛星ダウンリンク

具体的な数値例で計算してみましょう。静止衛星から地上局へのダウンリンクを考えます。

与えられた条件:

パラメータ
送信電力 $P_t$ 10 W = 10 dBW
送信アンテナ利得 $G_t$ 30 dBi
送信系損失 $L_t$ 2 dB
自由空間損失 $L_{\text{fs}}$ (12 GHz, 36,000 km) 205.8 dB
大気減衰 0.5 dB
受信アンテナ利得 $G_r$ 40 dBi
受信系損失 $L_r$ 1 dB
システム雑音温度 $T_{\text{sys}}$ 150 K
ビットレート $R_b$ 10 Mbps

ステップ1: EIRPの計算

$$ \text{EIRP} = P_t + G_t – L_t = 10 + 30 – 2 = 38\,\text{dBW} $$

ステップ2: 全伝搬損失

$$ L_{\text{total}} = L_{\text{fs}} + L_{\text{atm}} = 205.8 + 0.5 = 206.3\,\text{dB} $$

ステップ3: 受信 $C/N_0$ の計算

受信系性能指数は次の通りです。

$$ \frac{G_r}{T_{\text{sys}}} = G_r – 10\log_{10}T_{\text{sys}} = 40 – 10\log_{10}150 = 40 – 21.76 = 18.24\,\text{dB/K} $$

$C/N_0$ を計算します。

$$ \left(\frac{C}{N_0}\right)_{\text{dB-Hz}} = 38 – 206.3 + 18.24 + 228.6 = 78.54\,\text{dB-Hz} $$

ステップ4: $E_b/N_0$ の計算

$$ \left(\frac{E_b}{N_0}\right)_{\text{dB}} = 78.54 – 10\log_{10}(10 \times 10^6) = 78.54 – 70 = 8.54\,\text{dB} $$

ステップ5: マージンの判定

QPSKで符号化なしの場合、BER $= 10^{-5}$ に必要な $E_b/N_0$ は $9.6\,\text{dB}$ です。得られた $8.54\,\text{dB}$ はこれを下回っているため、このままでは所要品質を満たしません。

対策として以下が考えられます。

  • 誤り訂正符号(FEC)の導入: 例えば符号化率 $r = 1/2$ のターボ符号を使えば、必要 $E_b/N_0$ を $1\,\text{dB}$ 程度まで下げられる。ただしビットレートは実質半分になる
  • 送信電力の増大: あと $1\,\text{dB}$ 上げれば(10 W → 12.6 W)マージンが確保できる
  • 受信アンテナの大型化: アンテナ利得を上げて $G_r/T_{\text{sys}}$ を改善する

このように、回線設計ではSN比($E_b/N_0$)を軸にして、システムパラメータのトレードオフを検討します。

数値計算による理解を深めるために、ここからはPythonを使って各変調方式のBER特性とシャノン限界を可視化していきましょう。

Pythonで各変調方式のBER特性を比較する

BER理論曲線の描画

まず、代表的な変調方式のBER理論曲線を $E_b/N_0$ の関数として描画します。これにより、各変調方式がどの程度の $E_b/N_0$ を必要とするかを視覚的に比較できます。

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import erfc

# Q関数の定義: Q(x) = 0.5 * erfc(x / sqrt(2))
def Q(x):
    return 0.5 * erfc(x / np.sqrt(2))

# Eb/N0の範囲(dB)
EbN0_dB = np.linspace(0, 25, 500)
EbN0_lin = 10**(EbN0_dB / 10)  # 線形スケールに変換

# --- 各変調方式のBER理論式 ---
# BPSK / QPSK
ber_bpsk = Q(np.sqrt(2 * EbN0_lin))

# 8-PSK(グレイ符号化近似)
M_8psk = 8
ber_8psk = (2 / np.log2(M_8psk)) * Q(
    np.sqrt(2 * EbN0_lin * np.log2(M_8psk)) * np.sin(np.pi / M_8psk)
)

# 16-QAM(グレイ符号化近似)
M_16qam = 16
ber_16qam = (4 / np.log2(M_16qam)) * (1 - 1/np.sqrt(M_16qam)) * Q(
    np.sqrt(3 * np.log2(M_16qam) / (M_16qam - 1) * 2 * EbN0_lin)
)

# 64-QAM(グレイ符号化近似)
M_64qam = 64
ber_64qam = (4 / np.log2(M_64qam)) * (1 - 1/np.sqrt(M_64qam)) * Q(
    np.sqrt(3 * np.log2(M_64qam) / (M_64qam - 1) * 2 * EbN0_lin)
)

# 256-QAM(グレイ符号化近似)
M_256qam = 256
ber_256qam = (4 / np.log2(M_256qam)) * (1 - 1/np.sqrt(M_256qam)) * Q(
    np.sqrt(3 * np.log2(M_256qam) / (M_256qam - 1) * 2 * EbN0_lin)
)

# --- プロット ---
plt.figure(figsize=(10, 7))
plt.semilogy(EbN0_dB, ber_bpsk, 'b-', linewidth=2, label='BPSK / QPSK')
plt.semilogy(EbN0_dB, ber_8psk, 'g--', linewidth=2, label='8-PSK')
plt.semilogy(EbN0_dB, ber_16qam, 'r-.', linewidth=2, label='16-QAM')
plt.semilogy(EbN0_dB, ber_64qam, 'm:', linewidth=2, label='64-QAM')
plt.semilogy(EbN0_dB, ber_256qam, 'c-', linewidth=1.5, label='256-QAM')

# BER = 1e-5 の基準線
plt.axhline(y=1e-5, color='gray', linestyle=':', alpha=0.7, label='BER = $10^{-5}$')

plt.xlabel('$E_b/N_0$ [dB]', fontsize=13)
plt.ylabel('BER (Bit Error Rate)', fontsize=13)
plt.title('BER vs $E_b/N_0$ for Various Modulation Schemes (AWGN)', fontsize=14)
plt.grid(True, which='both', alpha=0.3)
plt.legend(fontsize=11, loc='lower left')
plt.ylim(1e-7, 1)
plt.xlim(0, 25)
plt.tight_layout()
plt.savefig('ber_comparison.png', dpi=150)
plt.show()

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

  1. BPSK/QPSKが最も電力効率がよい — 同じBERを達成するために必要な $E_b/N_0$ が最も小さい変調方式です。BER $= 10^{-5}$ を達成するのに約 $9.6\,\text{dB}$ しか必要としません。
  2. 高次変調ほどBER曲線が右にシフトする — 16-QAM、64-QAM、256-QAMと多値度が上がるにつれ、同じBERに必要な $E_b/N_0$ が増大します。これは、信号点間の距離が縮まることで雑音に対する耐性が低下するためです。
  3. 全ての曲線がウォーターフォール(滝)型 — ある $E_b/N_0$ を超えるとBERが急激に低下します。この急峻な立ち下がりは、ガウス分布の裾の急速な減衰に起因しています。

シャノン限界との比較

次に、帯域効率と必要 $E_b/N_0$ の平面で、各変調方式の動作点とシャノン限界を比較します。この図は「帯域効率 vs 電力効率のトレードオフ図」と呼ばれ、通信システム設計で非常によく使われます。

import numpy as np
import matplotlib.pyplot as plt

# シャノン限界: Eb/N0 = (2^eta - 1) / eta
eta_shannon = np.linspace(0.01, 10, 1000)  # 帯域効率 [bit/s/Hz]
EbN0_shannon = (2**eta_shannon - 1) / eta_shannon  # 線形
EbN0_shannon_dB = 10 * np.log10(EbN0_shannon)

# 各変調方式の動作点(符号化なし、BER = 1e-5)
modulations = {
    'BPSK':     {'eta': 1, 'EbN0_dB': 9.6},
    'QPSK':     {'eta': 2, 'EbN0_dB': 9.6},
    '8-PSK':    {'eta': 3, 'EbN0_dB': 13.0},
    '16-QAM':   {'eta': 4, 'EbN0_dB': 13.4},
    '64-QAM':   {'eta': 6, 'EbN0_dB': 17.8},
    '256-QAM':  {'eta': 8, 'EbN0_dB': 21.6},
}

# シャノン限界の絶対下限
EbN0_min_dB = 10 * np.log10(np.log(2))  # -1.59 dB

# --- プロット ---
plt.figure(figsize=(10, 7))

# シャノン限界曲線
plt.plot(EbN0_shannon_dB, eta_shannon, 'k-', linewidth=2.5, label='Shannon limit')

# シャノン限界の絶対下限(垂直線)
plt.axvline(x=EbN0_min_dB, color='red', linestyle='--', linewidth=1.5,
            label=f'Absolute limit = {EbN0_min_dB:.2f} dB')

# 各変調方式をプロット
markers = ['o', 's', '^', 'D', 'v', 'p']
colors = ['blue', 'green', 'orange', 'red', 'purple', 'cyan']
for i, (name, params) in enumerate(modulations.items()):
    plt.plot(params['EbN0_dB'], params['eta'], markers[i],
             color=colors[i], markersize=12, markeredgewidth=2,
             markeredgecolor='black', label=f"{name} ($\\eta$={params['eta']})")
    # シャノン限界からの距離を矢印で示す
    eta_val = params['eta']
    shannon_EbN0 = 10 * np.log10((2**eta_val - 1) / eta_val)
    gap = params['EbN0_dB'] - shannon_EbN0
    plt.annotate(f'{gap:.1f} dB gap',
                 xy=(shannon_EbN0, eta_val),
                 xytext=(params['EbN0_dB'] + 0.3, eta_val + 0.3),
                 fontsize=8, color='gray')

# 達成不可能領域を塗りつぶし
plt.fill_betweenx(eta_shannon, -3, EbN0_shannon_dB,
                   alpha=0.15, color='red', label='Unachievable region')

plt.xlabel('$E_b/N_0$ [dB]', fontsize=13)
plt.ylabel('Spectral Efficiency $\\eta$ [bit/s/Hz]', fontsize=13)
plt.title('Spectral Efficiency vs $E_b/N_0$: Shannon Limit and Modulation Schemes',
          fontsize=13)
plt.grid(True, alpha=0.3)
plt.legend(fontsize=9, loc='upper left')
plt.xlim(-3, 25)
plt.ylim(0, 10)
plt.tight_layout()
plt.savefig('shannon_limit_comparison.png', dpi=150)
plt.show()

この図から、通信工学の本質的なトレードオフが明瞭に読み取れます。

  1. シャノン限界の左側(赤い領域)は到達不可能 — どんなに巧みな符号化・変調を施しても、この曲線の左側で誤りなく通信することはできません。シャノンの定理が数学的に保証する「超えられない壁」です。
  2. 各変調方式はシャノン限界から $8\sim 12\,\text{dB}$ 離れている — これらは符号化なし(生の変調方式のみ)の値です。誤り訂正符号を組み合わせることで、シャノン限界にぐっと近づくことができます。
  3. $E_b/N_0 = -1.59\,\text{dB}$ に収束する — 帯域効率を下げていくと、必要 $E_b/N_0$ はシャノン限界の絶対下限 $-1.59\,\text{dB}$ に漸近します。帯域を潤沢に使えるなら、1ビットあたりの最低エネルギーはこの値で決まるということです。

SNR vs ビットレートの関係を可視化する

最後に、帯域幅が固定された状態でビットレートを変えたとき、必要なSNRがどう変化するかを見てみましょう。これは、前節で導出した $\text{SNR} = (E_b/N_0) \cdot (R_b/B)$ の関係を使います。

import numpy as np
import matplotlib.pyplot as plt

# 帯域幅を 1 MHz に固定
B = 1e6  # Hz

# シャノン限界: C = B * log2(1 + SNR), SNR = 2^(Rb/B) - 1
Rb_range = np.linspace(0.1e6, 10e6, 500)  # ビットレート [bps]
eta_range = Rb_range / B  # 帯域効率
SNR_shannon = 2**eta_range - 1  # 線形
SNR_shannon_dB = 10 * np.log10(SNR_shannon)

# 各変調方式(符号化なし、BER=1e-5)のSNR
# SNR = (Eb/N0) * (Rb / B)
mod_info = [
    ('BPSK',    1, 9.6),   # (名前, eta, Eb/N0 [dB])
    ('QPSK',    2, 9.6),
    ('16-QAM',  4, 13.4),
    ('64-QAM',  6, 17.8),
]

plt.figure(figsize=(10, 6))

# シャノン限界
plt.plot(Rb_range / 1e6, SNR_shannon_dB, 'k-', linewidth=2.5,
         label='Shannon limit ($B$ = 1 MHz)')

# 各変調方式の動作点
markers = ['o', 's', 'D', 'v']
colors = ['blue', 'green', 'red', 'purple']
for i, (name, eta, ebn0_dB) in enumerate(mod_info):
    Rb = eta * B  # 実現ビットレート
    ebn0_lin = 10**(ebn0_dB / 10)
    snr_lin = ebn0_lin * eta  # SNR = (Eb/N0) * (Rb/B) = (Eb/N0) * eta
    snr_dB = 10 * np.log10(snr_lin)
    plt.plot(Rb / 1e6, snr_dB, markers[i], color=colors[i],
             markersize=12, markeredgewidth=2, markeredgecolor='black',
             label=f'{name}: $R_b$={Rb/1e6:.0f} Mbps, SNR={snr_dB:.1f} dB')

plt.xlabel('Bit Rate $R_b$ [Mbps]', fontsize=13)
plt.ylabel('Required SNR [dB]', fontsize=13)
plt.title('Required SNR vs Bit Rate ($B$ = 1 MHz, AWGN, BER = $10^{-5}$)',
          fontsize=13)
plt.grid(True, alpha=0.3)
plt.legend(fontsize=10, loc='upper left')
plt.xlim(0, 10)
plt.tight_layout()
plt.savefig('snr_vs_bitrate.png', dpi=150)
plt.show()

このグラフには3つの注目点があります。

  1. シャノン限界曲線の傾きが急激に増す — ビットレートを帯域幅に近づける($R_b \to B$、$\eta \to 1$)までは緩やかですが、それを超えると必要SNRが指数的に増大します。帯域幅以上の速度で通信しようとすると、とてつもないSNRが必要になるのです。
  2. ビットレートが上がるほどSNRの「コスト」が高くなる — BPSKの $R_b = 1\,\text{Mbps}$ では $\text{SNR} = 9.6\,\text{dB}$ ですが、64-QAMの $R_b = 6\,\text{Mbps}$ では $\text{SNR} = 25.6\,\text{dB}$ と約 $16\,\text{dB}$ も増加します。6倍の速度を得るために約40倍の電力が必要ということです。
  3. 全ての動作点がシャノン限界の右上にある — シャノン限界はあくまで下界であり、実際のシステムはそれよりも高いSNRを必要とします。

$E_b/N_0$ と $E_s/N_0$ の関係

ここまで $E_b/N_0$ を中心に議論してきましたが、実務では $E_s/N_0$(シンボルあたりエネルギー対雑音電力密度比)もよく使われます。この2つの関係を明確にしておきましょう。

$E_s$ は1シンボルあたりのエネルギーです。1シンボルで $\log_2 M$ ビットを送る $M$ 値変調の場合、次の関係が成り立ちます。

$$ E_s = E_b \cdot \log_2 M $$

したがって、$E_s/N_0$ と $E_b/N_0$ の関係は以下の通りです。

$$ \frac{E_s}{N_0} = \frac{E_b}{N_0} \cdot \log_2 M $$

dBで表すと次のようになります。

$$ \left(\frac{E_s}{N_0}\right)_{\text{dB}} = \left(\frac{E_b}{N_0}\right)_{\text{dB}} + 10\log_{10}(\log_2 M) $$

例えば、16-QAM($M = 16$, $\log_2 M = 4$)で $E_b/N_0 = 13.4\,\text{dB}$ の場合、$E_s/N_0 = 13.4 + 10\log_{10}4 = 13.4 + 6.0 = 19.4\,\text{dB}$ となります。

$E_s/N_0$ はシンボル誤り率(SER)の計算で直接使われるため、変調方式の性能解析ではこちらが自然な指標です。一方、ビット誤り率(BER)を議論する場合は $E_b/N_0$ が適切です。

この使い分けは以下のように整理できます。

指標 主な用途 正規化の基準
$E_b/N_0$ BER評価、異なる変調方式の公平な比較 ビット
$E_s/N_0$ SER評価、コンスタレーション図の設計 シンボル
SNR ベースバンド処理、アナログ信号の品質 帯域内総電力
C/N RF段のリンク品質、回線設計 搬送波帯域内総電力
$C/N_0$ システム間比較、リンクバジェット 帯域幅を含まない

ここまでで各指標の理論的な位置づけと変換方法が整理できました。最後に、これらの知識を統合して、回線設計シミュレーションをPythonで実装してみましょう。

Pythonによる回線設計シミュレーション

衛星通信リンクバジェットの自動計算

前述の衛星ダウンリンクの計算例をPythonで実装し、パラメータを変えたときの影響を可視化します。

import numpy as np
import matplotlib.pyplot as plt

# 物理定数
k_dB = -228.6  # ボルツマン定数 [dBW/K/Hz]
c = 3e8        # 光速 [m/s]

def free_space_loss_dB(freq_Hz, dist_m):
    """自由空間損失 [dB]"""
    return 20 * np.log10(4 * np.pi * dist_m * freq_Hz / c)

def link_budget(P_t_dBW, G_t_dBi, L_t_dB, freq_Hz, dist_m,
                L_atm_dB, G_r_dBi, L_r_dB, T_sys_K, R_b_bps):
    """リンクバジェット計算 → C/N0, Eb/N0 を返す"""
    # EIRP
    EIRP = P_t_dBW + G_t_dBi - L_t_dB

    # 自由空間損失
    L_fs = free_space_loss_dB(freq_Hz, dist_m)

    # 全損失
    L_total = L_fs + L_atm_dB

    # G/T(受信性能指数)
    G_over_T = G_r_dBi - 10 * np.log10(T_sys_K)

    # C/N0
    CN0 = EIRP - L_total + G_over_T - k_dB

    # Eb/N0
    EbN0 = CN0 - 10 * np.log10(R_b_bps)

    return CN0, EbN0

# --- 基本パラメータ(静止衛星ダウンリンク) ---
P_t = 10       # dBW (10 W)
G_t = 30       # dBi
L_t = 2        # dB
freq = 12e9    # 12 GHz (Kuバンド)
dist = 36000e3 # 36,000 km
L_atm = 0.5    # dB
G_r = 40       # dBi
L_r = 1        # dB
T_sys = 150    # K
R_b = 10e6     # 10 Mbps

# 基本計算
CN0_base, EbN0_base = link_budget(P_t, G_t, L_t, freq, dist,
                                   L_atm, G_r, L_r, T_sys, R_b)
print(f"=== 基本回線設計 ===")
print(f"C/N0 = {CN0_base:.2f} dB-Hz")
print(f"Eb/N0 = {EbN0_base:.2f} dB")
print(f"QPSK所要Eb/N0 = 9.6 dB")
print(f"マージン = {EbN0_base - 9.6:.2f} dB")

このコードは、前節の手計算と同じ結果($C/N_0 \approx 78.5\,\text{dB-Hz}$、$E_b/N_0 \approx 8.5\,\text{dB}$)を出力し、所要マージンが不足していることを確認できます。手計算の検算としても有用です。

ビットレートと変調方式による $E_b/N_0$ マージンの変化

同じ回線条件で、ビットレートと変調方式を変えたときにマージンがどう変化するかを可視化します。

import numpy as np
import matplotlib.pyplot as plt

# 物理定数
k_dB = -228.6
c = 3e8

def free_space_loss_dB(freq_Hz, dist_m):
    return 20 * np.log10(4 * np.pi * dist_m * freq_Hz / c)

def calc_EbN0(P_t_dBW, G_t_dBi, L_t_dB, freq_Hz, dist_m,
              L_atm_dB, G_r_dBi, T_sys_K, R_b_bps):
    EIRP = P_t_dBW + G_t_dBi - L_t_dB
    L_fs = free_space_loss_dB(freq_Hz, dist_m)
    L_total = L_fs + L_atm_dB
    G_over_T = G_r_dBi - 10 * np.log10(T_sys_K)
    CN0 = EIRP - L_total + G_over_T - k_dB
    EbN0 = CN0 - 10 * np.log10(R_b_bps)
    return EbN0

# パラメータ(前と同じ)
P_t, G_t, L_t = 10, 30, 2
freq, dist = 12e9, 36000e3
L_atm, G_r, T_sys = 0.5, 40, 150

# ビットレートを変化させる
Rb_range = np.logspace(5, 8, 200)  # 100 kbps ~ 100 Mbps
EbN0_vs_Rb = np.array([calc_EbN0(P_t, G_t, L_t, freq, dist,
                                   L_atm, G_r, T_sys, Rb)
                        for Rb in Rb_range])

# 各変調方式の所要 Eb/N0
required = {
    'BPSK/QPSK': 9.6,
    '16-QAM': 13.4,
    '64-QAM': 17.8,
}

plt.figure(figsize=(10, 6))
plt.semilogx(Rb_range / 1e6, EbN0_vs_Rb, 'b-', linewidth=2.5,
             label='Available $E_b/N_0$')

colors = ['green', 'orange', 'red']
for (name, req), color in zip(required.items(), colors):
    plt.axhline(y=req, color=color, linestyle='--', linewidth=1.5,
                label=f'Required: {name} = {req} dB')
    # 交点のビットレートを計算
    idx = np.argmin(np.abs(EbN0_vs_Rb - req))
    plt.plot(Rb_range[idx] / 1e6, req, 'k*', markersize=12)
    plt.annotate(f'{Rb_range[idx]/1e6:.1f} Mbps',
                 xy=(Rb_range[idx]/1e6, req),
                 xytext=(Rb_range[idx]/1e6 * 2, req + 1.5),
                 fontsize=9, arrowprops=dict(arrowstyle='->', color='gray'))

plt.xlabel('Bit Rate $R_b$ [Mbps]', fontsize=13)
plt.ylabel('$E_b/N_0$ [dB]', fontsize=13)
plt.title('Available $E_b/N_0$ vs Bit Rate (Satellite Downlink)', fontsize=14)
plt.grid(True, which='both', alpha=0.3)
plt.legend(fontsize=10, loc='upper right')
plt.xlim(0.1, 100)
plt.tight_layout()
plt.savefig('ebn0_vs_bitrate_link.png', dpi=150)
plt.show()

このグラフからは、回線設計の核心ともいえる知見が得られます。

  1. ビットレートが10倍になると $E_b/N_0$ が10 dB低下する — $E_b/N_0 = C/N_0 – 10\log_{10}R_b$ なので、ビットレートが10倍になるごとに $10\,\text{dB}$ ずつ $E_b/N_0$ が減少します。このグラフが直線になるのはそのためです。
  2. 変調方式の選択によって最大ビットレートが決まる — 青い曲線が水平の破線を下回る点が、その変調方式で通信可能な最大ビットレートです。BPSK/QPSKなら約7.7 Mbps、16-QAMなら約3.5 Mbps、64-QAMなら約1.1 Mbps(値はグラフの交点)が限界となります。
  3. 高次変調は帯域効率を上げるがビットレート上限は下がる — 直感に反するかもしれませんが、符号化なしの状況では、高次変調はビットレートの上限を下げてしまいます。帯域効率の恩恵を活かすには、使える帯域幅が十分にある場合に限られます。

総合比較: 必要 $E_b/N_0$ とシャノン限界からの距離

各変調方式がシャノン限界からどれだけ離れているかを数値で確認するコードを作成します。

import numpy as np

# シャノン限界での Eb/N0 [dB]
def shannon_EbN0_dB(eta):
    """帯域効率 eta [bit/s/Hz] に対するシャノン限界の Eb/N0 [dB]"""
    return 10 * np.log10((2**eta - 1) / eta)

# 各変調方式のデータ
modulations = [
    ('BPSK',    1, 9.6),
    ('QPSK',    2, 9.6),
    ('8-PSK',   3, 13.0),
    ('16-QAM',  4, 13.4),
    ('64-QAM',  6, 17.8),
    ('256-QAM', 8, 21.6),
]

print(f"{'変調方式':<10} {'η [b/s/Hz]':>10} {'必要Eb/N0':>10} "
      f"{'Shannon限界':>12} {'Gap':>8}")
print("-" * 60)

for name, eta, ebn0_req in modulations:
    shannon = shannon_EbN0_dB(eta)
    gap = ebn0_req - shannon
    print(f"{name:<10} {eta:>10.0f} {ebn0_req:>10.1f} dB"
          f" {shannon:>10.2f} dB {gap:>7.2f} dB")

# 絶対下限
print(f"\nシャノン限界の絶対下限: {10*np.log10(np.log(2)):.2f} dB")

この出力からは、符号化なしの変調方式がシャノン限界から約 $8\sim 12\,\text{dB}$ 離れていることが確認できます。BPSK/QPSK($\eta = 1, 2$)は最もギャップが大きく、逆に256-QAM($\eta = 8$)は相対的にギャップが小さくなっています。ただし、これは「シャノン限界に近い」ことを意味するわけではなく、帯域効率が高いほど限界も厳しくなるため、絶対的な必要電力はやはり大きいのです。

現代の通信システムでは、ターボ符号やLDPC符号を組み合わせることで、シャノン限界から $0.1\sim 1\,\text{dB}$ 以内に迫る性能が実現されています。

まとめ

本記事では、通信工学の最も基本的かつ重要な指標であるSN比(信号対雑音比)について、SNR・C/N・$E_b/N_0$ の3つの指標を体系的に解説しました。

  • SNR(Signal-to-Noise Ratio) は、信号電力と雑音電力の比であり、最も直感的なSN比の形式です。線形スケールとdBスケールの両方で定義され、回線設計では常にdBで計算します
  • C/N(Carrier-to-Noise Ratio) は、RF段での搬送波電力と帯域内雑音電力の比であり、リンクバジェットの出発点として使われます。$C/N_0$(帯域幅を含まない形式)はシステム間の比較に便利です
  • $E_b/N_0$(ビットあたりエネルギー対雑音電力密度比) は、ディジタル通信における正規化されたSN比であり、変調方式やビットレートによらない公平な比較を可能にします
  • 相互変換 の鍵は $E_b/N_0 = \text{SNR} \cdot B/R_b$ であり、帯域効率 $\eta = R_b/B$ が3つの指標を結ぶ橋渡しの役割を果たします
  • シャノン限界 は $E_b/N_0$ の絶対下限が $\ln 2 \approx -1.59\,\text{dB}$ であることを示し、全ての通信システム設計のベンチマークとなります
  • 帯域効率と電力効率はトレードオフ の関係にあり、高次変調(64-QAM, 256-QAM等)は帯域効率に優れる反面、より高い $E_b/N_0$ を必要とします

SN比の理論は、通信システムの全ての性能議論の出発点です。本記事の内容を基礎として、以下のトピックへと学習を進めることをお勧めします。

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

関連タグ: C/N Eb/N0 SNR SN比 受信品質