パラボラアンテナと開口面アンテナの理論を解説

パラボラアンテナ(parabolic antenna)は、放物面反射鏡を用いて電磁波を集束する高利得アンテナです。衛星通信の地上局、電波望遠鏡、レーダーなど、高い指向性と利得が要求される用途で広く使用されています。

パラボラアンテナは開口面アンテナ(aperture antenna)の一種です。開口面アンテナとは、ある面(開口面)上の電磁界分布から遠方界を計算するアンテナの総称で、ホーンアンテナやスロットアンテナもこのカテゴリに含まれます。

本記事では、パラボラ反射鏡の幾何学的性質から出発し、開口面アンテナの放射理論を体系的に導出します。

本記事の内容

  • パラボラ反射鏡の幾何学と等位相面の証明
  • 開口面アンテナの理論(ホイヘンス-フレネルの原理)
  • 開口面分布からの遠方界パターン(フーリエ変換関係の導出)
  • 一様開口分布のエアリーパターン
  • 利得 $G = \eta(\pi D / \lambda)^2$ の導出
  • 開口効率 $\eta$ の要因分析
  • $f/D$ 比と照射角の関係
  • Pythonで各種開口分布の放射パターン比較と利得計算

前提知識

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

パラボラ反射鏡の幾何学

放物面の方程式

パラボラ反射鏡は、回転放物面を反射面として利用します。z軸を回転対称軸とし、焦点を原点に置いた場合、放物面の方程式は次のように表されます。

$$ \rho^2 = 4f(f – z) \quad \text{ただし} \quad z \leq f $$

ここで $\rho = \sqrt{x^2 + y^2}$ は回転軸からの距離、$f$ は焦点距離です。

あるいは、焦点からの距離 $r’$ と焦点から見た角度 $\theta’$ を用いた極座標表示では、

$$ r’ = \frac{2f}{1 + \cos\theta’} $$

等位相面の証明

パラボラ反射鏡の最も重要な性質は、焦点から出発したすべての光線(電磁波)が反射後に同じ位相で開口面に到達することです。これを証明しましょう。

焦点 $F$ からパラボラ面上の点 $P$ までの距離 $r’$ は次の通りです。

$$ r’ = \frac{2f}{1 + \cos\theta’} $$

点 $P$ で反射した波は、z軸に平行に進み、開口面($z = f$ の平面とします)に到達します。反射点 $P$ から開口面までの z 方向の距離は、

$$ d = f – z_P $$

放物面上の点の z 座標は $z_P = f – \rho^2/(4f)$ ですが、極座標表示では、

$$ z_P = f – r'(1 – \cos\theta’)/2 = f – \frac{2f}{1+\cos\theta’} \cdot \frac{1-\cos\theta’}{2} $$

簡便に計算するため、焦点から点 $P$ へ行き、そこから開口面まで進む全経路長を計算します。

$$ L = r’ + d = r’ + (f – z_P) $$

焦点からの距離と、反射面の z 座標の関係を使います。点 $P$ の z 座標は、

