通信路容量と周波数利用効率チートシート
シャノン容量、Eb/N0の下限である−1.59 dB、レイリーフェージングにおけるエルゴード容量とアウテージ容量、MIMO容量、TS 38.214に定めるNRのCQI効率を、コードとグラフ付きでまとめます。
このシートは、設計が限界からどれだけ離れているか、あるいはある信号対雑音比(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です。この傾きが空間多重利得です。
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あたりのスループットとして読むこと。
出典
- D. Tse、P. Viswanath「Fundamentals of Wireless Communication」Cambridge University Press、2005年、doi:10.1017/CBO9780511807213、第5章・第7章、著者のサイトで無料公開。
- 3GPP TS 38.214、5.2.2.1節、CQIテーブル。
- 用語集: 周波数利用効率、SNR、Massive MIMO、プリコーディング。