レーダー方程式の導出と物理的意味を解説

レーダー(RADAR: Radio Detection And Ranging)は、電波を送信して目標からの反射波を受信することで、目標の位置・速度・形状などを検出するシステムです。レーダーの性能を定量的に評価する最も基本的な式が レーダー方程式 です。

レーダー方程式は、送信電力・アンテナ利得・目標までの距離・レーダー断面積(RCS)・受信機感度といったパラメータの関係を与え、レーダーシステムの設計や性能評価の出発点となります。航空管制、気象観測、軍事レーダー、自動車レーダーなど、あらゆるレーダーシステムの基礎です。

本記事の内容

  • レーダーの基本原理(送信 → 反射 → 受信)
  • レーダー方程式の段階的な導出
  • レーダー断面積(RCS)$\sigma$ の定義と典型値
  • 最大探知距離の導出
  • SNR形式のレーダー方程式
  • パルス積分による感度改善(コヒーレント / ノンコヒーレント)
  • Pythonによるレーダーレンジ計算と感度分析

前提知識

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

レーダーの基本原理

レーダーの動作は以下の3ステップで構成されます。

  1. 送信: 送信機がアンテナを介して電波パルスを放射する
  2. 反射: 電波が目標に当たり、一部が散乱・反射される
  3. 受信: 反射波をアンテナで受信し、信号処理で目標を検出する

目標までの距離 $R$ は、電波の往復時間 $\Delta t$ から $R = c\Delta t / 2$($c$ は光速)で求められます。

レーダー方程式の導出

レーダー方程式を、電力の流れを追って段階的に導出します。

Step 1: 等方性アンテナの電力密度

送信電力 $P_t$ [W] の等方性アンテナ(全方向に均等に放射)から距離 $R$ での電力密度は、球面の面積 $4\pi R^2$ で割ったものです。

$$ S_{\text{iso}} = \frac{P_t}{4\pi R^2} \quad [\text{W/m}^2] $$

Step 2: 指向性アンテナの電力密度

実際のアンテナは特定方向に電波を集中させます。送信アンテナ利得 $G_t$ を掛けると、目標方向の電力密度は

$$ \begin{equation} S_{\text{target}} = \frac{P_t G_t}{4\pi R^2} \quad [\text{W/m}^2] \end{equation} $$

Step 3: 目標での反射(RCS)

目標に入射した電波の一部が反射されます。目標の反射特性を表すのが レーダー断面積(RCS: Radar Cross Section)$\sigma$ [m$^2$] です。RCS は「等方的に $\sigma$ [m$^2$] の面積で電力を受けて再放射する仮想的な等方散乱体」として定義されます。

目標が再放射する総電力は

$$ P_{\text{reradiated}} = S_{\text{target}} \cdot \sigma = \frac{P_t G_t \sigma}{4\pi R^2} \quad [\text{W}] $$

Step 4: 受信アンテナでの電力密度

再放射された電力は等方的に広がると仮定します。受信アンテナ位置(距離 $R$)での電力密度は

$$ S_{\text{return}} = \frac{P_{\text{reradiated}}}{4\pi R^2} = \frac{P_t G_t \sigma}{(4\pi)^2 R^4} \quad [\text{W/m}^2] $$

距離 $R$ が 4乗 で効くことに注意してください。レーダーでは電波が往復するため、通信リンク(片道、$R^2$)よりも距離の影響が大きくなります。

Step 5: 受信電力

受信アンテナの実効開口面積 $A_e$ [m$^2$] を使うと、受信電力は

$$ P_r = S_{\text{return}} \cdot A_e = \frac{P_t G_t \sigma A_e}{(4\pi)^2 R^4} $$

アンテナ理論より、アンテナ利得 $G$ と実効開口面積 $A_e$ の関係は

$$ \begin{equation} A_e = \frac{G \lambda^2}{4\pi} \end{equation} $$

