チートシート

通信路容量と周波数利用効率チートシート

シャノン容量、Eb/N0の下限である−1.59 dB、レイリーフェージングにおけるエルゴード容量とアウテージ容量、MIMO容量、TS 38.214に定めるNRのCQI効率を、コードとグラフ付きでまとめます。

最終確認 2026年11月15日· 3GPP TS 38.214 V19.5.0 (Release 19); NumPy 2.5

このシートは、設計が限界からどれだけ離れているか、あるいはある信号対雑音比(SNR)でどの程度の周波数利用効率を実現できるかを知りたいエンジニア向けです。加法性白色ガウス雑音(AWGN)の限界、フェージング、複数アンテナ、そして5G NRが実際に通知する効率を扱います。理論はTseとViswanathの「Fundamentals of Wireless Communication」第5章と第7章に従います。雑音・SNR・通信路容量のレッスンでは、これを基礎から順に説明しています。

AWGNの限界

C = B log2(1 + SNR)          bit/s, SNR = P / (N0 B)
eta = C / B                  bit/s/Hz, the spectral efficiency
Eb/N0 >= (2^eta - 1) / eta   at spectral efficiency eta
SNR 容量 備考
−10 dB 0.14 bit/s/Hz 電力制限。容量はSNRにほぼ比例
0 dB 1.00 bit/s/Hz
10 dB 3.46 bit/s/Hz
20 dB 6.66 bit/s/Hz 帯域制限。3 dB増えるごとに約1 bit/s/Hz増加
30 dB 9.97 bit/s/Hz

シャノン容量は信頼できる伝送レートの上限であり、モデムの実際のレートではありません。実用的な符号はそこからある程度離れた点で動作し、ブロックが短くなるほどその差は大きくなります。

二つの領域

TseとViswanath(5.2.2節)は二つの領域を区別しています。高SNRの帯域制限領域では、容量は帯域幅とともに増加します。低SNRの電力制限領域では、帯域幅を無限に大きくすると容量は(P / N0) log2 eに近づきます。この極限でC = P / Ebとおくと、どの方式でも使える最小のEb/N0である−1.59 dBが得られます。この値も同書で導出されています。以下の値は上の3番目の式から求めたものです。

周波数利用効率 η 最小Eb/N0
η → 0 ln 2 = −1.59 dB
0.5 bit/s/Hz −0.82 dB
1 bit/s/Hz 0.00 dB
2 bit/s/Hz 1.76 dB
4 bit/s/Hz 5.74 dB
6 bit/s/Hz 10.21 dB
8 bit/s/Hz 15.03 dB

BERシートにある符号化なしのEb/N0値と比べてください。QPSKでBER 10⁻⁵を得るには、2 bit/s/Hzに対して9.6 dBが必要です。したがって限界との差は8 dB近くあります。符号化はこの差を埋めるために存在します。

フェージング

量 式 備考
エルゴード容量(高速フェージング、受信機がhを知っている場合) E[log2(1 + abs(h)² SNR)] 符号化が多数のフェージングにまたがる
アウテージ確率、レイリー(Tse・Viswanath式5.55) p_out(R) = 1 − exp(−(2^R − 1) / SNR) 高SNRでも1/SNRでしか減少しない
ε-アウテージ容量(式5.57) log2(1 + F⁻¹(1 − ε) SNR)、Fはabs(h)²の相補累積分布関数 レイリーではF⁻¹(1 − ε) = −ln(1 − ε)で、εに近い

レイリーフェージングで1%アウテージの場合、同じレートを得るには、受信機はAWGNより約20 dB高いSNRを必要とします。TseとViswanathは、低SNRでは1%アウテージ容量がAWGN容量の約1%にすぎないと指摘しています。ダイバーシチはこの状況を大きく変えます。L系統の独立したブランチがあれば、アウテージ確率は1/SNR^Lで減少します。

複数アンテナ

Channel known at the transmitter (Tse and Viswanath eq. 7.10, waterfilling):
  C = sum_i log2(1 + P_i* lambda_i^2 / N0),  i = 1 .. n_min = min(n_t, n_r)

Channel unknown at the transmitter, equal power over n_t antennas:
  C = log2 det(I + (SNR / n_t) H H^H)

λ_iはチャネル行列Hの特異値です。高SNRでは、i.i.d.レイリー多入力多出力(MIMO)の容量はSNRが3 dB増えるごとに約n_min bits/s/Hz増加します。1アンテナでは1 bit/s/Hzです。この傾きが空間多重利得です。

0102030-100102030AWGNレイリー、エルゴードレイリー、1%アウテージ2 × 2 MIMO、エルゴード4 × 4 MIMO、エルゴード容量(bit/s/Hz)SNR(dB)
AWGN、レイリーフェージングリンクのエルゴード容量、低速レイリーフェージングリンクの1%アウテージ容量、等電力の2 × 2および4 × 4 i.i.d.レイリーMIMOのエルゴード容量について、SNRに対する容量(bit/s/Hz)を示します。値は下のコードブロックが出力したものです。

NRが通知する値: CQIテーブル2

端末(UE)はチャネル品質を4ビットのインデックスで報告します。TS 38.214(NR physical layer procedures for data)のTable 5.2.2.1-3は256-QAMのCQIテーブルです。このテーブルは各インデックスを、変調方式、符号化率 × 1024、リソースエレメントあたりのビット数で表した効率に対応付けています。効率 = シンボルあたりのビット数 × 符号化率です。

