導波管の端を何も加工せずにそのまま開口すると、電磁波は確かに空間に放射されます。しかし、この「ただの穴」から出る電磁波は広く拡散し、特定の方向に効率よく放射することができません。さらに、導波管と自由空間のインピーダンスの不整合により、かなりの反射が生じます。
この問題を解決する最もシンプルで実用的な方法が、導波管の開口部を徐々に広げる — つまりホーン(horn)を取り付けることです。ホーンアンテナはこのシンプルな構造でありながら、広い帯域幅、高い利得、良好なインピーダンス整合を実現できる優れたアンテナです。
ホーンアンテナの理論を理解することは、以下の場面で役立ちます。
- マイクロ波計測: ホーンアンテナはアンテナ利得の絶対測定における「基準アンテナ」として使われます。その理論利得が高い精度で予測可能なため、他のアンテナの利得校正に不可欠です
- 衛星通信・レーダーの一次放射器: パラボラアンテナの焦点に置かれる一次放射器としてホーンアンテナが広く使われています。パラボラ反射鏡への照射パターンの設計にホーンの理論が必要です
- 開口面アンテナの理論的基礎: ホーンの解析手法(開口面積分法)は、スロットアンテナやマイクロストリップパッチアンテナなど他の開口面アンテナにも応用できます
本記事の内容
- 導波管の開口端からの放射の問題点
- ホーンアンテナの基本構造(セクトラル・ピラミダル・コニカル)
- 開口面分布と放射パターンの関係
- 利得の計算と最適設計条件
- Pythonで放射パターンと利得の計算・可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
導波管の開口端からの放射
なぜ導波管だけでは不十分なのか
矩形導波管の中を伝搬する電磁波(TE$_{10}$モード)が開口端に到達すると、一部は空間に放射され、一部は導波管内に反射されます。この状況には2つの問題があります。
問題1: 大きな反射損失。導波管内の波動インピーダンスと自由空間の波動インピーダンス(約377 $\Omega$)が異なるため、インピーダンスの不整合が生じます。典型的な矩形導波管では、開口端での反射係数の大きさは $|\Gamma| \approx 0.3$ 程度であり、送信電力の約10%が反射されてしまいます。
問題2: 低い利得。導波管の開口面積は通常、波長の1〜2倍程度と小さいため、開口面アンテナとしての利得はせいぜい5〜8 dBi程度です。電磁波が広く拡散し、特定の方向への集中度が低くなります。
ホーンによる解決
ホーンアンテナは、導波管の開口部をなめらかに(テーパー状に)広げた構造です。この「テーパー」によって2つの問題が同時に解決されます。
反射の低減: 開口断面積が徐々に変化するため、インピーダンスの変化も緩やかになります。導波管のインピーダンスから自由空間のインピーダンスへ、「段差なく」遷移させることで、反射係数を大幅に低減できます。これは光学における反射防止コーティングの多層膜と同じ原理です。
利得の向上: 開口面積を大きくすることで、利得が向上します。開口面アンテナの利得は一般に $G = \eta_a \frac{4\pi A}{\lambda^2}$ で与えられ($A$ は物理的な開口面積、$\eta_a$ は開口効率)、面積が大きいほど利得が高くなります。
ここまでで、ホーンアンテナの基本的なアイデアを理解しました。次に、ホーンアンテナの具体的な構造の種類を見ていきましょう。
ホーンアンテナの基本構造
3つの基本タイプ
ホーンアンテナは、矩形導波管の2辺のどちらを広げるかによって分類されます。
1. セクトラルE面ホーン(E-plane sectoral horn)
導波管のE面(電界方向)の辺のみを広げたホーンです。E面方向のビーム幅が狭くなり、E面の放射パターンが改善されますが、H面のパターンは導波管の開口とほぼ同じままです。
2. セクトラルH面ホーン(H-plane sectoral horn)
導波管のH面(磁界方向)の辺のみを広げたホーンです。H面方向のビーム幅が狭くなります。
3. ピラミダルホーン(pyramidal horn)
E面とH面の両方を広げたホーンで、最も一般的に使用されます。両方向のビームを制御でき、高い利得が得られます。構造が直方体の角錐(ピラミッド)型であることから、この名前が付いています。
これら以外にも、円形導波管の開口を広げたコニカルホーン(conical horn)があり、円偏波の放射に適しています。
ピラミダルホーンの幾何学パラメータ
ピラミダルホーンの主要なパラメータを定義します。
- $a$, $b$: 導波管の幅と高さ($a > b$、TE$_{10}$モード)
- $A$, $B$: ホーン開口の幅と高さ
- $R_H$: H面のフレア長(ホーンの頂点から開口面までの距離、H面)
- $R_E$: E面のフレア長(E面)
- $\psi_H$: H面の半フレア角 $\psi_H = \arctan\left(\frac{A}{2R_H}\right)$
- $\psi_E$: E面の半フレア角 $\psi_E = \arctan\left(\frac{B}{2R_E}\right)$
フレア角が小さいほど(ホーンが長いほど)、開口面の位相誤差が小さくなり、利得が向上する傾向がありますが、物理的なサイズが大きくなるトレードオフがあります。
ここまでで、ホーンアンテナの構造を理解しました。次に、ホーンの開口面における電界分布がどのようなパターンを形成するかを数学的に解析しましょう。
開口面電界分布
等価原理(ホイヘンスの原理)
ホーンアンテナの放射パターンを計算する際の基本的なアプローチは、開口面上の電界分布から遠方の放射界を求めることです。これはホイヘンスの等価原理に基づいています。
ホイヘンスの原理をアンテナに適用すると、開口面上の各点を「微小な二次波源(ホイヘンスの素元波)」とみなすことができます。開口面全体からの寄与を足し合わせる(積分する)ことで、任意の観測点での電磁場が得られます。これは光学における回折理論と本質的に同じです。
E面ホーンの開口面分布
E面ホーン(H面方向の幅 $a$ は導波管のまま、E面方向の高さを $B$ に広げる)の場合、開口面の電界分布は次のようになります。
H面方向($x$方向)は導波管のTE$_{10}$モードのコサイン分布がそのまま保たれます。
$$ E_x(x’) = E_0 \cos\left(\frac{\pi x’}{a}\right) $$
E面方向($y’$方向)は、ホーンの広がりにより一様分布ですが、フレアによる2次位相誤差が加わります。
$$ E_y(y’) = E_0 \exp\left(-j \frac{k y’^2}{2 R_E}\right) $$
この位相項 $\exp(-jky’^2 / 2R_E)$ は、ホーンの開口面が平面ではなく球面状に湾曲していることを反映しています。開口面の端に近い点ほど「位相が遅れて」おり、この位相誤差は2次関数的に増大します。
H面ホーンの開口面分布
H面ホーン(H面方向の幅を $A$ に広げる)では、H面方向にコサイン分布と2次位相誤差が組み合わさります。
$$ E_x(x’) = E_0 \cos\left(\frac{\pi x’}{A}\right) \exp\left(-j \frac{k x’^2}{2 R_H}\right) $$
E面方向は導波管の一様分布のままです。
ピラミダルホーンの開口面分布
ピラミダルホーンでは、両方向にフレアがあるため、開口面の電界分布は次のようになります。
$$ E_y(x’, y’) = E_0 \cos\left(\frac{\pi x’}{A}\right) \exp\left(-j \frac{k x’^2}{2 R_H}\right) \exp\left(-j \frac{k y’^2}{2 R_E}\right) $$
ここで $x’$ はH面方向($-A/2 \leq x’ \leq A/2$)、$y’$ はE面方向($-B/2 \leq y’ \leq B/2$)の座標です。
2次位相誤差の大きさは、開口面の端($x’ = \pm A/2$ または $y’ = \pm B/2$)で最大となります。E面の最大位相誤差 $s$ とH面の最大位相誤差 $t$ を次のように定義します。
$$ s = \frac{B^2}{8\lambda R_E}, \quad t = \frac{A^2}{8\lambda R_H} $$
これらは無次元の量で、位相誤差を波長で正規化したものです。$s = 0$, $t = 0$(位相誤差なし)は一様位相の開口面に対応し、$s$ や $t$ が大きいほどビームが広がり利得が低下します。
ここまでで、ホーンの開口面における電界分布の数学的表現を得ました。次に、この分布からフーリエ変換を通じて放射パターンを計算します。
放射パターンの計算
開口面積分
開口面からの遠方界は、開口面の電界分布のフーリエ変換で与えられます。これは開口面上の各点からの寄与に、方向に依存する位相差 $e^{jk(x’\sin\theta_x + y’\sin\theta_y)}$ をかけて積分したものです。
観測方向を角度 $(\theta, \phi)$ で表すと、遠方界の電界は次の形になります。
$$ E(\theta, \phi) \propto \int_{-A/2}^{A/2} \int_{-B/2}^{B/2} E_y(x’, y’) \, e^{jk(x’ u + y’ v)} \, dx’ \, dy’ $$
ここで $u = \sin\theta\cos\phi$、$v = \sin\theta\sin\phi$ は方向余弦です。
ピラミダルホーンの開口面分布は $x’$ と $y’$ の積の形で書けるため、2重積分は2つの1次元積分の積に分離されます。
$$ E(\theta, \phi) \propto I_H(u) \cdot I_E(v) $$
E面パターン
E面パターン($\phi = 90°$、$v = \sin\theta$)を与える積分 $I_E$ は次のように計算されます。
$$ I_E(v) = \int_{-B/2}^{B/2} \exp\left(-j\frac{ky’^2}{2R_E}\right) e^{jky’v} \, dy’ $$
この積分はフレネル積分と関係しており、閉じた形では次のように表されます。
変数変換 $y’ = B\tau / 2$ を導入し、$s = B^2/(8\lambda R_E)$ を使うと、
$$ I_E(v) = \frac{B}{2\sqrt{2s}} \left[ C(u_2) – C(u_1) + j(S(u_2) – S(u_1)) \right] $$
ここで $C(\cdot)$ と $S(\cdot)$ はフレネルの余弦積分と正弦積分で、
$$ C(x) = \int_0^x \cos\left(\frac{\pi t^2}{2}\right) dt, \quad S(x) = \int_0^x \sin\left(\frac{\pi t^2}{2}\right) dt $$
引数は、
$$ u_1 = \sqrt{2s}\left(-1 – \frac{Bv}{2s\lambda}\right), \quad u_2 = \sqrt{2s}\left(1 – \frac{Bv}{2s\lambda}\right) $$
です。$s = 0$(位相誤差なし)のとき、$I_E$ は通常の sinc 関数に帰着します。
H面パターン
H面パターン($\phi = 0°$、$u = \sin\theta$)を与える積分 $I_H$ は、コサイン振幅分布と2次位相誤差を含みます。
$$ I_H(u) = \int_{-A/2}^{A/2} \cos\left(\frac{\pi x’}{A}\right) \exp\left(-j\frac{kx’^2}{2R_H}\right) e^{jkx’u} \, dx’ $$
コサイン関数を複素指数関数に展開すると、$I_H$ も2つのフレネル積分の和として表されます。
$$ I_H(u) = \frac{1}{2}\left[I_+(u) + I_-(u)\right] $$
ここで $I_\pm$ は、
$$ I_\pm(u) = \int_{-A/2}^{A/2} \exp\left(-j\frac{kx’^2}{2R_H}\right) e^{jk(u \pm \frac{\lambda}{2A})x’} \, dx’ $$
この積分も、$I_E$ と同様のフレネル積分の形に帰着します。
位相誤差の影響
位相誤差パラメータ $s$ と $t$ が放射パターンに与える影響をまとめます。
位相誤差が小さい場合($s, t \ll 1$): 開口面はほぼ一様位相で、放射パターンは理想的な開口面アンテナに近くなります。メインローブが鋭く、サイドローブレベルが低くなります。
位相誤差が大きい場合($s, t > 0.5$): 開口面の端での位相遅れが大きく、メインローブが広がり、利得が低下します。さらに、特定の $s$, $t$ の値ではサイドローブが増大したり、パターンに特徴的な構造が現れたりします。
最適位相誤差: 与えられた開口面積に対して最大の利得を得るには、$s$ と $t$ に最適値が存在します。これはホーンの長さ(フレア長)と開口サイズのトレードオフを反映しています。
ここまでで、放射パターンの解析的な表現を得ました。次に、利得の計算方法と最適設計条件を導出しましょう。
利得の計算と最適設計
開口効率と利得
ホーンアンテナの利得は、開口面積 $A_{\text{phys}} = A \times B$ と開口効率 $\eta_a$ から次のように計算されます。
$$ G = \eta_a \frac{4\pi A_{\text{phys}}}{\lambda^2} = \eta_a \frac{4\pi A B}{\lambda^2} $$
開口効率 $\eta_a$ は、振幅テーパー効率と位相効率の積として表されます。
$$ \eta_a = \eta_{\text{amp}} \cdot \eta_{\text{phase}} $$
振幅テーパー効率 $\eta_{\text{amp}}$: H面のコサイン分布による効率低下を反映します。一様分布のとき $\eta_{\text{amp}} = 1$ ですが、コサイン分布では $\eta_{\text{amp}} = 8/\pi^2 \approx 0.81$ です。
位相効率 $\eta_{\text{phase}}$: 2次位相誤差による効率低下を反映します。位相誤差がゼロのとき $\eta_{\text{phase}} = 1$ で、位相誤差が大きくなると低下します。
ピラミダルホーンの利得公式
ピラミダルホーンの利得はE面とH面の寄与の積として表すことができます。
$$ G_P = \frac{4\pi}{\lambda^2} \cdot A B \cdot \eta_E(s) \cdot \eta_H(t) $$
E面の効率関数 $\eta_E(s)$ は次のように書けます。
$$ \eta_E(s) = \frac{1}{4s}\left\{[C(u_E^+) – C(u_E^-)]^2 + [S(u_E^+) – S(u_E^-)]^2\right\} $$
ここで、$u_E^\pm = \sqrt{2s}(1 \pm 1) = \{0, 2\sqrt{2s}\}$ です。すなわち $u_E^- = 0$, $u_E^+ = 2\sqrt{2s}$ です。
H面の効率関数 $\eta_H(t)$ も同様にフレネル積分で表されますが、コサイン分布の影響で式がやや複雑になります。
最適設計条件
与えられたフレア長 $R$ に対して利得を最大化する開口サイズを求めましょう。
E面の最適条件: $\eta_E(s)$ を最大化する $s$ は、数値的に $s_{\text{opt}} \approx 0.375$ であることが知られています。これは、
$$ B_{\text{opt}} = \sqrt{3\lambda R_E} $$
に対応します。
H面の最適条件: $\eta_H(t)$ を最大化する $t$ は、$t_{\text{opt}} \approx 0.375$ で、
$$ A_{\text{opt}} = \sqrt{3\lambda R_H} $$
です。
これらの条件は、位相誤差を抑えることと開口面積を大きくすることのバランスが取れた「最適点」を表しています。ホーンを長くすると位相誤差は減りますが、実用上のサイズ制約があるため、与えられた長さで最大の利得を得る開口サイズが存在するのです。
最適設計のホーンの開口効率は、ピラミダルホーンで約 $\eta_a \approx 0.51$(理論値)となります。実際のホーンアンテナでは、開口面のフリンジ効果やホーン壁面の有限導電率などにより、開口効率は0.5前後かそれをやや下回る値になります。
ここまでで、ホーンアンテナの利得計算と最適設計の理論を学びました。次に、Pythonを使ってこれらの計算を実装し、放射パターンと利得を可視化しましょう。
Pythonでの放射パターンと利得の計算
E面パターンの計算と可視化
まず、E面ホーンの放射パターンを異なる位相誤差パラメータ $s$ で計算します。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import fresnel
def e_plane_pattern(theta_deg, B_over_lam, s):
"""E面ホーンの正規化放射パターンを計算"""
theta = np.radians(theta_deg)
v = np.sin(theta)
if s < 1e-10:
# s=0の場合はsinc関数
arg = np.pi * B_over_lam * v
pattern = np.where(np.abs(arg) < 1e-10, 1.0, np.sin(arg) / arg)
return np.abs(pattern)
# フレネル積分の引数
sqrt_2s = np.sqrt(2 * s)
u1 = sqrt_2s * (-1 - B_over_lam * v / (2 * s))
u2 = sqrt_2s * (1 - B_over_lam * v / (2 * s))
# scipy.special.fresnel は S(x), C(x) を返す
S1, C1 = fresnel(u1)
S2, C2 = fresnel(u2)
# パターンの計算
real_part = C2 - C1
imag_part = S2 - S1
pattern = np.sqrt(real_part**2 + imag_part**2)
# 正規化
pattern = pattern / np.max(pattern)
return pattern
# 角度の配列
theta = np.linspace(-90, 90, 1001)
# 異なる位相誤差パラメータ
B_lam = 5.0 # B/λ = 5
s_values = [0.0, 0.25, 0.50, 0.75, 1.0]
fig, ax = plt.subplots(figsize=(10, 7))
colors = ["#00e5ff", "#e040fb", "#ffca28", "#76ff03", "#ff6e40"]
for s, color in zip(s_values, colors):
F = e_plane_pattern(theta, B_lam, s)
F_db = 20 * np.log10(np.where(F > 1e-10, F, 1e-10))
ax.plot(theta, F_db, color=color, linewidth=2, label=f"s = {s:.2f}")
ax.set_xlabel(r"$\theta$ [degrees]", fontsize=13)
ax.set_ylabel("Normalized Pattern [dB]", fontsize=13)
ax.set_title(f"E-plane Horn Pattern ($B/\\lambda$ = {B_lam})", fontsize=14)
ax.set_xlim([-90, 90])
ax.set_ylim([-40, 5])
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("horn_e_plane_pattern.png", dpi=150, bbox_inches="tight")
plt.show()
E面パターンのグラフから、位相誤差 $s$ がパターンに与える影響が明確にわかります。
-
$s = 0$(位相誤差なし): 一様開口のsinc関数に対応し、最も鋭いメインローブと規則的なサイドローブが現れます。第1サイドローブは約-13.3 dBです。
-
$s$ の増加に伴うビーム拡がり: $s$ が大きくなるとメインローブが広がり、ピーク利得が低下します。これは開口面端部の位相遅れにより、各点からの寄与の干渉条件がずれるためです。
-
サイドローブの変化: $s$ が大きくなるとサイドローブ構造も変化し、特に $s = 1.0$ ではパターンの形状が大きく崩れています。実用的には $s < 0.5$ で設計するのが一般的です。
H面パターンの計算と可視化
次に、H面パターンを計算します。コサイン振幅分布と位相誤差の組み合わせを扱います。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import fresnel
def h_plane_pattern(theta_deg, A_over_lam, t):
"""H面ホーンの正規化放射パターンを計算"""
theta = np.radians(theta_deg)
u = np.sin(theta)
pattern = np.zeros_like(theta, dtype=float)
for i, th in enumerate(theta):
u_val = np.sin(th)
if t < 1e-10:
# t=0の場合: コサイン開口分布のフーリエ変換
arg1 = np.pi * A_over_lam * u_val + np.pi / 2
arg2 = np.pi * A_over_lam * u_val - np.pi / 2
if np.abs(arg1) < 1e-10:
v1 = 1.0
else:
v1 = np.sin(arg1) / arg1
if np.abs(arg2) < 1e-10:
v2 = 1.0
else:
v2 = np.sin(arg2) / arg2
pattern[i] = np.abs(0.5 * (v1 + v2))
else:
# フレネル積分を使った計算
sqrt_2t = np.sqrt(2 * t)
# I+ 項
v_plus = u_val + 1.0 / (2 * A_over_lam)
u1p = sqrt_2t * (-1 - A_over_lam * v_plus / (2 * t))
u2p = sqrt_2t * (1 - A_over_lam * v_plus / (2 * t))
S1p, C1p = fresnel(u1p)
S2p, C2p = fresnel(u2p)
Ip = np.sqrt((C2p - C1p)**2 + (S2p - S1p)**2)
# I- 項
v_minus = u_val - 1.0 / (2 * A_over_lam)
u1m = sqrt_2t * (-1 - A_over_lam * v_minus / (2 * t))
u2m = sqrt_2t * (1 - A_over_lam * v_minus / (2 * t))
S1m, C1m = fresnel(u1m)
S2m, C2m = fresnel(u2m)
Im = np.sqrt((C2m - C1m)**2 + (S2m - S1m)**2)
pattern[i] = 0.5 * (Ip + Im)
# 正規化
pattern = pattern / np.max(pattern)
return pattern
theta = np.linspace(-90, 90, 1001)
A_lam = 5.0 # A/λ = 5
t_values = [0.0, 0.25, 0.50, 0.75, 1.0]
fig, ax = plt.subplots(figsize=(10, 7))
colors = ["#00e5ff", "#e040fb", "#ffca28", "#76ff03", "#ff6e40"]
for t, color in zip(t_values, colors):
F = h_plane_pattern(theta, A_lam, t)
F_db = 20 * np.log10(np.where(F > 1e-10, F, 1e-10))
ax.plot(theta, F_db, color=color, linewidth=2, label=f"t = {t:.2f}")
ax.set_xlabel(r"$\theta$ [degrees]", fontsize=13)
ax.set_ylabel("Normalized Pattern [dB]", fontsize=13)
ax.set_title(f"H-plane Horn Pattern ($A/\\lambda$ = {A_lam})", fontsize=14)
ax.set_xlim([-90, 90])
ax.set_ylim([-40, 5])
ax.legend(fontsize=11)
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("horn_h_plane_pattern.png", dpi=150, bbox_inches="tight")
plt.show()
H面パターンの結果を見ると、E面パターンとの重要な違いが確認できます。
-
コサイン分布の効果: $t = 0$ でもE面(一様分布)とは異なるパターンが現れます。コサイン分布により第1サイドローブは約 -23 dB と、一様分布の -13 dB に比べて大幅に抑制されています。これはコサイン分布の「テーパー」効果です。
-
位相誤差に対する耐性: コサイン分布はもともと開口面の端でゼロに近いため、端部の位相誤差の影響がE面よりも軽微です。$t$ を増やしてもパターンの劣化がE面ほど激しくありません。
-
メインローブ幅: コサイン分布のためにメインローブはE面(一様分布)よりもやや広くなります。これは高いサイドローブ抑制とのトレードオフです。
ピラミダルホーンの利得計算
ピラミダルホーンの利得を開口サイズの関数として計算し、最適設計点を見つけましょう。
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import fresnel
def horn_gain_dbi(A_lam, B_lam, RE_lam, RH_lam):
"""ピラミダルホーンの利得を計算 (dBi)"""
# 位相誤差パラメータ
s = B_lam**2 / (8 * RE_lam)
t = A_lam**2 / (8 * RH_lam)
# E面効率
if s < 1e-10:
eta_E = 1.0
else:
sqrt_2s = np.sqrt(2 * s)
u_E_plus = 2 * sqrt_2s
S_plus, C_plus = fresnel(u_E_plus)
S_zero, C_zero = fresnel(0.0)
eta_E = (1 / (4 * s)) * ((C_plus - C_zero)**2 + (S_plus - S_zero)**2)
# H面効率(簡略化: コサイン分布の振幅テーパー効率を含む)
# 厳密にはフレネル積分で計算するが、ここでは近似式を使用
eta_amp = 8 / np.pi**2 # コサイン分布のテーパー効率
if t < 1e-10:
eta_H_phase = 1.0
else:
sqrt_2t = np.sqrt(2 * t)
# 2つの項の和(v_plus = 1/(2A_lam), v_minus = -1/(2A_lam)のケース)
for sign in [1, -1]:
v = sign / (2 * A_lam)
# 近似: 位相効率はE面と同様の形
u_H_plus = 2 * sqrt_2t
S_plus, C_plus = fresnel(u_H_plus)
eta_H_phase = (1 / (4 * t)) * ((C_plus)**2 + (S_plus)**2)
eta_total = eta_amp * eta_E * eta_H_phase
# 利得
G = eta_total * 4 * np.pi * A_lam * B_lam
G_dbi = 10 * np.log10(G)
return G_dbi
def horn_gain_precise(A_lam, B_lam, RE_lam, RH_lam):
"""ピラミダルホーンの利得(より正確な公式)"""
s = B_lam**2 / (8 * RE_lam)
t = A_lam**2 / (8 * RH_lam)
# E面効率関数
if s < 1e-10:
GE = B_lam
else:
sqrt_2s = np.sqrt(2 * s)
u1 = sqrt_2s * (-1)
u2 = sqrt_2s * (1)
# 正しい正規化: ボアサイト方向の積分値
S1, C1 = fresnel(u1)
S2, C2 = fresnel(u2)
GE = B_lam / (2 * sqrt_2s) * np.sqrt((C2 - C1)**2 + (S2 - S1)**2)
# H面効率関数(コサイン分布を含む)
if t < 1e-10:
GH = A_lam * 8 / np.pi**2 * A_lam # 不適切
GH = (2 / np.pi) * A_lam # テーパー分を含む実効幅
# 一様位相コサイン分布のボアサイト値はA/2
GH = A_lam * (2 / np.pi)
else:
sqrt_2t = np.sqrt(2 * t)
# v=+1/(2A)
v_p = 1 / (2 * A_lam)
u1p = sqrt_2t * (-1 - A_lam * v_p / (2 * t))
u2p = sqrt_2t * (1 - A_lam * v_p / (2 * t))
S1p, C1p = fresnel(u1p)
S2p, C2p = fresnel(u2p)
Ip = np.sqrt((C2p - C1p)**2 + (S2p - S1p)**2)
# v=-1/(2A)
v_m = -1 / (2 * A_lam)
u1m = sqrt_2t * (-1 - A_lam * v_m / (2 * t))
u2m = sqrt_2t * (1 - A_lam * v_m / (2 * t))
S1m, C1m = fresnel(u1m)
S2m, C2m = fresnel(u2m)
Im = np.sqrt((C2m - C1m)**2 + (S2m - S1m)**2)
GH = A_lam / (4 * sqrt_2t) * (Ip + Im)
# 利得
G = (4 * np.pi / 1.0) * GE * GH # 正規化に注意
# Balanis の公式: G = (4πAB/λ²) × η_E × η_H
# ここでは直接的にGE, GHから
# 簡略化して標準公式を使う
# 標準的なピラミダルホーンの利得公式 (Balanis)
s_param = s
t_param = t
# E面効率
sqrt_2s = max(np.sqrt(2 * s_param), 1e-10)
S_e, C_e = fresnel(sqrt_2s * 2)
S_0, C_0 = fresnel(0)
eff_E = ((C_e - C_0)**2 + (S_e - S_0)**2) / (4 * max(s_param, 1e-10))
if s_param < 1e-10:
eff_E = 1.0
# H面効率(コサインテーパー含む)
eff_H_amp = 8 / np.pi**2
if t_param < 1e-10:
eff_H_phase = 1.0
else:
sqrt_2t = np.sqrt(2 * t_param)
S_h, C_h = fresnel(sqrt_2t * 2)
eff_H_phase = ((C_h)**2 + (S_h)**2) / (4 * t_param)
G = eff_E * eff_H_amp * eff_H_phase * 4 * np.pi * A_lam * B_lam
return 10 * np.log10(max(G, 1e-10))
# フレア長を固定し、開口サイズを変化させたときの利得
RH_lam = 50 # H面フレア長/λ
RE_lam = 50 # E面フレア長/λ
A_range = np.linspace(1, 20, 200) # A/λ
B_range = np.linspace(1, 20, 200) # B/λ
# A(H面開口)を変化させた利得(B固定)
B_fixed = np.sqrt(3 * RE_lam) # E面は最適値に固定
gains_A = []
for A_lam in A_range:
s = B_fixed**2 / (8 * RE_lam)
t = A_lam**2 / (8 * RH_lam)
sqrt_2s = max(np.sqrt(2 * s), 1e-10)
S_e, C_e = fresnel(2 * sqrt_2s)
eff_E = ((C_e)**2 + (S_e)**2) / (4 * max(s, 1e-10))
eff_H_amp = 8 / np.pi**2
if t < 1e-10:
eff_H_phase = 1.0
else:
sqrt_2t = np.sqrt(2 * t)
S_h, C_h = fresnel(2 * sqrt_2t)
eff_H_phase = ((C_h)**2 + (S_h)**2) / (4 * t)
G = eff_E * eff_H_amp * eff_H_phase * 4 * np.pi * A_lam * B_fixed
gains_A.append(10 * np.log10(max(G, 1e-10)))
# B(E面開口)を変化させた利得(A固定)
A_fixed = np.sqrt(3 * RH_lam) # H面は最適値に固定
gains_B = []
for B_lam in B_range:
s = B_lam**2 / (8 * RE_lam)
t = A_fixed**2 / (8 * RH_lam)
if s < 1e-10:
eff_E = 1.0
else:
sqrt_2s = np.sqrt(2 * s)
S_e, C_e = fresnel(2 * sqrt_2s)
eff_E = ((C_e)**2 + (S_e)**2) / (4 * s)
eff_H_amp = 8 / np.pi**2
if t < 1e-10:
eff_H_phase = 1.0
else:
sqrt_2t = np.sqrt(2 * t)
S_h, C_h = fresnel(2 * sqrt_2t)
eff_H_phase = ((C_h)**2 + (S_h)**2) / (4 * t)
G = eff_E * eff_H_amp * eff_H_phase * 4 * np.pi * A_fixed * B_lam
gains_B.append(10 * np.log10(max(G, 1e-10)))
# 最適値
A_opt = np.sqrt(3 * RH_lam)
B_opt = np.sqrt(3 * RE_lam)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# H面開口サイズ vs 利得
axes[0].plot(A_range, gains_A, "c-", linewidth=2)
axes[0].axvline(x=A_opt, color="#e040fb", linestyle="--", linewidth=1.5,
label=f"$A_{{opt}}/\\lambda = \\sqrt{{3R_H/\\lambda}}$ = {A_opt:.1f}")
idx_max_A = np.argmax(gains_A)
axes[0].plot(A_range[idx_max_A], gains_A[idx_max_A], "o", color="#ffca28", markersize=10)
axes[0].set_xlabel(r"$A/\lambda$ (H-plane aperture)", fontsize=13)
axes[0].set_ylabel("Gain [dBi]", fontsize=13)
axes[0].set_title(f"Gain vs H-plane Aperture ($R_H/\\lambda$ = {RH_lam})", fontsize=13)
axes[0].legend(fontsize=11)
axes[0].grid(True, alpha=0.3)
# E面開口サイズ vs 利得
axes[1].plot(B_range, gains_B, "c-", linewidth=2)
axes[1].axvline(x=B_opt, color="#e040fb", linestyle="--", linewidth=1.5,
label=f"$B_{{opt}}/\\lambda = \\sqrt{{3R_E/\\lambda}}$ = {B_opt:.1f}")
idx_max_B = np.argmax(gains_B)
axes[1].plot(B_range[idx_max_B], gains_B[idx_max_B], "o", color="#ffca28", markersize=10)
axes[1].set_xlabel(r"$B/\lambda$ (E-plane aperture)", fontsize=13)
axes[1].set_ylabel("Gain [dBi]", fontsize=13)
axes[1].set_title(f"Gain vs E-plane Aperture ($R_E/\\lambda$ = {RE_lam})", fontsize=13)
axes[1].legend(fontsize=11)
axes[1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig("horn_gain_optimization.png", dpi=150, bbox_inches="tight")
plt.show()
print(f"H面最適開口: A_opt/λ = {A_opt:.2f} (A_opt = {A_opt:.2f}λ)")
print(f"E面最適開口: B_opt/λ = {B_opt:.2f} (B_opt = {B_opt:.2f}λ)")
print(f"最大利得: {max(gains_A):.1f} dBi (H面), {max(gains_B):.1f} dBi (E面)")
利得の最適化グラフから、ホーン設計における重要なトレードオフが読み取れます。
-
利得の極大値の存在: 開口サイズを大きくしていくと、最初は利得が増加しますが、ある点を超えると位相誤差の影響で利得が低下に転じます。この極大点が最適設計点です。
-
最適開口サイズ $\sqrt{3\lambda R}$: 理論的な最適値 $A_{\text{opt}} = \sqrt{3\lambda R_H}$ と数値計算の極大点がよく一致しています。$R/\lambda = 50$ の場合、最適開口は約 $12.2\lambda$ です。
-
利得の上限: 与えられたフレア長では達成可能な最大利得に上限があります。より高い利得を得るにはフレア長(ホーンの長さ)を大きくする必要があります。これはホーン設計の基本的な制約です。
設計例: 10 GHzピラミダルホーン
具体的な設計例として、10 GHzで20 dBiの利得を目標とするピラミダルホーンを設計しましょう。
import numpy as np
# 設計パラメータ
f = 10e9 # 周波数 [Hz]
c = 3e8 # 光速 [m/s]
lam = c / f # 波長 [m]
G_target_dbi = 20 # 目標利得 [dBi]
# 導波管パラメータ(WR-90: Ku帯標準)
a = 22.86e-3 # 導波管幅 [m]
b = 10.16e-3 # 導波管高 [m]
print(f"周波数: {f/1e9:.1f} GHz")
print(f"波長: {lam*1000:.2f} mm")
print(f"導波管: WR-90 ({a*1000:.2f} x {b*1000:.2f} mm)")
print()
# 目標利得から開口面積を見積もる
# G ≈ 0.51 × 4πAB/λ² (開口効率 ≈ 0.51)
G_target = 10**(G_target_dbi / 10)
AB_lam2 = G_target / (0.51 * 4 * np.pi) # AB/λ²
print(f"必要な AB/λ² = {AB_lam2:.1f}")
# 正方形開口を仮定: A = B → A²/λ² = AB_lam2
A_lam = np.sqrt(AB_lam2)
A_mm = A_lam * lam * 1000
print(f"正方形開口の場合: A = B = {A_lam:.2f}λ = {A_mm:.1f} mm")
# 最適設計: A = √(3λR_H), B = √(3λR_E)
# R_H = A²/(3λ), R_E = B²/(3λ)
R_H = (A_lam * lam)**2 / (3 * lam)
R_E = R_H # 正方形の場合
print(f"フレア長 R_H = R_E = {R_H*1000:.1f} mm = {R_H/lam:.1f}λ")
# ホーンの全長
L_H = R_H * (1 - a / (A_lam * lam)) # ホーンの物理長(H面)
L_E = R_E * (1 - b / (A_lam * lam)) # ホーンの物理長(E面)
L = max(L_H, L_E)
print(f"ホーン物理長: {L*1000:.1f} mm")
print()
# 半フレア角
psi_H = np.degrees(np.arctan((A_lam * lam / 2 - a / 2) / L_H))
psi_E = np.degrees(np.arctan((A_lam * lam / 2 - b / 2) / R_E))
print("=== 設計結果 ===")
print(f"開口サイズ: {A_mm:.1f} x {A_mm:.1f} mm")
print(f"フレア長: {R_H*1000:.1f} mm")
print(f"H面半フレア角: {psi_H:.1f}°")
print(f"E面半フレア角: {psi_E:.1f}°")
print(f"推定利得: {G_target_dbi:.1f} dBi")
この設計例により、理論的な知識から具体的なアンテナの寸法を決定するまでのプロセスを体験できます。10 GHz で 20 dBi の利得を得るには、およそ $5\lambda \times 5\lambda$(約150 mm角)の開口面と、約300 mmのフレア長が必要です。全体としてコンパクトな構造でありながら、十分な利得を実現できることがわかります。
まとめ
本記事では、ホーンアンテナの理論と設計について、導波管の放射問題から出発し、開口面分布、放射パターン、利得の計算まで一貫した流れで解説しました。
- ホーンアンテナの目的: 導波管の開口をテーパー状に広げることで、インピーダンス整合と利得の向上を同時に実現する
- 基本構造: セクトラルE面ホーン、セクトラルH面ホーン、ピラミダルホーン、コニカルホーンの4種類。ピラミダルホーンが最も汎用的
- 開口面分布: H面方向にコサイン分布、各面に2次位相誤差 $\exp(-jky’^2/2R)$ が加わる。位相誤差パラメータ $s$, $t$ がパターンの形状を決定する
- 放射パターン: 開口面分布のフーリエ変換で計算。フレネル積分で閉じた形に表される
- 最適設計: 最適開口サイズは $A_{\text{opt}} = \sqrt{3\lambda R}$ で、開口効率は約0.51。与えられたフレア長に対する最大利得が存在する
- 利得のトレードオフ: 開口を大きくすると面積は増えるが位相誤差も増大するため、利得に極大値が存在する
ホーンアンテナは「理論的に利得が予測可能な唯一のアンテナ」と言われるほど、理論と実測の一致が良好です。この特性により、アンテナ計測の基準アンテナとして不可欠な存在となっています。
次のステップとして、以下の記事も参考にしてください。