受信アンテナ利得 $G_r$ を使って $A_e = G_r\lambda^2/(4\pi)$ を代入すると、

$$ P_r = \frac{P_t G_t G_r \lambda^2 \sigma}{(4\pi)^3 R^4} $$

送受信で同じアンテナを使う(モノスタティックレーダー)場合、$G_t = G_r = G$ なので、

$$ \begin{equation} \boxed{P_r = \frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 R^4}} \end{equation} $$

これが レーダー方程式の基本形 です。

レーダー断面積(RCS)$\sigma$

RCSの厳密な定義

RCSは以下のように定義されます。

$$ \begin{equation} \sigma = \lim_{R \to \infty} 4\pi R^2 \frac{|E_s|^2}{|E_i|^2} = \lim_{R \to \infty} 4\pi R^2 \frac{S_s}{S_i} \quad [\text{m}^2] \end{equation} $$

ここで $E_s$ は散乱電場、$E_i$ は入射電場、$S_s$ は散乱電力密度、$S_i$ は入射電力密度です。$R \to \infty$ の極限をとることで、遠方界(far field)での定義となります。

RCSはデシベル単位(dBsm: dB square meters)でも表されます。

$$ \sigma_{\text{dBsm}} = 10\log_{10}\left(\frac{\sigma}{1 \text{ m}^2}\right) $$

典型的なRCS値

目標 RCS $\sigma$ [m$^2$] RCS [dBsm]
昆虫 $10^{-5}$ $-50$
$10^{-2}$ $-20$
人間 $1$ $0$
小型自動車 $10$ $10$
戦闘機(正面) $1 \sim 10$ $0 \sim 10$
ステルス戦闘機 $10^{-3} \sim 10^{-1}$ $-30 \sim -10$
大型旅客機 $100$ $20$
大型艦船 $10^4 \sim 10^5$ $40 \sim 50$

簡単な形状のRCSの解析解

球体のRCSは、高周波近似(光学領域、$2\pi a/\lambda \gg 1$、$a$ は球の半径)では

$$ \sigma_{\text{sphere}} = \pi a^2 $$

幾何学的な断面積と一致します。これは直感的に理解しやすい結果です。

平板のRCS(法線方向入射)は

$$ \sigma_{\text{plate}} = \frac{4\pi A^2}{\lambda^2} $$

ここで $A$ は平板の面積です。幾何学的断面積よりも波長に依存して大きくなります。

最大探知距離

$R_{\max}$ の導出

レーダーが目標を検出できる最大距離は、受信電力 $P_r$ が受信機の最小検出可能信号電力 $S_{\min}$ に等しくなるときの距離です。

$$ S_{\min} = \frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 R_{\max}^4} $$

$R_{\max}$ について解くと、

$$ \begin{equation} \boxed{R_{\max} = \left(\frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 S_{\min}}\right)^{1/4}} \end{equation} $$

この式は、最大探知距離が各パラメータの 4乗根 に比例することを示しています。つまり、探知距離を2倍にするには、送信電力を $2^4 = 16$ 倍にしなければなりません。

パラメータの影響

$R_{\max}$ に対する各パラメータの影響を整理します。

パラメータ $R_{\max}$ への依存 2倍にする条件
送信電力 $P_t$ $\propto P_t^{1/4}$ $P_t$ を 16倍
アンテナ利得 $G$ $\propto G^{1/2}$ $G$ を 4倍
波長 $\lambda$ $\propto \lambda^{1/2}$ $\lambda$ を 4倍
RCS $\sigma$ $\propto \sigma^{1/4}$ $\sigma$ を 16倍
最小検出電力 $S_{\min}$ $\propto S_{\min}^{-1/4}$ $S_{\min}$ を 1/16

SNR形式のレーダー方程式

熱雑音電力

受信機のノイズフロアは、ボルツマン定数 $k_B$、受信機雑音温度 $T_s$、帯域幅 $B_n$ で決まります。

