チートシート

アンテナと電波伝搬の公式

波長、利得と開口面積、ダイポールの指向性、EIRP、Friisの伝達公式、フレネルゾーンのクリアランス、ドップラーとコヒーレンス時間、TR 38.901とITU-Rの経路損失モデルを、コードと経路損失のグラフ付きでまとめた早見表です。

最終確認 2026年11月15日· 3GPP TR 38.901 V19.5.0; ITU-R P.525-5, P.530-19, P.1238-13, P.1411-13, P.838-3; NumPy 2.5, SciPy 1.18

この早見表は、伝搬に関する数値をすぐに必要とするエンジニア向けです。パラボラアンテナで得られる利得、ホップに必要なクリアランス、チャネルが変化する速さ、3.5 GHzで標準モデルが予測する値などを扱います。公式は、各セクションに記載したITU-R勧告と3GPP TR 38.901(0.5〜100 GHzの周波数に対するチャネルモデルの検討)と照合しました。これらを使うリンク計算については、デシベルとリンクバジェットの早見表を参照してください。

基本

量 式 目安の値
波長 λ = c / f 2.4 GHzで12.5 cm、3.5 GHzで8.6 cm、28 GHzで1.07 cm
開口面積から求めるアンテナ利得 G = 4π A_e / λ² 等方性アンテナ: A_e = λ² / 4π(ITU-R P.525)
パラボラアンテナの利得 G = η (π D / λ)²、ηは開口効率 0.6 m、12 GHz、η = 0.6: 35.3 dBi
dBdからdBiへの換算 dBi = dBd + 2.15 半波長ダイポールの指向性は1.64(下記で計算)
微小ダイポール 指向性1.5 1.76 dBi
等価等方輻射電力(EIRP) P_tx (dBm) − L_feed (dB) + G_tx (dBi) 20 dBmを利得6 dBiのアンテナに給電、給電損失1 dB: 25 dBm
偏波の不整合 損失 = −20 log10 cos ψ、ψは直線偏波どうしのなす角 45°で3 dB、90°で非常に大きい

開口面積が一定なら、利得は周波数とともに20 log10 fで増加します。このため、等方性アンテナ間の自由空間損失は周波数とともに増えますが、固定サイズのパラボラアンテナを使うリンクでは周波数を上げても不利になりません。

Friisの伝達公式

P_rx = P_tx G_tx G_rx (λ / (4π d))²                       (linear)
P_rx (dBm) = P_tx (dBm) + G_tx (dBi) + G_rx (dBi) - L_bf (dB)
L_bf = 20 log10(4π d / λ) = 32.4 + 20 log10(f_MHz) + 20 log10(d_km)    (ITU-R P.525-5)

L_bfの2番目の形は、fをGHz、dをmで表しても同じ定数になります。TR 38.901はこの形で記述しています。この式が成り立つのは遠方界、すなわち最大寸法Dのアンテナで約2D²/λより遠い領域です。用語集のFriisの伝達公式と自由空間経路損失の項も参照してください。

クリアランスと大地反射

量 式 出典
第1フレネルゾーン半径 F1 = 17.3 √(d1 d2 / (f d)) m、fはGHz、d1、d2、dはkm ITU-R P.530-19 式(3)
クリアランスの目標 自由空間条件とみなすには、F1の少なくとも60%を障害物のない状態に保つ ITU-R P.530-19
2波モデルのブレークポイント R_bp = 4 h1 h2 / λ ITU-R P.1411-13 式(3)、見通し内の街路リンクに対する下限
ブレークポイントより先 下限の傾きが1ディケードあたり20 dBから40 dBに増える(UHF) ITU-R P.1411-13

5.8 GHz、10 kmのホップでは、経路中央でF1 = 11.4 mです。アンテナの設置高は、見通しだけで決めるのではなく、この値に地球の膨らみ(アースバルジ)を加えて決めます。

時間・周波数方向の変動

量 式 出典
最大ドップラーシフト f_d = v f / c
ドップラー広がり D_s = 2 f_d(全方向から到来するパス) Tse・Viswanath、第2章
コヒーレンス時間 T_c ≈ 1 / (4 D_s) Tse・Viswanath 式(2.44)。1/D_sや1/(8 D_s)を使う文献もあると注記している
コヒーレンス帯域幅 W_c ≈ 1 / (2 T_d)、T_dは遅延広がり Tse・Viswanath、第2章

120 km/h、3.5 GHzではf_d = 389 Hz、T_cは約0.32 msです。これはサブキャリア間隔30 kHzのNRの1スロット(0.5 ms)より短い値です。これらはオーダーを見積もるための目安です。パイロット間隔の選定に使い、その後チャネルモデルで検証してください。

経路損失モデル

3GPP TR 38.901(0.5〜100 GHz)

