デシベルとリンクバジェットの公式
dB、dBm、dBW、dBi、dBcを1ページにまとめた早見表です。熱雑音フロア、縦続接続の雑音指数、ITU-R P.525による自由空間損失、実行可能なコード付きのリンクバジェットのテンプレートを収録しています。
この早見表は、無線機に触れる前に机上でリンクの成立を確認したい人のためのものです。単位換算、雑音フロア、自由空間損失、リンクバジェットの計算を1か所にまとめています。背景にある考え方は、デシベルとリンクバジェットのレッスンと雑音・SNR・通信路容量のレッスンを読んでください。
単位
| 単位 | 意味 | 換算 |
|---|---|---|
| dB | 2つの電力の比 | 10 log10(P2 / P1) |
| dB(振幅) | 同じインピーダンスにかかる2つの電圧の比 | 20 log10(V2 / V1) |
| dBm | 1 mWを基準とする電力 | 10 log10(P / 1 mW) |
| dBW | 1 Wを基準とする電力 | dBW = dBm − 30 |
| dBi | 等方性放射体を基準とするアンテナ利得 | dBdについてはアンテナ公式の早見表を参照 |
| dBc | 搬送波を基準とする電力。スプリアス、高調波、位相雑音に使う | 搬送波より低いものは負の値 |
| dBm/Hz | 電力スペクトル密度 | 10 log10(B)を加えると帯域幅BでのdBmになる |
| dB/Hz | C/N0のような1 Hzあたりの比 | C/N0 (dB/Hz) = C/N (dB) + 10 log10(B) |
暗算の大半は2つの規則で足ります。dBで表した利得と損失は足し算です。dBmで表した絶対レベルに加減してよいのはdBだけで、dBm同士を足してはいけません(2つの電力の加算には線形単位が必要です)。
覚えておきたい値
| 比 | dB | 電力 | dBm | dBW |
|---|---|---|---|---|
| × 2 | 3.01 | 1 µW | −30 | −60 |
| × 4 | 6.02 | 1 mW | 0 | −30 |
| × 10 | 10 | 100 mW | 20 | −10 |
| × 100 | 20 | 1 W | 30 | 0 |
| × 0.5 | −3.01 | 10 W | 40 | 10 |
| × 1/1000 | −30 | 1 kW | 60 | 30 |
無相関で等しい2つの信号を足すと、どちらか一方より3 dB大きくなります。差が10 dBの場合、弱い方を加えると強い方より0.41 dB大きくなります。
熱雑音
熱雑音の電力はkTBです。ITU-R勧告P.372(無線雑音)では、ボルツマン定数を1.38 × 10⁻²³ J/K、基準温度T0を290 Kとしており、10 log10(kT0) = −204 dBW/Hzとなります。ミリワット単位では−174 dBm/Hzです。
| 帯域幅 | kT0B(雑音指数0 dB) | 主な用途 |
|---|---|---|
| 1 Hz | −174.0 dBm | 基準密度 |
| 125 kHz | −123.0 dBm | LoRaチャネル |
| 1 MHz | −114.0 dBm | 狭帯域IoT、BLE |
| 20 MHz | −101.0 dBm | Wi-FiまたはLTEのチャネル |
| 100 MHz | −94.0 dBm | サブキャリア間隔30 kHzのNR搬送波 |
受信機の雑音指数を加えると、アンテナ端換算の雑音フロアが得られます。
縦続接続の雑音指数
Friisの雑音公式です。各項はすべて線形の比で表します(F = 10^(NF/10)、G = 10^(gain/10))。
F_total = F1 + (F2 - 1)/G1 + (F3 - 1)/(G1 G2) + ...
最初のアンプより前にあるL dBの受動損失は、290 Kで雑音指数L dBとなり、システム雑音指数にそのまま加算されます。このため、低雑音増幅器(LNA)は機構上許す限りアンテナの近くに置きます。
自由空間損失
ITU-R P.525-5(自由空間減衰の計算)は、等方性アンテナ間の自由空間基本伝送損失を20 log10(4πd/λ)としています。周波数をMHz、距離をkmで表すと次のようになります。
L_bf (dB) = 32.4 + 20 log10(f_MHz) + 20 log10(d_km)
距離が2倍になるごとに6 dB増えます。等方性アンテナ間では周波数が2倍になるごとにも6 dB増えますが、開口面積が一定のアンテナではその分を利得で取り戻せます(アンテナの早見表を参照)。
| 周波数 | 100 m | 1 km | 10 km |
|---|---|---|---|
| 868 MHz | 71.2 dB | 91.2 dB | 111.2 dB |
| 2.4 GHz | 80.0 dB | 100.0 dB | 120.0 dB |
| 3.5 GHz | 83.3 dB | 103.3 dB | 123.3 dB |
| 28 GHz | 101.3 dB | 121.3 dB | 141.3 dB |
この表は上の式から求めたものです。実際のリンクでは、クラッタ、壁、樹木、降雨、人体による損失が加わります。自由空間損失は最良の場合として扱ってください。
リンクバジェット
P_rx (dBm) = P_tx + G_tx + G_rx - L_cable - L_path - L_misc
noise (dBm) = -174 + 10 log10(B_Hz) + NF
sensitivity = noise + SNR_required
margin (dB) = P_rx - sensitivity
| 項目 | 数値の主な出典 |
|---|---|
| P_tx | 無線機のデータシートまたは規制上の上限(等価等方輻射電力(EIRP)の上限にはアンテナ利得が含まれる) |
| G_tx, G_rx | アンテナのデータシートのdBi値。実際に使う角度での値 |
| L_cable | ケーブルのデータシートにある、その周波数での1 mあたりの損失に、各コネクタのデータシートにある挿入損失を加えた値 |
| L_path | 最初は自由空間、その後は実測モデルまたは標準化モデル |
| NF | 受信機のデータシート、または上の縦続接続の計算 |
| SNR_required | 目標誤り率で復調器が必要とするSNR(BERの早見表を参照) |
| L_misc | フェードマージン、人体損失、偏波不整合、干渉に対する余裕 |
データシートの受信感度は、明記されたデータレートと誤り率で測定されています。同じ条件どうしで比較してください。リンクマージンは、フェージングや、バジェットに含めなかったすべての要因に備えて残しておく余裕です。
コード
このコードは、雑音フロア、縦続接続の雑音指数、2.4 GHzの短いリンクバジェットを計算します。必要なのはNumPyだけです。
import numpy as np
def db_to_lin(x_db: float) -> float:
return 10 ** (x_db / 10)
def lin_to_db(x: float) -> float:
return 10 * np.log10(x)
def fspl_db(f_mhz: float, d_km: float) -> float:
"""Free-space basic transmission loss, ITU-R P.525 eq. (6)."""
return 32.4 + 20 * np.log10(f_mhz) + 20 * np.log10(d_km)
def noise_floor_dbm(bw_hz: float, nf_db: float) -> float:
"""kT0B at 290 K plus noise figure."""
k = 1.380649e-23
return lin_to_db(k * 290 * bw_hz / 1e-3) + nf_db
def cascade_nf_db(stages: list[tuple[float, float]]) -> float:
"""Friis noise formula. stages = [(gain_dB, nf_dB), ...] in signal order."""
f_total, g_running = 0.0, 1.0
for i, (g_db, nf_db) in enumerate(stages):
f = db_to_lin(nf_db)
f_total += f if i == 0 else (f - 1) / g_running
g_running *= db_to_lin(g_db)
return lin_to_db(f_total)
# kT0 in dBm/Hz
print(f"kT0 = {noise_floor_dbm(1, 0):.2f} dBm/Hz")
for bw in [125e3, 1e6, 20e6, 100e6]:
print(f"noise floor, {bw/1e6:g} MHz, NF 0 dB: {noise_floor_dbm(bw, 0):.1f} dBm")
# Receiver chain: filter (-1.5 dB, NF 1.5), LNA (+20 dB, NF 1.0), mixer (-7 dB, NF 7), IF amp (+20 dB, NF 4)
chain = [(-1.5, 1.5), (20.0, 1.0), (-7.0, 7.0), (20.0, 4.0)]
print(f"cascaded NF = {cascade_nf_db(chain):.2f} dB")
# Link budget: 2.4 GHz, 500 m, 20 dBm TX, 2 dBi each end, 3 dB of cable and connector loss
pt_dbm, gt_dbi, gr_dbi, losses_db = 20.0, 2.0, 2.0, 3.0
loss = fspl_db(2400, 0.5)
pr_dbm = pt_dbm + gt_dbi + gr_dbi - losses_db - loss
bw_hz, nf_db, snr_req_db = 20e6, 6.0, 10.0
sens_dbm = noise_floor_dbm(bw_hz, nf_db) + snr_req_db
print(f"FSPL = {loss:.1f} dB, received = {pr_dbm:.1f} dBm")
print(f"sensitivity = {sens_dbm:.1f} dBm, margin = {pr_dbm - sens_dbm:.1f} dB")
期待される出力:
kT0 = -173.98 dBm/Hz
noise floor, 0.125 MHz, NF 0 dB: -123.0 dBm
noise floor, 1 MHz, NF 0 dB: -114.0 dBm
noise floor, 20 MHz, NF 0 dB: -101.0 dBm
noise floor, 100 MHz, NF 0 dB: -94.0 dBm
cascaded NF = 2.88 dB
FSPL = 94.0 dB, received = -73.0 dBm
sensitivity = -85.0 dBm, margin = 12.0 dB
LNAの前にあるフィルタは、その1.5 dBがそのまま雑音指数に加わります。ミキサの雑音指数7 dBの影響は約0.25 dBにとどまります。前段にLNAの20 dBの利得があるためです。
よくある間違い
- dBmにdBmを足す。ミリワットに換算して足し、dBmに戻してください。
- 電力比に20 log10を使う。20 log10は電圧比または電界強度比にだけ使います。
- リンクがボアサイトから外れているのに、アンテナのピーク利得を使う。
- 規制上の上限がEIRPで定められている場合が多いことを忘れる。高利得のアンテナを使うほど、アンテナへの供給電力は小さくする必要があります。
- 異なるデータレートや誤り率で測定された受信感度を比較する。
- 障害物のあるリンクで、自由空間損失を予測値として扱う。まずフレネルゾーンのクリアランスを確認してください。
出典
- ITU-R P.525-5、自由空間減衰の計算。
- ITU-R P.372、無線雑音。290 KでのkT0 = −204 dBW/Hzの出典。
- 用語集:デシベル、dBm、リンクバジェット、自由空間経路損失。