$$ z_P = r’\cos\theta’ – 0 + 0 = f – \frac{r'(1-\cos\theta’)}{1} $$

ここで正しく計算し直します。焦点を原点に置き、開口面を $z = f$ とします。焦点から反射面上の点 $P$ に向かうベクトルを考えると、z方向の成分は $r’\cos\theta’$ です($\theta’ = 0$ が軸方向)。ただし焦点は原点にあり放物面の頂点は $z = -f$ の位置にあることに注意します。

焦点を原点に置くと、放物面上の点 $P$ の座標は、

$$ z_P = r’\cos\theta’ $$

ただし $\theta’ = 0$ は開口面方向(+z方向、これは頂点から焦点方向と逆)です。

標準的な設定として、焦点を原点に、放物面の頂点を $z = -f$ の位置に置くと、反射面上の点 $P$ の z 座標は、

$$ z_P = -r’\cos\theta’ $$

ここで $\theta’$ は焦点から頂点方向(-z方向)を基準とした角度です。このとき、

$$ r’ = \frac{2f}{1 + \cos\theta’} $$

開口面は $z = 0$(焦点を含む面)に設定すると、反射後のz方向の距離は、

$$ d = 0 – z_P = r’\cos\theta’ $$

ではなく、反射面で反射された後の波はz軸に平行に+z方向に進むので、反射点 $P$ から開口面 $z = 0$ までの距離は、

$$ d = |z_P| = r’\cos\theta’ $$

いや、もっと明確に設定しましょう。焦点を原点に、放物面の対称軸をz軸に、頂点を $-f$ の位置に配置します。焦点から角度 $\theta’$(z軸の方向から測る)の方向に距離 $r’$ の点 $P$ に向かうとすると、

$$ P = (r’\sin\theta’, 0, -r’\cos\theta’) $$

ここで $\theta’ = 0$ は頂点方向(-z方向)です。

放物面の極座標方程式は、

$$ r’ = \frac{f}{1 – \cos\theta’/2} $$

ではなく、通常の定義を使いましょう。放物線の焦点を極とし、対称軸方向を $\theta’ = 0$ とする極座標で、

$$ r’ = \frac{2f}{1 + \cos\theta’} $$

ここで $\theta’ = 0$ が頂点方向です。この設定で、点 $P$ の直交座標は、

$$ P_z = -r’\cos\theta’ = -\frac{2f\cos\theta’}{1 + \cos\theta’} $$

(頂点方向を -z とする)

開口面を焦点を含む平面($z = 0$)に設定すると、反射後の波は +z 方向に平行に進むため、反射点から開口面までの距離は、

$$ d = |P_z| = \frac{2f\cos\theta’}{1 + \cos\theta’} $$

全経路長は、

$$ \begin{align} L &= r’ + d \\ &= \frac{2f}{1 + \cos\theta’} + \frac{2f\cos\theta’}{1 + \cos\theta’} \\ &= \frac{2f(1 + \cos\theta’)}{1 + \cos\theta’} \\ &= 2f \end{align} $$

$$ \boxed{L = r’ + d = 2f \quad (\text{一定})} $$

素晴らしい結果です。焦点からどの方向に出発した波も、反射後に開口面に到達するまでの全経路長が $2f$ で一定です。これは、開口面上のすべての点で電磁波の位相が揃うことを意味します。すなわち、開口面が等位相面(equi-phase surface)になるのです。

この性質により、パラボラ反射鏡は焦点から放射された球面波を平面波に変換する機能を持ちます。逆に、平行に入射してきた平面波を焦点に集束させます。

$f/D$ 比と照射角

定義

パラボラ反射鏡の形状を特徴づける重要なパラメータが $f/D$ 比です。ここで $f$ は焦点距離、$D$ はリフレクタの直径(開口直径)です。

照射半角

焦点から見た反射鏡の縁(エッジ)の半角を $\theta_0$ とすると、リフレクタの半径 $a = D/2$ と焦点距離 $f$ の関係から次が成り立ちます。

$$ r'(\theta_0) = \frac{2f}{1 + \cos\theta_0} $$

また、$\rho = r’\sin\theta_0 = a = D/2$ なので、

$$ \frac{D}{2} = \frac{2f\sin\theta_0}{1 + \cos\theta_0} $$

半角の公式 $\frac{\sin\theta_0}{1 + \cos\theta_0} = \tan(\theta_0/2)$ を用いると、

$$ \frac{D}{2} = 2f\tan\frac{\theta_0}{2} $$

$$ \boxed{\theta_0 = 2\tan^{-1}\frac{D}{4f} = 2\tan^{-1}\frac{1}{4(f/D)}} $$

典型的な $f/D$ 値

$f/D$ $\theta_0$ 特徴
0.25 90.0° 深い皿。一次放射器が反射鏡面内に収まる
0.35 71.1° 標準的
0.40 64.0° 浅め
0.50 53.1° 浅い皿。カセグレン副反射鏡に適す

$f/D$ が小さいほど反射鏡が深くなり照射角が大きくなります。一方、$f/D$ が大きいと反射鏡が浅くなりますが、一次放射器からの照射が均一になりにくくなります。

開口面アンテナの理論

ホイヘンス-フレネルの原理

ホイヘンス-フレネルの原理に基づくと、波面上の各点を二次波源と見なし、その重ね合わせとして後方の電磁界を求めることができます。

開口面 $S_a$ 上の電界分布を $\bm{E}_a(x’, y’)$、磁界分布を $\bm{H}_a(x’, y’)$ とすると、遠方界の電界は次のように表されます。

$$ \bm{E}(r, \theta, \phi) \approx \frac{jk}{4\pi r}e^{-jkr}\hat{r} \times \iint_{S_a} \left[\hat{n} \times \bm{E}_a + \eta_0(\hat{n} \times \bm{H}_a) \times \hat{r}\right] e^{jk\bm{r’}\cdot\hat{r}} \, dS’ $$

ここで $\hat{n}$ は開口面の法線ベクトル、$\bm{r’}$ は開口面上の位置ベクトル、$\hat{r}$ は観測方向の単位ベクトルです。

フーリエ変換関係の導出

簡略化のため、開口面上では平面波近似が成り立つ($\bm{H}_a = \hat{n} \times \bm{E}_a / \eta_0$)とします。また、開口面を $xy$ 平面($z = 0$)に置き、法線を $\hat{z}$ とします。

開口面上の電界が $x$ 偏波 $E_a(x’, y’) \hat{x}$ であるとき、遠方界の主偏波成分は次のように簡略化されます。

$$ E_\theta \propto \int_{-\infty}^{\infty}\int_{-\infty}^{\infty} E_a(x’, y’) e^{jk(x’\sin\theta\cos\phi + y’\sin\theta\sin\phi)} dx’ dy’ $$

方向余弦 $u = \sin\theta\cos\phi$、$v = \sin\theta\sin\phi$ を導入すると、

$$ \boxed{E_\theta(u, v) \propto \iint E_a(x’, y’) e^{jk(x’u + y’v)} dx’ dy’ = \mathcal{F}\{E_a\}(ku, kv)} $$

すなわち、遠方界パターンは開口面電界分布の2次元フーリエ変換に比例するという極めて重要な関係が得られました。

この関係により、開口面分布の形状がわかれば、フーリエ変換の性質を用いて放射パターンを予測できます。

一様開口分布のエアリーパターン

円形開口の場合

直径 $D$ の円形開口上で電界が一様($E_a = E_0$、一定)の場合を考えます。円形開口のフーリエ変換は、ベッセル関数を用いて表されます。

極座標 $(\rho’, \varphi’)$ を導入し、$x’ = \rho’\cos\varphi’$、$y’ = \rho’\sin\varphi’$ とすると、$\phi = 0$ の面(xz面)での積分は、

$$ f(\theta) = \int_0^{a} \int_0^{2\pi} E_0 \cdot e^{jk\rho’\sin\theta\cos\varphi’} \rho’ d\varphi’ d\rho’ $$

ここで $a = D/2$ です。内側の $\varphi’$ 積分にはベッセル関数の積分表示を用います。

$$ \int_0^{2\pi} e^{jk\rho’\sin\theta\cos\varphi’} d\varphi’ = 2\pi J_0(k\rho’\sin\theta) $$

ここで $J_0$ は0次のベッセル関数です。したがって、

$$ f(\theta) = 2\pi E_0 \int_0^{a} J_0(k\rho’\sin\theta) \rho’ d\rho’ $$

$t = k\rho’\sin\theta$ と変数変換し、$w = ka\sin\theta$ とおくと、ベッセル関数の積分公式、

$$ \int_0^{w} J_0(t) \cdot t \, dt = w J_1(w) $$

を用いて、

$$ f(\theta) = 2\pi E_0 \cdot \frac{a^2}{w^2} \cdot w J_1(w) = \pi a^2 E_0 \cdot \frac{2J_1(w)}{w} $$

$$ \boxed{F(\theta) = \frac{2J_1(w)}{w}, \quad w = \frac{\pi D}{\lambda}\sin\theta} $$

これがエアリーパターン(Airy pattern)です。光学におけるエアリーディスクと同じ関数形です。

エアリーパターンの性質

  • $w = 0$($\theta = 0$)のとき: $F = 1$(ロピタルの定理、または $2J_1(w)/w \to 1$)
  • 最初のヌル: $w \approx 3.832$($J_1$ の第1零点)

最初のヌルの角度は、

$$ \sin\theta_{\text{null}} = \frac{3.832\lambda}{\pi D} \approx \frac{1.22\lambda}{D} $$

  • 半値幅(HPBW): $\theta_{\text{HPBW}} \approx 1.02\lambda/D$($\sin\theta \approx \theta$ の近似)
  • 最大サイドローブレベル: $-17.6$ dB(第1サイドローブ)

利得 $G = \eta(\pi D / \lambda)^2$ の導出

最大指向性

一様開口分布の円形アンテナの最大指向性を導出します。

開口面積を $A = \pi(D/2)^2 = \pi D^2/4$ とすると、一様分布の場合の最大指向性は次のように計算されます。

遠方界の最大電界($\theta = 0$ 方向)は、開口面全体からの寄与が同位相で加わるため、

$$ |E_{\max}|^2 \propto \left|\iint E_a \, dS’\right|^2 = |E_0|^2 A^2 $$

一方、全放射電力は開口面上のポインティングベクトルを積分して、

$$ P_{\text{rad}} = \frac{|E_0|^2}{2\eta_0} A $$

放射強度の最大値は、

$$ U_{\max} = \frac{r^2|E_{\max}|^2}{2\eta_0} \propto \frac{|E_0|^2 A^2}{2\eta_0\lambda^2} $$

具体的には、フレネル-キルヒホッフの回折理論から、

$$ U_{\max} = \frac{|E_0|^2 A^2}{2\eta_0\lambda^2} $$

指向性は、

$$ \begin{align} D_{\max} &= \frac{4\pi U_{\max}}{P_{\text{rad}}} \\ &= \frac{4\pi \cdot |E_0|^2 A^2 / (2\eta_0\lambda^2)}{|E_0|^2 A / (2\eta_0)} \\ &= \frac{4\pi A}{\lambda^2} \end{align} $$

$$ \boxed{D_{\max} = \frac{4\pi A}{\lambda^2} = \frac{4\pi \cdot \pi (D/2)^2}{\lambda^2} = \left(\frac{\pi D}{\lambda}\right)^2} $$

これは一様開口分布における理論上の最大指向性です。

利得と開口効率

実際のアンテナでは、開口面上の電界分布が一様でなかったり、各種の損失が存在したりするため、実際の利得は最大指向性より小さくなります。これを開口効率 $\eta_a$ で表します。

$$ \boxed{G = \eta_a \left(\frac{\pi D}{\lambda}\right)^2} $$

ここで $\eta_a$ は開口効率($0 < \eta_a \leq 1$)で、典型的には $0.5 \sim 0.7$ の値をとります。

開口効率の要因分析

開口効率 $\eta_a$ は、複数の効率因子の積として表されます。

$$ \eta_a = \eta_{\text{ill}} \cdot \eta_{\text{spill}} \cdot \eta_{\text{phase}} \cdot \eta_{\text{pol}} \cdot \eta_{\text{block}} \cdot \eta_{\text{surface}} \cdot \eta_{\text{gap}} \cdots $$

1. 照射効率(テーパ効率)$\eta_{\text{ill}}$

一次放射器の放射パターンにより、開口面の中心部は強く照射され周辺部は弱くなります(テーパがかかる)。一様分布からの偏差は利得を低下させます。

テーパ効率は次のように定義されます。

$$ \eta_{\text{ill}} = \frac{\left|\displaystyle\iint E_a(x’, y’) \, dS’\right|^2}{A \displaystyle\iint |E_a(x’, y’)|^2 \, dS’} $$

コーシー-シュワルツの不等式から $\eta_{\text{ill}} \leq 1$ であり、等号は一様分布 $E_a = \text{const.}$ のときのみ成立します。

2. スピルオーバー効率 $\eta_{\text{spill}}$

一次放射器の放射が反射鏡の縁をはみ出す(スピルオーバーする)分の損失です。

$$ \eta_{\text{spill}} = \frac{\displaystyle\int_0^{\theta_0} P_f(\theta’) \sin\theta’ \, d\theta’}{\displaystyle\int_0^{\pi} P_f(\theta’) \sin\theta’ \, d\theta’} $$

ここで $P_f(\theta’)$ は一次放射器の電力パターン、$\theta_0$ は反射鏡の照射半角です。

3. 位相効率 $\eta_{\text{phase}}$

反射鏡面の形状誤差(表面精度)により、開口面上で位相がずれることによる損失です。RMS位相誤差を $\sigma_\phi$ とすると、

$$ \eta_{\text{phase}} \approx e^{-(4\pi\sigma_s/\lambda)^2} $$

ここで $\sigma_s$ は反射鏡面のRMS表面誤差です。これはRuze の式として知られています。

4. その他の要因

  • 偏波効率 $\eta_{\text{pol}}$: 交差偏波成分による損失
  • ブロッキング効率 $\eta_{\text{block}}$: 一次放射器やサポート構造による開口面の遮蔽
  • 表面抵抗損失: 反射鏡の有限導電率による損失

テーパとスピルオーバーのトレードオフ

照射効率とスピルオーバー効率は互いにトレードオフの関係にあります。

  • 反射鏡の縁まで強く照射(テーパ小)→ 照射効率高、スピルオーバー多
  • 反射鏡の縁を弱く照射(テーパ大)→ 照射効率低、スピルオーバー少

両者の積 $\eta_{\text{ill}} \cdot \eta_{\text{spill}}$ を最大化する最適なエッジテーパは、一般に $-10$ dB $\sim -12$ dB 程度とされています。

Pythonでの実装

各種開口分布の放射パターン比較

import numpy as np
import matplotlib.pyplot as plt
from scipy.special import j1  # 1次ベッセル関数

def airy_pattern(theta, D, lam):
    """
    円形一様開口のエアリーパターンを計算する。

    Parameters
    ----------
    theta : array
        角度 [rad]
    D : float
        開口直径 [m]
    lam : float
        波長 [m]

    Returns
    -------
    F : array
        正規化電力パターン
    """
    w = np.pi * D / lam * np.sin(theta)
    # w=0での特異点処理
    F = np.where(np.abs(w) < 1e-10, 1.0, 2 * j1(w) / w)
    return F

def tapered_aperture_pattern(theta, D, lam, n=1):
    """
    テーパ付き円形開口の放射パターンを計算する。
    開口分布: E(rho) = [1 - (2*rho/D)^2]^n

    Parameters
    ----------
    n : int
        テーパ次数(0=一様、1=放物線テーパ、2=強テーパ)

    Returns
    -------
    F : array
        正規化電界パターン
    """
    # 数値積分で計算
    N_rho = 500
    rho = np.linspace(0, D / 2, N_rho)
    drho = rho[1] - rho[0]

    k = 2 * np.pi / lam
    F = np.zeros_like(theta, dtype=complex)

    for i, th in enumerate(theta):
        u = k * np.sin(th)
        # E(rho) * J0(u*rho) * rho の積分
        E_rho = (1 - (2 * rho / D)**2)**n
        integrand = E_rho * np.i0(0) * rho  # J0 は np.i0 ではない
        # J0 を正しく使う
        from scipy.special import j0
        integrand = E_rho * j0(u * rho) * rho
        F[i] = 2 * np.pi * np.trapz(integrand, rho)

    F_norm = np.abs(F) / np.max(np.abs(F))
    return F_norm

# 高速版: 数値積分をベクトル化
def aperture_pattern_fast(theta, D, lam, n=0):
    """
    テーパ付き円形開口の放射パターン(ベクトル化版)。
    開口分布: E(rho) = [1 - (2*rho/D)^2]^n
    """
    from scipy.special import j0

    a = D / 2
    N_rho = 1000
    rho = np.linspace(0, a, N_rho)
    drho = rho[1] - rho[0]
    k = 2 * np.pi / lam

    # 開口分布
    E_rho = (1 - (rho / a)**2)**n

    # 各thetaでの積分
    F = np.zeros(len(theta))
    for i, th in enumerate(theta):
        u = k * np.sin(th)
        integrand = E_rho * j0(u * rho) * rho
        F[i] = np.trapz(integrand, rho)

    F_norm = (F / np.max(np.abs(F)))**2  # 電力パターン
    return F_norm

# パラメータ
D = 1.0       # 開口直径 [m]
lam = 0.03    # 波長 [m] (10 GHz)
theta = np.linspace(-0.15, 0.15, 2001)  # 角度 [rad]

# 各分布のパターン
F_uniform = airy_pattern(theta, D, lam)**2          # 一様分布
F_taper1 = aperture_pattern_fast(theta, D, lam, n=1)  # 放物線テーパ
F_taper2 = aperture_pattern_fast(theta, D, lam, n=2)  # 強テーパ

# dBスケール
def to_dB(F, floor=-50):
    return np.clip(10 * np.log10(np.clip(F, 1e-10, None)), floor, 0)

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

# リニアスケール
ax = axes[0]
ax.plot(np.degrees(theta), F_uniform, 'b-', label='Uniform ($n=0$)', linewidth=2)
ax.plot(np.degrees(theta), F_taper1, 'r--', label='Parabolic taper ($n=1$)', linewidth=2)
ax.plot(np.degrees(theta), F_taper2, 'g:', label='Squared taper ($n=2$)', linewidth=2)
ax.set_xlabel('Angle [deg]', fontsize=12)
ax.set_ylabel('Normalized Power', fontsize=12)
ax.set_title(f'Aperture Distribution Patterns (D/{lam:.0e}m = {D/lam:.0f})', fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)

# dBスケール
ax = axes[1]
ax.plot(np.degrees(theta), to_dB(F_uniform), 'b-', label='Uniform ($n=0$)', linewidth=2)
ax.plot(np.degrees(theta), to_dB(F_taper1), 'r--', label='Parabolic taper ($n=1$)', linewidth=2)
ax.plot(np.degrees(theta), to_dB(F_taper2), 'g:', label='Squared taper ($n=2$)', linewidth=2)
ax.set_xlabel('Angle [deg]', fontsize=12)
ax.set_ylabel('Pattern [dB]', fontsize=12)
ax.set_title('Aperture Distribution Patterns (dB)', fontsize=12)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_ylim([-50, 0])

plt.tight_layout()
plt.savefig('aperture_patterns_comparison.png', dpi=150, bbox_inches='tight')
plt.show()

# サイドローブレベルの比較
print("開口分布によるサイドローブレベルの比較:")
print(f"  一様分布:       SLL = {to_dB(F_uniform)[np.argmax(F_uniform[len(F_uniform)//2+50:])+len(F_uniform)//2+50]:.1f} dB")

利得の計算

import numpy as np
import matplotlib.pyplot as plt

def parabolic_gain(D, lam, eta_a=0.55):
    """
    パラボラアンテナの利得を計算する。

    Parameters
    ----------
    D : float or array
        開口直径 [m]
    lam : float
        波長 [m]
    eta_a : float
        開口効率

    Returns
    -------
    G_dBi : float or array
        利得 [dBi]
    """
    G = eta_a * (np.pi * D / lam)**2
    G_dBi = 10 * np.log10(G)
    return G_dBi

# --- パラメータ空間の可視化 ---
D_range = np.linspace(0.3, 5.0, 200)  # 開口直径 [m]
freqs = [1e9, 4e9, 10e9, 20e9, 40e9]  # 周波数
c = 3e8

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

for f in freqs:
    lam = c / f
    G = parabolic_gain(D_range, lam, eta_a=0.55)
    label = f'{f/1e9:.0f} GHz ($\\lambda$={lam*1e3:.1f}mm)'
    ax.plot(D_range, G, linewidth=2, label=label)

ax.set_xlabel('Dish Diameter $D$ [m]', fontsize=12)
ax.set_ylabel('Gain [dBi]', fontsize=12)
ax.set_title('Parabolic Antenna Gain ($\\eta_a = 0.55$)', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim([0.3, 5.0])
ax.set_ylim([10, 60])

plt.tight_layout()
plt.savefig('parabolic_gain.png', dpi=150, bbox_inches='tight')
plt.show()

# 数値例
print("=" * 60)
print("パラボラアンテナの利得計算例 (ηa = 0.55)")
print("=" * 60)
print(f"{'直径':>8} {'周波数':>10} {'波長':>10} {'D/λ':>8} {'利得 [dBi]':>12}")
print("-" * 60)

examples = [
    (1.2, 12e9),   # Kuバンド衛星通信
    (1.8, 12e9),   # 衛星TV
    (3.0, 6e9),    # Cバンド
    (3.7, 4e9),    # Cバンド大型
    (0.6, 20e9),   # Kaバンド小型
]

for D, f in examples:
    lam = c / f
    G = parabolic_gain(D, lam, 0.55)
    print(f"{D:>7.1f}m {f/1e9:>9.1f}G {lam*1e3:>9.1f}mm {D/lam:>8.1f} {G:>12.1f}")

開口効率の要因分析

import numpy as np
import matplotlib.pyplot as plt
from scipy import integrate

def illumination_spillover_efficiency(edge_taper_dB, f_D, n_feed=2):
    """
    照射効率とスピルオーバー効率を計算する。
    一次放射器のパターン: cos^n(theta')

    Parameters
    ----------
    edge_taper_dB : float
        エッジテーパ [dB](負の値)
    f_D : float
        f/D比
    n_feed : int
        一次放射器のパターン指数

    Returns
    -------
    eta_ill : float
        照射効率
    eta_spill : float
        スピルオーバー効率
    eta_total : float
        両者の積
    """
    # 照射半角
    theta_0 = 2 * np.arctan(1 / (4 * f_D))

    # 一次放射器のパターン: cos^n(theta')
    # エッジテーパからnを逆算: -10*n*log10(cos(theta_0)) = |edge_taper_dB|
    if np.cos(theta_0) > 0:
        n = abs(edge_taper_dB) / (10 * np.log10(1 / np.cos(theta_0)))
    else:
        n = n_feed

    # 一次放射器のパターン
    def P_feed(theta):
        return np.cos(theta)**(2 * n) if theta < np.pi / 2 else 0

    # スピルオーバー効率
    num_spill, _ = integrate.quad(
        lambda t: P_feed(t) * np.sin(t), 0, theta_0)
    den_spill, _ = integrate.quad(
        lambda t: P_feed(t) * np.sin(t), 0, np.pi / 2)
    eta_spill = num_spill / den_spill

    # 照射効率(テーパ効率)の数値計算
    # 開口面上の電界分布から計算
    N = 500
    theta_arr = np.linspace(0, theta_0, N)
    rho = 2 * f_D * np.tan(theta_arr / 2)  # 正規化半径 (rho/a)
    rho /= np.max(rho) if np.max(rho) > 0 else 1

    E_a = np.cos(theta_arr)**n  # 開口面上の電界分布

    # 照射効率: |∫E_a ρ dρ|^2 / (∫|E_a|^2 ρ dρ × A)
    num_ill = np.abs(np.trapz(E_a * rho, rho))**2
    den_ill = np.trapz(np.abs(E_a)**2 * rho, rho) * 0.5  # ×Aで正規化
    if den_ill > 0:
        eta_ill = 2 * num_ill / den_ill
    else:
        eta_ill = 1.0

    eta_ill = min(eta_ill, 1.0)  # 数値誤差で1を超えないよう制限

    return eta_ill, eta_spill, eta_ill * eta_spill

# エッジテーパを変化させた場合の効率
edge_tapers = np.linspace(-2, -20, 100)
f_D = 0.35  # 標準的なf/D比

eta_ills = []
eta_spills = []
eta_totals = []

for et in edge_tapers:
    ei, es, etot = illumination_spillover_efficiency(et, f_D)
    eta_ills.append(ei)
    eta_spills.append(es)
    eta_totals.append(etot)

eta_ills = np.array(eta_ills)
eta_spills = np.array(eta_spills)
eta_totals = np.array(eta_totals)

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

ax.plot(-edge_tapers, eta_ills * 100, 'b-', label='Illumination eff. $\\eta_{ill}$',
        linewidth=2)
ax.plot(-edge_tapers, eta_spills * 100, 'r--', label='Spillover eff. $\\eta_{spill}$',
        linewidth=2)
ax.plot(-edge_tapers, eta_totals * 100, 'k-', label='Total $\\eta_{ill} \\times \\eta_{spill}$',
        linewidth=3)

# 最適点
opt_idx = np.argmax(eta_totals)
ax.axvline(-edge_tapers[opt_idx], color='gray', linestyle=':', alpha=0.7)
ax.plot(-edge_tapers[opt_idx], eta_totals[opt_idx] * 100, 'ko', markersize=10)
ax.annotate(f'Optimum: {-edge_tapers[opt_idx]:.1f} dB\n'
            f'$\\eta$ = {eta_totals[opt_idx]*100:.1f}%',
            xy=(-edge_tapers[opt_idx], eta_totals[opt_idx] * 100),
            xytext=(-edge_tapers[opt_idx] + 3, eta_totals[opt_idx] * 100 - 5),
            fontsize=10, arrowprops=dict(arrowstyle='->', color='gray'))

ax.set_xlabel('Edge Taper [dB]', fontsize=12)
ax.set_ylabel('Efficiency [%]', fontsize=12)
ax.set_title(f'Illumination and Spillover Efficiency Trade-off (f/D = {f_D})',
             fontsize=13)
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
ax.set_xlim([2, 20])
ax.set_ylim([40, 105])

plt.tight_layout()
plt.savefig('aperture_efficiency_tradeoff.png', dpi=150, bbox_inches='tight')
plt.show()

print(f"最適エッジテーパ: {-edge_tapers[opt_idx]:.1f} dB")
print(f"照射効率: {eta_ills[opt_idx]*100:.1f}%")
print(f"スピルオーバー効率: {eta_spills[opt_idx]*100:.1f}%")
print(f"合計効率: {eta_totals[opt_idx]*100:.1f}%")

$f/D$ 比と照射角の関係

import numpy as np
import matplotlib.pyplot as plt

# f/D比の範囲
f_D = np.linspace(0.2, 1.0, 200)

# 照射半角
theta_0 = 2 * np.arctan(1 / (4 * f_D))

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

# 照射半角 vs f/D
ax = axes[0]
ax.plot(f_D, np.degrees(theta_0), 'b-', linewidth=2)
ax.set_xlabel('$f/D$ ratio', fontsize=12)
ax.set_ylabel('Half subtended angle $\\theta_0$ [deg]', fontsize=12)
ax.set_title('Subtended Angle vs $f/D$ Ratio', fontsize=13)
ax.grid(True, alpha=0.3)

# 代表的なf/D値をマーク
fD_marks = [0.25, 0.35, 0.40, 0.50]
for fd in fD_marks:
    th = 2 * np.arctan(1 / (4 * fd))
    ax.plot(fd, np.degrees(th), 'ro', markersize=8)
    ax.annotate(f'f/D={fd}\n$\\theta_0$={np.degrees(th):.1f}°',
                xy=(fd, np.degrees(th)),
                xytext=(fd + 0.05, np.degrees(th) + 5),
                fontsize=9, arrowprops=dict(arrowstyle='->', color='gray'))

# パラボラの断面形状
ax = axes[1]
for fd, color in zip([0.25, 0.35, 0.50, 0.80],
                     ['b', 'r', 'g', 'purple']):
    # パラボラ断面: z = rho^2 / (4f), f = fd * D
    # D = 1 と正規化
    f = fd  # D=1のときf = f/D
    rho = np.linspace(-0.5, 0.5, 200)
    z = rho**2 / (4 * f)
    ax.plot(rho, z, color=color, linewidth=2, label=f'$f/D$ = {fd}')
    # 焦点位置
    ax.plot(0, f, 'o', color=color, markersize=6)

ax.set_xlabel('$\\rho / D$', fontsize=12)
ax.set_ylabel('$z / D$', fontsize=12)
ax.set_title('Parabola Cross-section (Normalized by $D$)', fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_aspect('equal')
ax.set_xlim([-0.6, 0.6])
ax.set_ylim([-0.05, 0.9])

plt.tight_layout()
plt.savefig('fD_ratio_analysis.png', dpi=150, bbox_inches='tight')
plt.show()

Ruzeの式による表面精度の影響

import numpy as np
import matplotlib.pyplot as plt

def ruze_efficiency(sigma_s, lam):
    """
    Ruzeの式により表面精度による効率低下を計算する。

    Parameters
    ----------
    sigma_s : float or array
        RMS表面誤差 [m]
    lam : float
        波長 [m]

    Returns
    -------
    eta_phase : float or array
        位相効率
    """
    return np.exp(-(4 * np.pi * sigma_s / lam)**2)

# 波長の範囲
lam_range = np.array([0.03, 0.01, 0.003, 0.001])  # 30mm, 10mm, 3mm, 1mm
freq_range = 3e8 / lam_range / 1e9  # GHz

# RMS表面誤差の範囲
sigma_range = np.linspace(0, 0.5e-3, 200)  # 0〜0.5mm

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

for lam, freq in zip(lam_range, freq_range):
    eta = ruze_efficiency(sigma_range, lam)
    ax.plot(sigma_range * 1e3, eta * 100, linewidth=2,
            label=f'{freq:.0f} GHz ($\\lambda$={lam*1e3:.0f}mm)')

ax.set_xlabel('RMS Surface Error $\\sigma_s$ [mm]', fontsize=12)
ax.set_ylabel('Phase Efficiency $\\eta_{phase}$ [%]', fontsize=12)
ax.set_title("Ruze's Equation: Surface Accuracy Effect", fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
ax.set_xlim([0, 0.5])
ax.set_ylim([0, 105])

# λ/16 ラインの表示
for lam in lam_range:
    sigma_16 = lam / 16
    if sigma_16 * 1e3 <= 0.5:
        eta_16 = ruze_efficiency(sigma_16, lam)
        ax.axvline(sigma_16 * 1e3, color='gray', linestyle=':', alpha=0.3)

ax.axhline(60, color='gray', linestyle='--', alpha=0.5)
ax.text(0.45, 62, '$\\eta = 60\\%$', fontsize=9, color='gray')

plt.tight_layout()
plt.savefig('ruze_surface_accuracy.png', dpi=150, bbox_inches='tight')
plt.show()

# 実用的なガイドライン
print("実用的な表面精度ガイドライン(η_phase > 60%):")
print(f"{'周波数':>10} {'波長':>10} {'σ_s < λ/16':>15}")
print("-" * 40)
for lam, freq in zip(lam_range, freq_range):
    print(f"{freq:>9.0f}G {lam*1e3:>9.1f}mm {lam/16*1e3:>14.3f}mm")

この結果から、高周波ほど表面精度の要求が厳しくなることがわかります。一般に、表面誤差は $\lambda/16$ 以下に抑えることが推奨されています。

まとめ

本記事では、パラボラアンテナと開口面アンテナの理論を解説しました。

  • パラボラ反射鏡は焦点からの経路長が一定($2f$)であり、開口面上に等位相面を作る
  • $f/D$ 比が反射鏡の形状と照射角 $\theta_0$ を決定する
  • 開口面アンテナの遠方界パターンは開口面電界分布のフーリエ変換に比例する
  • 円形一様開口の放射パターンはエアリーパターン $2J_1(w)/w$ となる
  • 利得は $G = \eta_a(\pi D / \lambda)^2$ で表され、一様分布の理論最大値に開口効率 $\eta_a$ をかけたものである
  • 開口効率は照射効率・スピルオーバー効率・位相効率などの積で決まり、テーパとスピルオーバーはトレードオフの関係にある
  • Ruzeの式により、表面精度が高周波での性能を制限する重要な要因であることがわかる

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