fcはGHz、距離はm、d3Dは直線距離です。NLOSの損失は、LOSの式と表に示したNLOSの式のうち大きい方の値です。σ_SFは対数正規シャドウフェージングの標準偏差です。

シナリオ 式(LOSはブレークポイントより手前) σ_SF 既定の高さ
UMa LOS 28.0 + 22 log10(d3D) + 20 log10(fc) 4 dB 基地局25 m、UE 1.5〜22.5 m
UMa NLOS 13.54 + 39.08 log10(d3D) + 20 log10(fc) − 0.6 (h_UT − 1.5) 6 dB
UMiストリートキャニオンLOS 32.4 + 21 log10(d3D) + 20 log10(fc) 4 dB 基地局10 m
UMiストリートキャニオンNLOS 35.3 log10(d3D) + 22.4 + 21.3 log10(fc) − 0.3 (h_UT − 1.5) 7.82 dB
屋内ホットスポットLOS 32.4 + 17.3 log10(d3D) + 20 log10(fc) 3 dB
屋内ホットスポットNLOS 38.3 log10(d3D) + 17.30 + 24.9 log10(fc) 8.03 dB

ブレークポイントd’_BP = 4 h’_BS h’_UT fc / cより先では、LOSの傾きは1ディケードあたり40 dBになります。プライム付きの高さは、実際の高さから実効環境高h_E(UMiでは1 m、UMaでは1 m以上)を引いた値です。同じ表には、ルーラルマクロ、屋内工場、オプションの簡易NLOS式も含まれます。いずれかを使う前に、TR 38.901で適用範囲を確認してください。

ITU-R P.1238-13(屋内)

L_total = 20 log10(f_MHz) - 28 + N log10(d_m) + L_f(n)

Nは距離電力損失係数で、周波数と環境ごとに表にまとめられています。L_f(n)はnフロア分の床透過損失です。いずれも勧告の表に掲載された測定値に基づきます。使用する帯域の値を表で確認してください。

ITU-R P.838-3(降雨)

比減衰はγ_R = k R^α dB/kmです。Rはmm/h単位の降雨強度で、kとαは1〜1000 GHzの周波数に対して表にまとめられています。ITU-R P.530は、見通し内ホップの降雨減衰予測にγ_Rを使います。

コード

1つ目のブロックは、上記の指向性と計算例の数値を求めます。微小ダイポールと半波長ダイポールの放射パターンは数値積分します。

import numpy as np
from scipy.integrate import quad

C = 299_792_458.0

def directivity(pattern) -> float:
    """Peak directivity of a pattern U(theta) that does not depend on phi."""
    theta = np.linspace(1e-6, np.pi - 1e-6, 20001)
    u_max = pattern(theta).max()
    integral, _ = quad(lambda t: pattern(t) * np.sin(t), 1e-9, np.pi - 1e-9, limit=200)
    return 4 * np.pi * u_max / (2 * np.pi * integral)

short_dipole = lambda t: np.sin(t) ** 2
half_wave = lambda t: (np.cos(np.pi / 2 * np.cos(t)) / np.sin(t)) ** 2
for name, pat in [("short dipole", short_dipole), ("half-wave dipole", half_wave)]:
    d = directivity(pat)
    print(f"{name}: D = {d:.3f} = {10*np.log10(d):.2f} dBi")

def dish_gain_dbi(diameter_m: float, f_hz: float, efficiency: float = 0.6) -> float:
    lam = C / f_hz
    return 10 * np.log10(efficiency * (np.pi * diameter_m / lam) ** 2)

print(f"0.6 m dish at 12 GHz, efficiency 0.6: {dish_gain_dbi(0.6, 12e9):.1f} dBi")

def fresnel_r1_m(f_ghz: float, d1_km: float, d2_km: float) -> float:
    """First Fresnel zone radius, ITU-R P.530 eq. (3)."""
    return 17.3 * np.sqrt(d1_km * d2_km / (f_ghz * (d1_km + d2_km)))

print(f"Fresnel radius at mid-path, 5.8 GHz, 10 km hop: {fresnel_r1_m(5.8, 5, 5):.1f} m")

v_kmh, f_hz = 120, 3.5e9
fd = v_kmh / 3.6 * f_hz / C
print(f"max Doppler at {v_kmh} km/h, 3.5 GHz: {fd:.0f} Hz, coherence time 1/(4 Ds) with Ds = 2 fd: {1e3/(8*fd):.2f} ms")

期待される出力:

short dipole: D = 1.500 = 1.76 dBi
half-wave dipole: D = 1.641 = 2.15 dBi
0.6 m dish at 12 GHz, efficiency 0.6: 35.3 dBi
Fresnel radius at mid-path, 5.8 GHz, 10 km hop: 11.4 m
max Doppler at 120 km/h, 3.5 GHz: 389 Hz, coherence time 1/(4 Ds) with Ds = 2 fd: 0.32 ms