$$ N = k_B T_s B_n \quad [\text{W}] $$

雑音指数 $F_n$ を使うと、$T_s = T_0(F_n – 1) + T_0 = T_0 F_n$($T_0 = 290$ K を仮定)として

$$ N = k_B T_0 F_n B_n $$

SNR形式

受信信号のSNR(Signal-to-Noise Ratio)は $\text{SNR} = P_r / N$ なので、

$$ \begin{equation} \text{SNR} = \frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 R^4 k_B T_0 F_n B_n} \end{equation} $$

最小検出SNR(検出閾値)を $\text{SNR}_{\min}$ とすると、最大探知距離は

$$ \begin{equation} R_{\max} = \left(\frac{P_t G^2 \lambda^2 \sigma}{(4\pi)^3 k_B T_0 F_n B_n \cdot \text{SNR}_{\min}}\right)^{1/4} \end{equation} $$

典型的には、$\text{SNR}_{\min} \approx 13$ dB(検出確率 $P_d = 0.9$、誤警報確率 $P_{fa} = 10^{-6}$ の場合)です。

デシベル形式

レーダー方程式はデシベル表記で扱うと便利です。

$$ \begin{align} \text{SNR}_{\text{dB}} &= P_t|_{\text{dBW}} + 2G|_{\text{dBi}} + \sigma|_{\text{dBsm}} + \lambda^2|_{\text{dB}} \\ &\quad – 40\log_{10}(R) – 30\log_{10}(4\pi) – k_B T_0|_{\text{dBW/Hz}} – F_n|_{\text{dB}} – B_n|_{\text{dBHz}} \end{align} $$

各項をデシベルで足し引きすることで、リンクバジェット的な計算が容易になります。

パルス積分による感度改善

コヒーレント積分

同一目標に対して $N_p$ 個のパルスを送信し、位相情報を保って加算する(コヒーレント積分)と、信号電力は $N_p^2$ 倍になり、ノイズ電力は $N_p$ 倍になります(ノイズは無相関)。

したがって、SNRは

$$ \text{SNR}_{\text{coherent}} = N_p \cdot \text{SNR}_1 $$

ここで $\text{SNR}_1$ は1パルスあたりのSNRです。コヒーレント積分利得は $N_p$($10\log_{10}(N_p)$ dB)です。

ノンコヒーレント積分

位相情報を使わずに振幅(電力)のみを加算するのがノンコヒーレント積分です。この場合の積分利得は $N_p$ より小さくなります。

Albersheim の近似式によると、ノンコヒーレント積分利得は

$$ \begin{equation} G_I(N_p) \approx N_p^{0.7 \sim 0.9} \end{equation} $$

程度です(正確な値は $\text{SNR}_1$ と $N_p$ に依存)。目安として $N_p$ が大きいほど指数は小さくなります。

パルス積分を含むレーダー方程式

$N_p$ パルスのコヒーレント積分を含む最大探知距離は

$$ R_{\max} = \left(\frac{P_t G^2 \lambda^2 \sigma N_p}{(4\pi)^3 k_B T_0 F_n B_n \cdot \text{SNR}_{\min}}\right)^{1/4} $$

パルス数を増やすことで探知距離を延ばせますが、$R_{\max} \propto N_p^{1/4}$ なので、探知距離を2倍にするには $N_p$ を16倍にする必要があります。

Pythonでの実装

レーダーレンジ計算ツール

import numpy as np
import matplotlib.pyplot as plt