CQI 変調方式 符号化率 × 1024 効率
0 範囲外
1 QPSK 78 0.1523
2 QPSK 193 0.3770
3 QPSK 449 0.8770
4 16QAM 378 1.4766
5 16QAM 490 1.9141
6 16QAM 616 2.4063
7 64QAM 466 2.7305
8 64QAM 567 3.3223
9 64QAM 666 3.9023
10 64QAM 772 4.5234
11 64QAM 873 5.1152
12 256QAM 711 5.5547
13 256QAM 797 6.2266
14 256QAM 885 6.9141
15 256QAM 948 7.4063

このほか、Table 5.2.2.1-2(64QAMまで、最大効率5.5547)と、1024QAMまで対応するTable 5.2.2.1-5(‘table4-r17’)も併存しています。TS 38.214は各インデックスをSNRでは定義していません。参照リソース上でのトランスポートブロック誤り確率が0.1以下(低レート向けのTable 5.2.2.1-4では10⁻⁵以下)となる条件で定義しています。端末が各インデックスを報告するSNRは、その受信機に依存します。リソースエレメントあたりの効率はキャリアのスループットではありません。参照信号、制御チャネル、ガードバンド、サイクリックプレフィックスがそれぞれ一部を占めます。グリッドについてはヌメロロジーシートを参照してください。

コード

複素ガウスチャネルはNumPy(complex128)で生成します。このブロックは1秒未満で実行できます。

import numpy as np

rng = np.random.default_rng(3)
snr_db = np.array([-10, -5, 0, 5, 10, 15, 20, 25, 30])
snr = 10 ** (snr_db / 10)

# AWGN: C = log2(1 + SNR) bit/s/Hz
c_awgn = np.log2(1 + snr)

# Ergodic capacity, Rayleigh fast fading, receiver knows h: E[log2(1 + |h|^2 SNR)]
g = rng.exponential(1.0, 200_000)
c_erg = np.array([np.mean(np.log2(1 + g * s)) for s in snr])

# 1 % outage capacity, Rayleigh slow fading: log2(1 + F^-1(1 - eps) SNR), F^-1(1 - eps) = -ln(1 - eps)
eps = 0.01
c_out = np.log2(1 + -np.log(1 - eps) * snr)

# MIMO, i.i.d. Rayleigh, equal power over nt antennas, no CSI at the transmitter
def mimo_ergodic(n: int, s: float, trials: int = 4000) -> float:
    h = (rng.standard_normal((trials, n, n)) + 1j * rng.standard_normal((trials, n, n))) / np.sqrt(2)
    m = np.eye(n) + (s / n) * h @ np.conj(np.transpose(h, (0, 2, 1)))
    return float(np.mean(np.log2(np.linalg.det(m).real)))

c_2x2 = np.array([mimo_ergodic(2, s) for s in snr])
c_4x4 = np.array([mimo_ergodic(4, s) for s in snr])

print("SNR_dB  AWGN  Rayleigh_ergodic  1%_outage  2x2  4x4")
for row in zip(snr_db, c_awgn, c_erg, c_out, c_2x2, c_4x4):
    print(f"{row[0]:6d} " + " ".join(f"{v:6.2f}" for v in row[1:]))

# Minimum Eb/N0 for a spectral efficiency eta: (2^eta - 1) / eta
for eta in [0.001, 0.5, 1, 2, 4, 6, 8]:
    print(f"eta = {eta:5g} bit/s/Hz: Eb/N0 >= {10*np.log10((2**eta - 1)/eta):6.2f} dB")

期待される出力:

SNR_dB  AWGN  Rayleigh_ergodic  1%_outage  2x2  4x4
   -10   0.14   0.13   0.00   0.26   0.53
    -5   0.40   0.36   0.00   0.72   1.43
     0   1.00   0.86   0.01   1.68   3.35
     5   2.06   1.72   0.05   3.34   6.54
    10   3.46   2.91   0.14   5.54  10.90
    15   5.03   4.34   0.40   8.29  16.24
    20   6.66   5.89   1.00  11.31  22.13
    25   8.31   7.51   2.06  14.47  28.40
    30   9.97   9.15   3.47  17.69  34.88
eta = 0.001 bit/s/Hz: Eb/N0 >=  -1.59 dB
eta =   0.5 bit/s/Hz: Eb/N0 >=  -0.82 dB
eta =     1 bit/s/Hz: Eb/N0 >=   0.00 dB
eta =     2 bit/s/Hz: Eb/N0 >=   1.76 dB
eta =     4 bit/s/Hz: Eb/N0 >=   5.74 dB
eta =     6 bit/s/Hz: Eb/N0 >=  10.21 dB
eta =     8 bit/s/Hz: Eb/N0 >=  15.03 dB

30 dBでの1%アウテージ曲線は、10 dBでのAWGN曲線と等しくなります。これが20 dBのフェージングマージンを数値で示したものです。高SNRでは、4 × 4の曲線は5 dBあたり約6.3〜6.5 bit/s/Hz増加します。AWGNでは約1.7です。

落とし穴

  • 最良のユーザーのSNRで容量を示すこと。セル容量はSNRの分布に依存します。
  • 短いパケットを使う低速フェージングリンクにエルゴード容量を使うこと。その場合の適切な指標はアウテージです。
  • 豊富な散乱がないのにMIMO利得を想定すること。見通し内チャネルではランクが1になることがあります。
  • 占有帯域幅で測ったSNRと、チャネル全体で測ったSNRを比較すること。
  • CQI効率をキャリア1 Hzあたりのスループットとして読むこと。

出典

誤りやバージョン変更に気づいたら 訂正の手順をご覧ください。