理論通りにアンテナを設計し、シミュレーションで良好な結果を得ても、実際に製作したアンテナが設計通りに動作するとは限りません。製造誤差、給電ケーブルの影響、周辺環境からの反射など、シミュレーションでは捉えきれない要因が実際のアンテナ性能に影響を与えます。
「設計したアンテナが本当に動くのか」を確認する唯一の手段がアンテナ測定です。アンテナ測定は、放射パターン、利得、インピーダンスという3つの基本パラメータを実験的に検証する作業であり、アンテナ工学の理論と実践を結ぶ不可欠なプロセスです。
アンテナ測定の理論を理解することは、以下の場面で大きな力を発揮します。
- 無線機器の認証試験: 各国の電波法に基づく認証試験では、アンテナの放射パターンや利得の測定が義務付けられています。測定原理を理解していなければ、試験結果の妥当性を判断できません
- 衛星・レーダーシステムの検証: 高い性能が要求されるシステムでは、アンテナ単体の測定精度が全体の性能を左右します。測定誤差の見積もりと低減には理論的な理解が不可欠です
- アンテナの研究開発: 新しいアンテナ構造の性能を定量的に評価し、理論やシミュレーションとの比較を行うために、測定技術は研究者の必須スキルです
本記事の内容
- 遠方界測定の条件( $R > 2D^2/\lambda$ の導出)
- 電波暗室の役割と構造
- 放射パターンの測定(回転台法)
- 利得測定の方法(比較法・3アンテナ法)
- VNAによるインピーダンス測定(Sパラメータ)
- 近傍界測定(NF-FF変換)
- Pythonによる測定データの処理と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
遠方界測定の条件
なぜ遠方界が必要なのか
アンテナの放射パターンは、アンテナから十分遠い距離で測定する必要があります。近くで測定すると、球面波の曲率が無視できず、波面が平面波で近似できないため、放射パターンの形状が歪みます。
アンテナから放射された電磁波は球面波ですが、十分遠方では球面の曲率半径が大きくなり、局所的には平面波とみなせます。この条件を満たす距離を遠方界距離(far-field distance)と呼びます。
遠方界条件の導出
遠方界距離 $R_{\text{ff}}$ を導出しましょう。開口寸法 $D$ のアンテナからの放射を考えます。
アンテナの両端から測定点までの距離の差(位相差)が十分小さければ、波面は近似的に平面と見なせます。アンテナの中心から測定点までの距離を $R$ とし、アンテナの端からの距離を考えます。
アンテナ端(中心から $D/2$ の位置)から測定点までの距離は、ピタゴラスの定理(正確には余弦定理)から
$$ R’ = \sqrt{R^2 + (D/2)^2 – 2R(D/2)\cos\theta} $$
$\theta = 90°$(最大の経路差が生じる方向)で $R \gg D$ のとき、二項近似を用いると
$$ R’ \approx R + \frac{D^2}{8R} $$
ここで、中心からの距離 $R$ との経路差は
$$ \Delta R = R’ – R \approx \frac{D^2}{8R} $$
この経路差を位相差に換算すると
$$ \Delta\phi = \frac{2\pi}{\lambda} \Delta R = \frac{\pi D^2}{4\lambda R} $$
遠方界の基準として、位相誤差が $\pi/8$(22.5°)以下であることが一般的に要求されます。
$$ \frac{\pi D^2}{4\lambda R} \leq \frac{\pi}{8} $$
$R$ について解くと
$$ R \geq \frac{2D^2}{\lambda} $$
これが遠方界条件です。
$$ R_{\text{ff}} = \frac{2D^2}{\lambda} $$
具体的な数値例
いくつかの例で遠方界距離を計算してみましょう。
| アンテナ | $D$ | $f$ | $\lambda$ | $R_{\text{ff}}$ |
|---|---|---|---|---|
| 半波長ダイポール (1 GHz) | 0.15 m | 1 GHz | 0.30 m | 0.15 m |
| パッチアンテナ (5 GHz) | 0.03 m | 5 GHz | 0.06 m | 0.03 m |
| パラボラ (10 GHz, 1 m径) | 1.0 m | 10 GHz | 0.03 m | 66.7 m |
| 衛星通信パラボラ (12 GHz, 3 m径) | 3.0 m | 12 GHz | 0.025 m | 720 m |
小型アンテナでは遠方界距離は短く、屋内でも測定可能です。しかし、大型アンテナでは遠方界距離が数百メートルに達し、屋外の広大なテストレンジが必要になります。この問題を解決する手法として、後で近傍界測定を解説します。
遠方界条件を理解したところで、測定を行う環境について見ていきましょう。
電波暗室
なぜ特別な環境が必要なのか
アンテナ測定は、理想的には「アンテナと自由空間だけが存在する」環境で行うべきです。しかし、現実の環境では壁、床、天井、周辺機器からの反射波が測定アンテナに到達し、直接波に干渉して測定結果を歪めます。
屋外のテストレンジでは地面反射が問題になり、屋内では壁面反射が問題になります。これらの反射を排除するために使われるのが電波暗室(anechoic chamber)です。
電波暗室の構造
電波暗室は、壁・天井・床の全面を電波吸収体で覆った部屋です。電波吸収体はピラミッド型のウレタンフォームにカーボンを含浸させたもの(低周波用)や、フェライトタイル(高周波用)が使われます。
ピラミッド型吸収体の反射損失(吸収性能)は、ピラミッドの高さと周波数に依存します。一般に、ピラミッドの高さが波長の1/4以上あれば、反射係数は-20 dB以下に抑えられます。
電波暗室の種類は以下の2つに大別されます。
完全暗室: 全面(壁・天井・床すべて)を吸収体で覆った暗室です。被測定アンテナの周囲360°にわたって反射のない環境を実現します。後述する近傍界測定に適しています。
半暗室(セミアネコイックチャンバー): 壁と天井は吸収体で覆いますが、床は導体板(グラウンドプレーン)のままにした暗室です。車載アンテナや携帯端末アンテナの測定など、グラウンドプレーンが存在する実使用環境を模擬する場合に使われます。
反射レベルの評価
電波暗室の性能はクワイエットゾーン(quiet zone)の品質で評価されます。クワイエットゾーンとは、被測定アンテナが配置される領域で、反射波の影響が所定のレベル以下に抑えられた空間です。
クワイエットゾーンの品質は、リップル振幅(直接波と反射波の干渉によるレベル変動)で表されます。高品質な暗室では、リップルが $\pm 0.5$ dB 以下(反射レベル $< -40$ dB に相当)に管理されています。
電波暗室の環境を理解したところで、放射パターンの具体的な測定手法を見ていきましょう。
放射パターンの測定
測定系の構成
放射パターンの測定系は、次の主要コンポーネントで構成されます。
- 被測定アンテナ(AUT: Antenna Under Test): 回転台(ポジショナー)の上に取り付けられます
- ソースアンテナ(送信アンテナ): 既知の偏波と指向性を持つ標準アンテナ(ホーンアンテナが一般的)
- 回転台(ポジショナー): AUTを所望の角度に回転させる装置。方位角 $\phi$ と仰角 $\theta$ の2軸制御
- 送信器: 一定レベルの信号を発生するシグナルジェネレータ
- 受信器: AUTで受信した信号レベルを測定するスペクトラムアナライザまたはネットワークアナライザ
測定手順
放射パターンの測定手順は以下のとおりです。
ステップ1: 送信アンテナからAUTへ向けて一定レベルの電波を送信します。 送信レベルは測定系のダイナミックレンジ(通常40〜60 dB)を考慮して設定します。
ステップ2: AUTを回転台で所定の角度に回転させ、受信レベルを記録します。 通常、1°ステップで360°回転させます。
ステップ3: 記録された受信レベルの角度依存性が放射パターンです。 最大値を0 dBに正規化して表示します。
E面(電界面)とH面(磁界面)のパターンを別々に測定し、2次元の放射パターンを得ます。3次元パターンが必要な場合は、$\theta$ と $\phi$ の両方をスキャンして球面上のデータを取得します。
測定精度に影響する要因
放射パターンの測定精度に影響する主な要因は以下のとおりです。
位置決め精度: 回転台の角度精度は $\pm 0.1°$ 以下が望ましいです。高利得アンテナ(ビーム幅が狭い)ほど要求が厳しくなります。
ケーブルの影響: AUTに接続された同軸ケーブルが放射パターンを乱す場合があります。対策として、ケーブルを吸収体で覆う、フェライトコアでコモンモード電流を抑制するなどの処置が必要です。
多重反射: 暗室内の残留反射が測定結果に重畳します。反射レベルが-30 dBのとき、パターンの測定誤差は $\pm 0.3$ dB 程度です。
偏波の不整合: AUTとソースアンテナの偏波が一致していないと、偏波損失が生じ正確な測定ができません。交差偏波パターンの測定には、ソースアンテナの偏波純度が重要です。
放射パターンの測定方法を理解したところで、次に利得の測定方法を見ていきましょう。
利得の測定
利得測定の重要性
アンテナの利得は、そのアンテナが特定の方向にどれだけ効率よく電力を集中できるかを示す最も重要なパラメータの一つです。利得の測定には、絶対利得と相対利得の2つのアプローチがあります。
比較法(置換法)
最も広く使われる利得測定法が比較法(comparison method)です。既知の利得を持つ標準利得アンテナ(SGH: Standard Gain Horn)を基準にして、AUTの利得を測定します。
手順:
- まず、標準利得アンテナ(SGH)を受信側に設置し、送信電力 $P_t$ に対する受信電力 $P_{r,\text{SGH}}$ を測定します。
- 次に、SGHをAUTに置き換え、同じ送信条件で受信電力 $P_{r,\text{AUT}}$ を測定します。
- AUTの利得は次のように求められます。
$$ G_{\text{AUT}} = G_{\text{SGH}} + 10\log_{10}\left(\frac{P_{r,\text{AUT}}}{P_{r,\text{SGH}}}\right) \quad [\text{dBi}] $$
つまり、標準利得アンテナとの受信電力の差を、SGHの既知の利得に加えるだけです。
利点: 伝搬損失やケーブル損失が両方の測定で共通のため、キャンセルされます。シンプルで精度が高い方法です。
注意点: SGHの利得の校正精度が測定全体の精度を決定します。一般的なSGHの利得不確定性は $\pm 0.3$ dB 程度です。
3アンテナ法
標準利得アンテナが入手できない場合、3つのアンテナの組み合わせから絶対利得を求める方法が3アンテナ法です。
3つのアンテナをA, B, Cとします。すべてのペア(A-B, A-C, B-C)について、フリスの伝達公式に基づく測定を行います。
フリスの伝達公式より、各ペアについて
$$ \frac{P_r}{P_t} = G_i \cdot G_j \cdot \left(\frac{\lambda}{4\pi R}\right)^2 $$
dBで表すと
$$ G_i + G_j = 10\log_{10}\left(\frac{P_r}{P_t}\right) + 20\log_{10}\left(\frac{4\pi R}{\lambda}\right) \quad [\text{dBi}] $$
3つのペアに対して
ペアA-B: $G_A + G_B = M_{AB}$
ペアA-C: $G_A + G_C = M_{AC}$
ペアB-C: $G_B + G_C = M_{BC}$
ここで $M_{AB}$, $M_{AC}$, $M_{BC}$ は測定値です。3つの未知数($G_A, G_B, G_C$)に対して3つの方程式があるので、連立方程式を解けます。
第1式と第2式から第3式を引くと
$$ 2G_A = M_{AB} + M_{AC} – M_{BC} $$
$$ G_A = \frac{M_{AB} + M_{AC} – M_{BC}}{2} $$
同様に $G_B$ と $G_C$ も求まります。
$$ G_B = \frac{M_{AB} + M_{BC} – M_{AC}}{2} $$
$$ G_C = \frac{M_{AC} + M_{BC} – M_{AB}}{2} $$
この方法は標準利得アンテナを必要としませんが、3回の測定が必要であり、各測定の不確定性が積み重なるため、比較法に比べて全体の精度はやや低下します。
利得測定の手法を理解したところで、アンテナのもう一つの重要なパラメータであるインピーダンスの測定法を見ていきましょう。
インピーダンスの測定 — VNAとSパラメータ
ベクトルネットワークアナライザ(VNA)
アンテナの入力インピーダンスはベクトルネットワークアナライザ(VNA: Vector Network Analyzer)で測定します。VNAは、被測定デバイスに既知の信号を入力し、反射波と透過波の振幅と位相を同時に測定する計測器です。
VNAが直接測定するのはSパラメータ(散乱パラメータ)です。1ポートデバイス(アンテナ)の場合、反射係数 $S_{11}$ が測定されます。
$S_{11}$ と入力インピーダンスの関係
$S_{11}$ は、基準インピーダンス $Z_0$(通常50 $\Omega$)に対する反射係数です。
$$ S_{11} = \Gamma = \frac{Z_{\text{in}} – Z_0}{Z_{\text{in}} + Z_0} $$
逆に、$S_{11}$ から入力インピーダンスを求めると
$$ Z_{\text{in}} = Z_0 \frac{1 + S_{11}}{1 – S_{11}} $$
$S_{11}$ は複素数であり、大きさ $|S_{11}|$ と位相 $\angle S_{11}$ を持ちます。
大きさ $|S_{11}|$ はdBで表すことが一般的で、リターンロス(return loss)と呼ばれます。
$$ \text{RL} = -20\log_{10}|S_{11}| \quad [\text{dB}] $$
リターンロスが大きいほど反射が小さく、整合が良好です。VSWR $< 2$ は $\text{RL} > 9.54$ dB に対応します。
VNAの校正
VNAの測定精度は校正(calibration)に大きく依存します。校正とは、VNA内部の系統誤差(方向性、ソースマッチ、周波数特性など)を除去するプロセスです。
1ポート校正では、3つの標準器(Open, Short, Load)を順番にVNAのポートに接続して測定します。これにより3つの誤差項が決定され、実際の測定から誤差を差し引くことができます。
Open: 開放端($\Gamma = 1$) Short: 短絡端($\Gamma = -1$) Load: 整合終端($\Gamma = 0$、$Z = Z_0$)
高品質な校正キットの校正残差は $\pm 0.02$ dB 程度であり、アンテナの入力インピーダンスを高精度に測定できます。
スミスチャート
VNAの測定結果はしばしばスミスチャート上に表示されます。スミスチャートは複素反射係数平面を正規化インピーダンス平面に写像したもので、周波数を変えたときのインピーダンス変化の軌跡を直感的に把握できます。
スミスチャート上でインピーダンスの軌跡がチャートの中心($\Gamma = 0$, $Z = Z_0$)を通過する周波数が共振周波数であり、中心からの最大距離が帯域外の最悪反射を示します。
VNAによるインピーダンス測定を理解したところで、大型アンテナの測定に不可欠な近傍界測定について見ていきましょう。
近傍界測定 — NF-FF変換
なぜ近傍界測定が必要か
先に述べたように、大型アンテナの遠方界距離は非常に長くなります。3 mのパラボラアンテナを12 GHzで測定する場合、遠方界距離は720 mにもなり、通常の暗室ではとても収まりません。
近傍界測定(near-field measurement)は、この問題を解決する画期的な手法です。アンテナの近傍(遠方界距離よりはるかに近い位置)で電磁界の振幅と位相を精密に測定し、数学的な変換(NF-FF変換)によって遠方界の放射パターンを計算します。
測定のジオメトリ
近傍界測定には3つのジオメトリがあります。
平面走査(planar scanning): AUTの前方の平面上でプローブを $x$-$y$ 方向にスキャンします。高利得アンテナ(パラボラなど)に適しています。前方半球のパターンのみ取得可能です。
円筒走査(cylindrical scanning): AUTの周囲の円筒面上でプローブをスキャンします。$\phi$ 方向の回転と $z$ 方向の直線走査の組み合わせです。オムニ方向アンテナやセクタアンテナに適しています。
球面走査(spherical scanning): AUTの周囲の球面上でプローブをスキャンします。$\theta$-$\phi$ の全方向のデータが取得でき、任意のアンテナに適用可能です。
NF-FF変換の原理
平面走査の場合のNF-FF変換の原理を説明します。
近傍界で測定された電界分布 $\bm{E}(x, y, z_0)$($z_0$ は走査面の $z$ 座標)に対して、2次元フーリエ変換を適用すると、平面波スペクトル $\bm{A}(k_x, k_y)$ が得られます。
$$ \bm{A}(k_x, k_y) = \int_{-\infty}^{\infty}\int_{-\infty}^{\infty} \bm{E}(x, y, z_0) \, e^{j(k_x x + k_y y)} \, dx \, dy $$
平面波スペクトルの各成分 $(k_x, k_y)$ は、方向 $(\theta, \phi)$ への放射に対応します。
$$ k_x = k_0 \sin\theta\cos\phi, \quad k_y = k_0 \sin\theta\sin\phi $$
ここで $k_0 = 2\pi/\lambda$ は自由空間の波数です。
したがって、$\bm{A}(k_x, k_y)$ の各成分の振幅が、対応する方向への放射パターンを直接与えます。これがNF-FF変換の本質です。
$$ \bm{E}_{\text{FF}}(\theta, \phi) \propto \bm{A}(k_0\sin\theta\cos\phi, \; k_0\sin\theta\sin\phi) $$
つまり、近傍界測定のデータをフーリエ変換するだけで、遠方界パターンが得られるのです。フーリエ変換はFFT(高速フーリエ変換)で高速に計算できるため、計算コストも実用的です。
プローブ補正
近傍界測定では、走査プローブ自体の放射パターンが測定結果に影響します。この影響を除去する操作がプローブ補正(probe correction)です。
プローブの受信パターンを $\bm{P}(k_x, k_y)$ とすると、測定される信号はAUTの放射とプローブパターンの畳み込みになります。フーリエ変換領域では畳み込みが積に変わるため、プローブ補正は
$$ \bm{A}_{\text{corrected}}(k_x, k_y) = \frac{\bm{A}_{\text{measured}}(k_x, k_y)}{\bm{P}(k_x, k_y)} $$
と単純な除算で実行できます。
近傍界測定の理論を理解したところで、Pythonを使って測定データの処理と可視化を行いましょう。
Pythonによる放射パターンデータの処理
実際の測定を模擬したデータを生成し、放射パターンの表示と解析を行います。
import numpy as np
import matplotlib.pyplot as plt
# --- 模擬放射パターンデータの生成 ---
np.random.seed(42)
# 角度 (1°ステップ)
theta_deg = np.arange(-180, 180, 1)
theta_rad = np.radians(theta_deg)
# 理論パターン: コサイン累乗パターン (指向性アンテナ)
n = 5 # コサイン乗数
pattern_theory = np.abs(np.cos(theta_rad))**n
pattern_theory = np.where(np.abs(theta_rad) <= np.pi/2, pattern_theory, 0.01)
# 測定データ: 理論パターン + 測定ノイズ + 暗室反射リップル
noise = 10**(np.random.randn(len(theta_deg)) * 0.02) # ±0.2 dBの測定ノイズ
ripple = 1 + 0.05 * np.sin(20 * theta_rad) # 暗室反射によるリップル
pattern_measured = pattern_theory * noise * ripple
# dBに変換
pattern_theory_dB = 10 * np.log10(pattern_theory + 1e-10)
pattern_measured_dB = 10 * np.log10(pattern_measured + 1e-10)
# 正規化(最大値を0 dBに)
pattern_theory_dB -= np.max(pattern_theory_dB)
pattern_measured_dB -= np.max(pattern_measured_dB)
fig, axes = plt.subplots(1, 2, figsize=(14, 6))
# (a) 直交座標表示
ax = axes[0]
ax.plot(theta_deg, pattern_theory_dB, 'c-', linewidth=2, label='Theory', alpha=0.7)
ax.plot(theta_deg, pattern_measured_dB, '#FF6B6B', linewidth=1,
label='Measured', alpha=0.8)
ax.set_xlabel('Angle [degrees]', fontsize=12)
ax.set_ylabel('Normalized Pattern [dB]', fontsize=12)
ax.set_title('Radiation Pattern (Cartesian)', fontsize=14)
ax.set_xlim(-180, 180)
ax.set_ylim(-40, 3)
ax.axhline(y=-3, color='green', linestyle='--', alpha=0.5, label='-3 dB (HPBW)')
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# HPBW の読み取り
hpbw_mask = pattern_measured_dB >= -3
hpbw_angles = theta_deg[hpbw_mask]
if len(hpbw_angles) > 0:
hpbw = hpbw_angles[-1] - hpbw_angles[0]
ax.annotate(f'HPBW ≈ {hpbw}°', xy=(hpbw_angles[-1], -3),
xytext=(hpbw_angles[-1]+30, -8), fontsize=11,
arrowprops=dict(arrowstyle='->', color='green'))
# (b) 極座標表示
ax = plt.subplot(122, projection='polar')
# 線形スケールで極座標表示
pattern_linear = 10**(pattern_measured_dB / 10)
pattern_linear = np.clip(pattern_linear, 1e-4, 1)
ax.plot(theta_rad, pattern_linear, '#FF6B6B', linewidth=1.5, label='Measured')
pattern_theory_linear = 10**(pattern_theory_dB / 10)
pattern_theory_linear = np.clip(pattern_theory_linear, 1e-4, 1)
ax.plot(theta_rad, pattern_theory_linear, 'c-', linewidth=2,
alpha=0.7, label='Theory')
ax.set_title('Radiation Pattern (Polar)', fontsize=14, pad=20)
ax.legend(loc='lower right', fontsize=9)
plt.tight_layout()
plt.show()
放射パターンのグラフから、測定データの特徴が明確に読み取れます。
- 測定データと理論パターンの一致: メインビームの方向と半値幅(HPBW)はよく一致しています。これは測定系が正しく機能していることを示しています。
- 測定ノイズ: 測定データには $\pm 0.2$ dB 程度のランダムなノイズが重畳しています。これは受信器の熱雑音やケーブルの揺れなどに起因する典型的な測定不確定性です。
- リップル: 測定データに周期的な細かい振動(リップル)が見られます。これは電波暗室内の残留反射によるもので、暗室の品質指標として重要です。
Pythonによる利得測定(3アンテナ法)のシミュレーション
3アンテナ法による利得測定をシミュレーションします。
import numpy as np
import matplotlib.pyplot as plt
# --- 3アンテナ法のシミュレーション ---
c = 3e8 # 光速 [m/s]
freq = np.linspace(1e9, 10e9, 200) # 1〜10 GHz
wavelength = c / freq
R = 5.0 # 測定距離 [m]
# 3つのアンテナの真の利得(周波数依存)
# アンテナA: ホーンアンテナ(利得が周波数とともに増加)
G_A_true = 10 + 5 * np.log10(freq / 1e9) # dBi
# アンテナB: ダイポール(ほぼ一定の利得)
G_B_true = 2.15 * np.ones_like(freq) # dBi
# アンテナC: パッチアンテナ(共振付近で最大)
f0_patch = 5e9
BW_patch = 0.1 * f0_patch
G_C_true = 7.0 - 5 * ((freq - f0_patch) / BW_patch)**2 # dBi
G_C_true = np.maximum(G_C_true, 0)
# フリスの伝達公式で受信電力比を計算
FSPL = 20 * np.log10(4 * np.pi * R / wavelength) # 自由空間損失 [dB]
# 各ペアの測定値 M = Gi + Gj - FSPL + noise
np.random.seed(123)
noise_std = 0.3 # 測定ノイズ [dB]
M_AB = G_A_true + G_B_true - FSPL + np.random.randn(len(freq)) * noise_std
M_AC = G_A_true + G_C_true - FSPL + np.random.randn(len(freq)) * noise_std
M_BC = G_B_true + G_C_true - FSPL + np.random.randn(len(freq)) * noise_std
# 3アンテナ法で利得を算出
# M_ij = Gi + Gj - FSPL => Gi + Gj = M_ij + FSPL
S_AB = M_AB + FSPL
S_AC = M_AC + FSPL
S_BC = M_BC + FSPL
G_A_meas = (S_AB + S_AC - S_BC) / 2
G_B_meas = (S_AB + S_BC - S_AC) / 2
G_C_meas = (S_AC + S_BC - S_AB) / 2
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
antenna_data = [
('Antenna A (Horn)', G_A_true, G_A_meas, '#4ECDC4'),
('Antenna B (Dipole)', G_B_true, G_B_meas, '#FF6B6B'),
('Antenna C (Patch)', G_C_true, G_C_meas, '#45B7D1'),
]
for ax, (name, G_true, G_meas, color) in zip(axes, antenna_data):
ax.plot(freq/1e9, G_true, 'k-', linewidth=2, label='True gain')
ax.plot(freq/1e9, G_meas, color=color, linewidth=1, alpha=0.8,
label='3-antenna method')
ax.set_xlabel('Frequency [GHz]', fontsize=12)
ax.set_ylabel('Gain [dBi]', fontsize=12)
ax.set_title(name, fontsize=13)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# 誤差の統計
error = G_meas - G_true
ax.text(0.05, 0.05, f'Mean error: {np.mean(error):.2f} dB\n'
f'Std error: {np.std(error):.2f} dB',
transform=ax.transAxes, fontsize=9,
verticalalignment='bottom',
bbox=dict(boxstyle='round', facecolor='white', alpha=0.8))
plt.suptitle('Three-Antenna Method: Gain Measurement', fontsize=15, y=1.02)
plt.tight_layout()
plt.show()
3アンテナ法のシミュレーション結果から、以下の点が読み取れます。
- 3つの全く異なるアンテナの利得が同時に求まることが確認できます。ホーン(利得が周波数とともに増加)、ダイポール(ほぼ一定)、パッチ(共振付近で最大)という異なる特性を持つ3つのアンテナの利得がすべて正確に復元されています。
- 測定ノイズの影響: 各周波数で $\pm 0.3$ dB の測定ノイズを加えていますが、3アンテナ法ではノイズが加減算されるため、最終的な利得の不確定性は $\pm 0.4$ dB 程度になっています。これは比較法($\pm 0.3$ dB)よりやや劣りますが、標準利得アンテナが不要という利点があります。
- パッチアンテナの帯域特性: パッチアンテナ(右)の利得が5 GHz付近でピークを持ち、帯域外で急激に低下する様子が測定でも正しく捉えられています。
Pythonによるインピーダンス測定データの可視化
VNA測定データを模擬し、スミスチャートと $|S_{11}|$ の周波数特性を可視化します。
import numpy as np
import matplotlib.pyplot as plt
# --- VNA測定データの模擬(パッチアンテナ) ---
freq = np.linspace(4e9, 6e9, 500) # 4〜6 GHz
f0 = 5e9 # 共振周波数
Z0 = 50 # 基準インピーダンス
# パッチアンテナのインピーダンスモデル
# 共振回路: R + jX, X = 0 at f0
R_rad = 200 # 放射抵抗(整合なし)
Q = 20 # Q値
delta_f = (freq - f0) / f0
X = R_rad * Q * delta_f # リアクタンス
Z_in = R_rad + 1j * X * R_rad
# 整合回路による補正(簡略化: 共振時に50 Ohmに変換)
# プローブ給電のパッチアンテナを想定
Z_in_matched = 50 * (1 + 1j * Q * delta_f * 2) / (1 + (Q * delta_f * 2)**2 * 0.3)
Z_in_matched = 50 + 1j * 50 * Q * delta_f * 0.5 + 20 * (Q * delta_f)**2
# 反射係数
S11 = (Z_in_matched - Z0) / (Z_in_matched + Z0)
S11_dB = 20 * np.log10(np.abs(S11) + 1e-10)
# VSWR
VSWR = (1 + np.abs(S11)) / (1 - np.abs(S11))
VSWR = np.clip(VSWR, 1, 20)
fig, axes = plt.subplots(1, 3, figsize=(18, 5))
# (a) |S11| vs 周波数
ax = axes[0]
ax.plot(freq/1e9, S11_dB, 'c-', linewidth=2)
ax.axhline(y=-10, color='red', linestyle='--', alpha=0.7, label='$|S_{11}|$ = -10 dB (VSWR ≈ 2)')
ax.axhline(y=-15, color='orange', linestyle='--', alpha=0.5, label='$|S_{11}|$ = -15 dB')
ax.set_xlabel('Frequency [GHz]', fontsize=12)
ax.set_ylabel('$|S_{11}|$ [dB]', fontsize=12)
ax.set_title('Return Loss', fontsize=14)
ax.set_xlim(4, 6)
ax.set_ylim(-30, 0)
ax.legend(fontsize=9)
ax.grid(True, alpha=0.3)
# 帯域幅の表示
bw_mask = S11_dB <= -10
if np.any(bw_mask):
bw_freqs = freq[bw_mask]
bw = (bw_freqs[-1] - bw_freqs[0]) / 1e9
ax.annotate(f'BW = {bw*1e3:.0f} MHz\n({bw/5*100:.1f}%)',
xy=(np.mean(bw_freqs)/1e9, -10),
xytext=(5.3, -5), fontsize=10,
arrowprops=dict(arrowstyle='->', color='red'))
# (b) VSWR vs 周波数
ax = axes[1]
ax.plot(freq/1e9, VSWR, 'm-', linewidth=2)
ax.axhline(y=2, color='red', linestyle='--', alpha=0.7, label='VSWR = 2')
ax.axhline(y=1.5, color='orange', linestyle='--', alpha=0.5, label='VSWR = 1.5')
ax.set_xlabel('Frequency [GHz]', fontsize=12)
ax.set_ylabel('VSWR', fontsize=12)
ax.set_title('Voltage Standing Wave Ratio', fontsize=14)
ax.set_xlim(4, 6)
ax.set_ylim(1, 8)
ax.legend(fontsize=10)
ax.grid(True, alpha=0.3)
# (c) スミスチャート
ax = axes[2]
# スミスチャートの描画
# 等抵抗円
for r in [0, 0.2, 0.5, 1, 2, 5]:
phi = np.linspace(0, 2*np.pi, 200)
center_x = r / (1 + r)
radius = 1 / (1 + r)
x_circle = center_x + radius * np.cos(phi)
y_circle = radius * np.sin(phi)
# 単位円内のみ表示
mask = x_circle**2 + y_circle**2 <= 1.01
ax.plot(x_circle[mask], y_circle[mask], 'gray', linewidth=0.3, alpha=0.5)
# 等リアクタンス円
for x_val in [0.2, 0.5, 1, 2, 5]:
phi = np.linspace(0, np.pi, 200)
center_y = 1 / x_val
radius = 1 / x_val
x_circle = 1 + radius * np.cos(phi)
y_circle = center_y + radius * np.sin(phi)
mask = x_circle**2 + y_circle**2 <= 1.01
ax.plot(x_circle[mask], y_circle[mask], 'gray', linewidth=0.3, alpha=0.3)
# 下半分
y_circle_neg = -center_y + radius * np.sin(phi)
mask = x_circle**2 + y_circle_neg**2 <= 1.01
ax.plot(x_circle[mask], y_circle_neg[mask], 'gray', linewidth=0.3, alpha=0.3)
# 単位円
circle_phi = np.linspace(0, 2*np.pi, 200)
ax.plot(np.cos(circle_phi), np.sin(circle_phi), 'k-', linewidth=1)
# S11の軌跡
ax.plot(np.real(S11), np.imag(S11), 'c-', linewidth=2)
# 共振点をマーク
idx_res = np.argmin(np.abs(S11))
ax.plot(np.real(S11[idx_res]), np.imag(S11[idx_res]), 'ro', markersize=10,
label=f'$f_0$ = {freq[idx_res]/1e9:.2f} GHz')
# 開始点と終了点
ax.plot(np.real(S11[0]), np.imag(S11[0]), 'gs', markersize=8, label='4 GHz')
ax.plot(np.real(S11[-1]), np.imag(S11[-1]), 'bs', markersize=8, label='6 GHz')
ax.set_xlabel('Re($S_{11}$)', fontsize=12)
ax.set_ylabel('Im($S_{11}$)', fontsize=12)
ax.set_title('Smith Chart', fontsize=14)
ax.set_aspect('equal')
ax.set_xlim(-1.2, 1.2)
ax.set_ylim(-1.2, 1.2)
ax.legend(fontsize=9, loc='lower left')
ax.grid(True, alpha=0.2)
plt.tight_layout()
plt.show()
VNA測定データの可視化から、アンテナの整合特性が直感的に把握できます。
- リターンロス(左図): $|S_{11}| < -10$ dB の帯域幅が約250 MHz(5%帯域幅)であることが読み取れます。Q = 20 のアンテナの理論的帯域幅 $0.707/Q \approx 3.5\%$ よりやや広いのは、整合回路の効果です。
- VSWR(中央図): 共振周波数(5 GHz)でVSWRが最小値(ほぼ1)に達し、帯域外では急激に増大しています。VSWR $< 2$ の帯域がインピーダンス帯域幅です。
- スミスチャート(右図): インピーダンスの軌跡がチャートの中心(50 $\Omega$)を通過する点が共振周波数です。帯域外では軌跡がチャートの外周に向かって急速に移動し、反射が増大する様子が視覚的に把握できます。スミスチャートは整合回路の設計にも不可欠なツールです。
まとめ
本記事では、アンテナ測定の基礎について解説しました。
- 遠方界条件: 測定距離は $R \geq 2D^2/\lambda$ を満たす必要があります。位相誤差 $\pi/8$ 以下の条件から導出されます
- 電波暗室: 壁面の電波吸収体で反射を抑制し、自由空間に近い環境を作ります。クワイエットゾーンの品質がパターン測定精度を左右します
- 放射パターン測定: 回転台でAUTを回転させ、各角度の受信レベルを記録します。HPBWやサイドローブレベルなどのパラメータが得られます
- 利得測定: 比較法は標準利得アンテナとの比較で簡便かつ高精度。3アンテナ法は標準アンテナ不要で絶対利得が得られます
- インピーダンス測定: VNAで $S_{11}$ を測定し、入力インピーダンス、リターンロス、VSWRを求めます。OSL校正が精度の鍵です
- 近傍界測定: 大型アンテナの遠方界パターンを近傍界データのフーリエ変換(NF-FF変換)で求めます
アンテナ測定は理論と実践の架け橋であり、設計の妥当性検証に不可欠なプロセスです。測定原理を深く理解することで、測定結果の信頼性を正しく評価し、設計にフィードバックする能力が身につきます。
次のステップとして、以下の記事も参考にしてください。