def radar_range_max(Pt, G, freq, sigma, Fn, Bn, SNR_min, Np=1):
    """最大探知距離の計算

    Parameters
    ----------
    Pt : float
        送信電力 [W]
    G : float
        アンテナ利得 [リニア値]
    freq : float
        周波数 [Hz]
    sigma : float
        RCS [m^2]
    Fn : float
        雑音指数 [リニア値]
    Bn : float
        受信帯域幅 [Hz]
    SNR_min : float
        最小検出SNR [リニア値]
    Np : int
        コヒーレント積分パルス数

    Returns
    -------
    R_max : float
        最大探知距離 [m]
    """
    c = 3e8
    lam = c / freq
    kB = 1.38e-23  # ボルツマン定数
    T0 = 290       # 標準温度 [K]

    numerator = Pt * G**2 * lam**2 * sigma * Np
    denominator = (4 * np.pi)**3 * kB * T0 * Fn * Bn * SNR_min

    R_max = (numerator / denominator) ** 0.25
    return R_max

def radar_snr(Pt, G, freq, sigma, R, Fn, Bn, Np=1):
    """指定距離でのSNR計算

    Returns
    -------
    snr : float
        SNR [リニア値]
    """
    c = 3e8
    lam = c / freq
    kB = 1.38e-23
    T0 = 290

    numerator = Pt * G**2 * lam**2 * sigma * Np
    denominator = (4 * np.pi)**3 * R**4 * kB * T0 * Fn * Bn

    return numerator / denominator

# --- 典型的なレーダーパラメータ ---
Pt = 1e3          # 送信電力: 1 kW
G_dBi = 30        # アンテナ利得: 30 dBi
G = 10**(G_dBi/10)
freq = 3e9        # 周波数: 3 GHz (Sバンド)
sigma = 1.0       # RCS: 1 m^2 (0 dBsm)
Fn_dB = 3         # 雑音指数: 3 dB
Fn = 10**(Fn_dB/10)
Bn = 1e6          # 帯域幅: 1 MHz
SNR_min_dB = 13   # 最小検出SNR: 13 dB
SNR_min = 10**(SNR_min_dB/10)

R_max = radar_range_max(Pt, G, freq, sigma, Fn, Bn, SNR_min)
print(f'=== Radar Parameters ===')
print(f'Pt = {Pt/1e3:.1f} kW')
print(f'G  = {G_dBi:.1f} dBi')
print(f'f  = {freq/1e9:.1f} GHz')
print(f'σ  = {10*np.log10(sigma):.1f} dBsm')
print(f'Fn = {Fn_dB:.1f} dB')
print(f'Bn = {Bn/1e6:.1f} MHz')
print(f'SNR_min = {SNR_min_dB:.1f} dB')
print(f'R_max = {R_max/1e3:.2f} km')

# SNR vs 距離のプロット
R_km = np.linspace(1, R_max/1e3 * 1.5, 500)
R_m = R_km * 1e3
snr = radar_snr(Pt, G, freq, sigma, R_m, Fn, Bn)
snr_dB = 10 * np.log10(snr + 1e-30)

fig, axes = plt.subplots(1, 2, figsize=(14, 6))

axes[0].plot(R_km, snr_dB, 'b', linewidth=2)
axes[0].axhline(y=SNR_min_dB, color='r', linestyle='--', label=f'SNR_min = {SNR_min_dB} dB')
axes[0].axvline(x=R_max/1e3, color='g', linestyle='--', label=f'R_max = {R_max/1e3:.1f} km')
axes[0].set_xlabel('Range (km)')
axes[0].set_ylabel('SNR (dB)')
axes[0].set_title('SNR vs Range')
axes[0].legend()
axes[0].grid(True)
axes[0].set_ylim([-10, 60])

# R^4 依存の確認
axes[1].loglog(R_km, snr, 'b', linewidth=2, label='Radar equation')
# R^(-4) の理論線
axes[1].loglog(R_km, snr[0] * (R_km[0]/R_km)**4, 'r--', alpha=0.5, label='R$^{-4}$ slope')
axes[1].axhline(y=SNR_min, color='orange', linestyle=':', label=f'SNR_min')
axes[1].set_xlabel('Range (km)')
axes[1].set_ylabel('SNR (linear)')
axes[1].set_title('SNR vs Range (Log-Log)')
axes[1].legend()
axes[1].grid(True, which='both', alpha=0.3)