2つ目のブロックは、3.5 GHzでTR 38.901のUMaとUMiを自由空間と比較します。h_Eを1 mに固定していますが、TR 38.901ではUMaのh_Eは確率的に決まります。このため、ブレークポイントより先のUMa LOS曲線は目安として扱ってください。

import numpy as np

C = 3.0e8  # TR 38.901 uses c = 3.0e8 m/s

def fspl(d3d_m, fc_ghz):
    return 32.4 + 20 * np.log10(fc_ghz) + 20 * np.log10(d3d_m)

def uma(d2d_m, fc_ghz, h_bs=25.0, h_ut=1.5, h_e=1.0):
    """TR 38.901 Table 7.4.1-1 UMa, LOS and NLOS, with h_E fixed at 1 m."""
    d3d = np.sqrt(d2d_m ** 2 + (h_bs - h_ut) ** 2)
    d_bp = 4 * (h_bs - h_e) * (h_ut - h_e) * fc_ghz * 1e9 / C
    pl1 = 28.0 + 22 * np.log10(d3d) + 20 * np.log10(fc_ghz)
    pl2 = (28.0 + 40 * np.log10(d3d) + 20 * np.log10(fc_ghz)
           - 9 * np.log10(d_bp ** 2 + (h_bs - h_ut) ** 2))
    los = np.where(d2d_m <= d_bp, pl1, pl2)
    nlos_p = 13.54 + 39.08 * np.log10(d3d) + 20 * np.log10(fc_ghz) - 0.6 * (h_ut - 1.5)
    return los, np.maximum(los, nlos_p), d_bp

def umi_nlos(d2d_m, fc_ghz, h_bs=10.0, h_ut=1.5, h_e=1.0):
    """TR 38.901 Table 7.4.1-1 UMi street canyon NLOS."""
    d3d = np.sqrt(d2d_m ** 2 + (h_bs - h_ut) ** 2)
    d_bp = 4 * (h_bs - h_e) * (h_ut - h_e) * fc_ghz * 1e9 / C
    pl1 = 32.4 + 21 * np.log10(d3d) + 20 * np.log10(fc_ghz)
    pl2 = (32.4 + 40 * np.log10(d3d) + 20 * np.log10(fc_ghz)
           - 9.5 * np.log10(d_bp ** 2 + (h_bs - h_ut) ** 2))
    los = np.where(d2d_m <= d_bp, pl1, pl2)
    nlos_p = 35.3 * np.log10(d3d) + 22.4 + 21.3 * np.log10(fc_ghz) - 0.3 * (h_ut - 1.5)
    return np.maximum(los, nlos_p)

fc = 3.5
d = np.array([10, 20, 50, 100, 200, 300, 500, 700, 1000, 1500, 2000], dtype=float)
uma_los, uma_nlos, d_bp = uma(d, fc)
umi = umi_nlos(d, fc)
free = fspl(np.sqrt(d ** 2 + 23.5 ** 2), fc)
print(f"UMa breakpoint at {fc} GHz: {d_bp:.0f} m")
for name, v in [("free space", free), ("UMa LOS", uma_los), ("UMa NLOS", uma_nlos), ("UMi NLOS", umi)]:
    print(name, [[int(x), round(float(y), 1)] for x, y in zip(d, v)])

このコードは、UMaのブレークポイント560 mと、次のグラフに示す値を出力します。

80100120140101001,000自由空間UMa LOSUMa NLOSUMi NLOS経路損失(dB)水平距離(m)
自由空間、TR 38.901のUMa LOS・NLOS(基地局25 m、UE 1.5 m)、UMiストリートキャニオンNLOS(基地局10 m)について、3.5 GHzにおける水平距離に対する経路損失の中央値。値は2つ目のコードブロックの出力。シャドウフェージングは含まない。

1 kmでは、UMa NLOSの中央値は自由空間より約38 dB大きくなります。この差に、σ_SFの1〜2倍のシャドウフェージングマージンを加えた分を、セルラーのリンクバジェットで賄う必要があります。

落とし穴

  • 同じ公式の別の形の間で単位を取り違えること。P.525はMHzとkm、TR 38.901はGHzとmを使います。定数32.4はたまたま両方に当てはまります。
  • ボアサイトから大きく外れた位置のユーザーに、アンテナのピーク利得を使うこと。放射パターンを確認してください。
  • 距離・高さ・周波数について、明記された範囲の外でモデルを適用すること。
  • シャドウフェージングを忘れること。公式が与えるのは中央値であり、保証値ではありません。
  • コヒーレンス時間の目安を厳密な値として扱うこと。1/D_sの前の係数は慣習的なものです。

出典

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