plt.tight_layout()
plt.show()

各パラメータの感度分析

import numpy as np
import matplotlib.pyplot as plt

def radar_range_max(Pt, G, freq, sigma, Fn, Bn, SNR_min, Np=1):
    """最大探知距離の計算"""
    c = 3e8
    lam = c / freq
    kB = 1.38e-23
    T0 = 290
    numerator = Pt * G**2 * lam**2 * sigma * Np
    denominator = (4 * np.pi)**3 * kB * T0 * Fn * Bn * SNR_min
    return (numerator / denominator) ** 0.25

# 基本パラメータ
params_base = {
    'Pt': 1e3, 'G': 10**(30/10), 'freq': 3e9,
    'sigma': 1.0, 'Fn': 10**(3/10), 'Bn': 1e6,
    'SNR_min': 10**(13/10)
}

R_base = radar_range_max(**params_base) / 1e3  # km
print(f'Base R_max = {R_base:.2f} km')

fig, axes = plt.subplots(2, 3, figsize=(16, 10))
axes = axes.flatten()

# --- 送信電力の感度 ---
Pt_range = np.logspace(1, 5, 100)  # 10 W ~ 100 kW
R_vs_Pt = [radar_range_max(Pt, params_base['G'], params_base['freq'],
           params_base['sigma'], params_base['Fn'], params_base['Bn'],
           params_base['SNR_min']) / 1e3 for Pt in Pt_range]
axes[0].semilogx(Pt_range/1e3, R_vs_Pt, 'b', linewidth=2)
axes[0].axvline(x=params_base['Pt']/1e3, color='r', linestyle='--', alpha=0.5)
axes[0].set_xlabel('Transmit Power (kW)')
axes[0].set_ylabel('R_max (km)')
axes[0].set_title('R_max vs Transmit Power (∝ Pt^{1/4})')
axes[0].grid(True)

# --- アンテナ利得の感度 ---
G_dBi_range = np.linspace(10, 45, 100)
G_range = 10**(G_dBi_range/10)
R_vs_G = [radar_range_max(params_base['Pt'], G_val, params_base['freq'],
          params_base['sigma'], params_base['Fn'], params_base['Bn'],
          params_base['SNR_min']) / 1e3 for G_val in G_range]
axes[1].plot(G_dBi_range, R_vs_G, 'b', linewidth=2)
axes[1].axvline(x=30, color='r', linestyle='--', alpha=0.5)
axes[1].set_xlabel('Antenna Gain (dBi)')
axes[1].set_ylabel('R_max (km)')
axes[1].set_title('R_max vs Antenna Gain (∝ G^{1/2})')
axes[1].grid(True)

# --- 周波数の感度 ---
freq_range = np.linspace(0.5e9, 20e9, 100)
R_vs_freq = [radar_range_max(params_base['Pt'], params_base['G'], f,
             params_base['sigma'], params_base['Fn'], params_base['Bn'],
             params_base['SNR_min']) / 1e3 for f in freq_range]
axes[2].plot(freq_range/1e9, R_vs_freq, 'b', linewidth=2)
axes[2].axvline(x=3, color='r', linestyle='--', alpha=0.5)
axes[2].set_xlabel('Frequency (GHz)')
axes[2].set_ylabel('R_max (km)')
axes[2].set_title('R_max vs Frequency (∝ λ^{1/2} = (c/f)^{1/2})')
axes[2].grid(True)

# --- RCSの感度 ---
sigma_range = np.logspace(-3, 3, 100)
R_vs_sigma = [radar_range_max(params_base['Pt'], params_base['G'],
              params_base['freq'], sig, params_base['Fn'], params_base['Bn'],
              params_base['SNR_min']) / 1e3 for sig in sigma_range]
axes[3].semilogx(sigma_range, R_vs_sigma, 'b', linewidth=2)
axes[3].axvline(x=1.0, color='r', linestyle='--', alpha=0.5)
axes[3].set_xlabel('RCS σ (m²)')
axes[3].set_ylabel('R_max (km)')
axes[3].set_title('R_max vs RCS (∝ σ^{1/4})')
axes[3].grid(True)

# --- 雑音指数の感度 ---
Fn_dB_range = np.linspace(1, 10, 100)
Fn_range = 10**(Fn_dB_range/10)
R_vs_Fn = [radar_range_max(params_base['Pt'], params_base['G'],
           params_base['freq'], params_base['sigma'], Fn_val,
           params_base['Bn'], params_base['SNR_min']) / 1e3
           for Fn_val in Fn_range]
axes[4].plot(Fn_dB_range, R_vs_Fn, 'b', linewidth=2)
axes[4].axvline(x=3, color='r', linestyle='--', alpha=0.5)
axes[4].set_xlabel('Noise Figure (dB)')
axes[4].set_ylabel('R_max (km)')
axes[4].set_title('R_max vs Noise Figure (∝ Fn^{-1/4})')
axes[4].grid(True)

# --- パルス積分の効果 ---
Np_range = np.arange(1, 129)
R_vs_Np = [radar_range_max(params_base['Pt'], params_base['G'],
           params_base['freq'], params_base['sigma'], params_base['Fn'],
           params_base['Bn'], params_base['SNR_min'], Np=Np_val) / 1e3
           for Np_val in Np_range]
axes[5].plot(Np_range, R_vs_Np, 'b', linewidth=2, label='Coherent')
# ノンコヒーレント積分(近似)
R_vs_Np_nc = [radar_range_max(params_base['Pt'], params_base['G'],
              params_base['freq'], params_base['sigma'], params_base['Fn'],
              params_base['Bn'], params_base['SNR_min'],
              Np=int(Np_val**0.8)) / 1e3 for Np_val in Np_range]
axes[5].plot(Np_range, R_vs_Np_nc, 'r--', linewidth=2, label='Non-coherent (approx)')
axes[5].set_xlabel('Number of Pulses')
axes[5].set_ylabel('R_max (km)')
axes[5].set_title('R_max vs Pulse Integration')
axes[5].legend()
axes[5].grid(True)

plt.suptitle('Radar Equation Sensitivity Analysis', fontsize=14, fontweight='bold')
plt.tight_layout()
plt.show()

リンクバジェット計算

レーダー方程式をデシベル形式でリンクバジェットとして計算する例です。

import numpy as np

def radar_link_budget(Pt_dBW, G_dBi, freq_GHz, sigma_dBsm, R_km,
                      Fn_dB, Bn_dBHz, Np=1):
    """レーダーリンクバジェット計算(デシベル形式)

    Returns
    -------
    budget : dict
        各項のデシベル値
    """
    c = 3e8
    lam = c / (freq_GHz * 1e9)

    # 各項の計算
    budget = {}
    budget['Pt (dBW)'] = Pt_dBW
    budget['Gt (dBi)'] = G_dBi
    budget['Gr (dBi)'] = G_dBi
    budget['λ² (dB)'] = 20 * np.log10(lam)
    budget['σ (dBsm)'] = sigma_dBsm
    budget['(4π)³ (dB)'] = -30 * np.log10(4 * np.pi)  # 損失として負
    budget['R⁴ (dB)'] = -40 * np.log10(R_km * 1e3)    # 損失として負
    budget['kT₀ (dBW/Hz)'] = 10 * np.log10(1.38e-23 * 290)
    budget['Fn (dB)'] = -Fn_dB         # 損失
    budget['Bn (dBHz)'] = -Bn_dBHz     # 損失
    budget['Np (dB)'] = 10 * np.log10(Np)

    # SNR = 合計
    snr_dB = sum(budget.values())

    return budget, snr_dB

# リンクバジェット計算
budget, snr_dB = radar_link_budget(
    Pt_dBW=30,        # 1 kW
    G_dBi=30,
    freq_GHz=3.0,
    sigma_dBsm=0,     # 1 m²
    R_km=50,
    Fn_dB=3,
    Bn_dBHz=60,       # 1 MHz
    Np=16
)

print('=== Radar Link Budget ===')
print('-' * 40)
total = 0
for key, val in budget.items():
    print(f'{key:20s}: {val:+8.2f} dB')
    total += val
print('-' * 40)
print(f'{"SNR":20s}: {snr_dB:+8.2f} dB')
print(f'{"SNR_min (target)":20s}: {13:+8.2f} dB')
print(f'{"Margin":20s}: {snr_dB - 13:+8.2f} dB')

RCS比較プロット

import numpy as np
import matplotlib.pyplot as plt

def radar_range_max(Pt, G, freq, sigma, Fn, Bn, SNR_min, Np=1):
    """最大探知距離の計算"""
    c = 3e8
    lam = c / freq
    kB = 1.38e-23
    T0 = 290
    numerator = Pt * G**2 * lam**2 * sigma * Np
    denominator = (4 * np.pi)**3 * kB * T0 * Fn * Bn * SNR_min
    return (numerator / denominator) ** 0.25

# 典型パラメータ
Pt = 10e3  # 10 kW
G = 10**(35/10)
freq = 10e9  # Xバンド
Fn = 10**(4/10)
Bn = 5e6
SNR_min = 10**(13/10)

# 様々な目標のRCS
targets = {
    'Stealth fighter': 0.01,
    'Small drone': 0.1,
    'Fighter (front)': 3.0,
    'Airliner': 100,
    'Ship': 10000,
}

fig, ax = plt.subplots(figsize=(10, 6))

for name, sigma in targets.items():
    R = np.linspace(1e3, 500e3, 1000)
    snr_dB = 10 * np.log10(
        Pt * G**2 * (3e8/freq)**2 * sigma
        / ((4*np.pi)**3 * R**4 * 1.38e-23 * 290 * Fn * Bn)
        + 1e-30
    )
    ax.plot(R/1e3, snr_dB, linewidth=2,
            label=f'{name} (σ={sigma} m²)')

ax.axhline(y=13, color='k', linestyle='--', linewidth=2, label='Detection threshold (13 dB)')
ax.set_xlabel('Range (km)')
ax.set_ylabel('SNR (dB)')
ax.set_title('SNR vs Range for Various Targets (X-band, 10 kW)')
ax.set_ylim([-20, 80])
ax.legend(fontsize=9)
ax.grid(True)

plt.tight_layout()
plt.show()

このプロットから、ステルス戦闘機(RCS: 0.01 m$^2$)の探知距離が大型旅客機(RCS: 100 m$^2$)の約 1/10 になることが視覚的に確認できます($R_{\max} \propto \sigma^{1/4}$ なので $(100/0.01)^{1/4} \approx 10$)。

まとめ

本記事では、レーダー方程式の導出と物理的意味について解説しました。

  • レーダー方程式は、送信電力 → アンテナ利得 → 自由空間伝搬 → RCS反射 → 受信開口面積の電力伝搬を追うことで段階的に導出される
  • 基本形は $P_r = P_t G^2 \lambda^2 \sigma / (4\pi)^3 R^4$ であり、距離の4乗に反比例する
  • RCS $\sigma$ は目標の電波反射特性を表す量で、目標の形状・材質・周波数に依存する
  • 最大探知距離 $R_{\max} = (P_t G^2 \lambda^2 \sigma / (4\pi)^3 S_{\min})^{1/4}$ は各パラメータの4乗根に比例する
  • SNR形式のレーダー方程式は受信機ノイズを明示的に含み、デシベル形式でリンクバジェット計算に利用できる
  • パルス積分によりSNRを改善でき、コヒーレント積分では $N_p$ 倍の利得が得られる

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