アレイファクタの理論 — アレイアンテナの指向性パターンを数式から導出する

5G基地局のアンテナはなぜ「板状」の形をしているのでしょうか。レーダーはなぜ機械的に回転しなくてもビームの向きを変えられるのでしょうか。これらの答えはすべて、アレイファクタ(Array Factor) という概念に行き着きます。

アレイファクタは、複数のアンテナ素子を並べたアレイアンテナの指向性パターンを決める関数です。個々の素子がどんな形状であろうと、素子の配置と給電条件さえ決まれば、アレイとしての指向性はアレイファクタで記述できます。つまり、アレイファクタを理解すれば、ビームの鋭さ、ビームの向き、不要なローブの発生条件、そしてサイドローブの抑圧方法まで、すべてを統一的に設計できるのです。

アレイファクタの概念は以下のような応用分野で活躍します。

  • フェーズドアレイレーダー: 航空管制やミサイル防衛で使われるレーダーは、アレイファクタの位相制御により電子的にビームを走査します
  • 5G/Beyond 5G 基地局: Massive MIMO基地局では、数十〜数百素子のアレイファクタを最適化して多数のユーザーに同時にビームを向けます
  • 電波天文学: VLA(Very Large Array)のような電波望遠鏡は、巨大なアレイファクタにより天体からの微弱な電波を高分解能で観測します
  • 衛星通信: 衛星搭載フェーズドアレイは、アレイファクタの制御によって地上の特定エリアにスポットビームを形成します

本記事の内容

  • アレイファクタの定義とパターン乗算定理
  • 等間隔直線アレイ(ULA)のアレイファクタの導出
  • 等比級数の和による閉じた形(closed form)の導出
  • メインビーム方向の位相制御(ビームステアリング)
  • ビーム幅(HPBW)の解析的な計算
  • サイドローブレベル(SLL)の評価
  • グレーティングローブの発生条件と $d \geq \lambda$ の問題
  • 振幅テーパリング(チェビシェフ分布・テイラー分布)によるサイドローブ低減
  • 2次元平面アレイ(URA)への拡張
  • Pythonによる各種条件のアレイパターン描画と振幅テーパリング比較

前提知識

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

アレイファクタとは — パターン乗算定理から始める

なぜ「素子パターン」と「配置パターン」を分離できるのか

アレイアンテナを設計するとき、まず気になるのは「最終的な放射パターンをどうやって計算するのか」という問題です。素子の数が増えると、すべての素子からの電磁界を足し合わせる計算は一見複雑に思えます。

しかし、すべての素子が同一の放射特性を持つ(同種素子アレイ)場合には、全体の放射パターンが驚くほどシンプルに分解できます。これをパターン乗算定理(Pattern Multiplication Theorem) と呼びます。

$$ E_{\text{total}}(\theta, \phi) = E_{\text{element}}(\theta, \phi) \times \text{AF}(\theta, \phi) $$

ここで、$E_{\text{element}}(\theta, \phi)$ は単一素子の放射パターン(素子パターン)、$\text{AF}(\theta, \phi)$ がアレイファクタです。

この定理の意味を直感的に捉えましょう。素子パターンは「各素子がどの方向にどれだけ電磁波を出すか」を表し、アレイファクタは「素子を特定の配置に並べたとき、各方向で電波がどのように強め合い・打ち消し合うか」を表します。全体パターンは、この2つの効果の掛け算で決まります。

アレイファクタが担う役割

パターン乗算定理のおかげで、アレイアンテナの設計は2つの独立な問題に分かれます。

  1. 素子の設計: 1つの素子の放射パターンを最適化する(例えば、パッチアンテナの形状設計)
  2. アレイの設計: 素子の配置と給電条件を最適化してアレイファクタを制御する

本記事ではこの2番目、すなわちアレイファクタの理論に集中します。素子を等方性点源(isotropic radiator、全方向に均等に放射する仮想的な素子)と仮定すれば、$E_{\text{element}}$ は定数となり、全体パターンがアレイファクタそのものになります。こうすることで、アレイの配置と給電が指向性に与える影響を純粋に分析できます。

アレイファクタの数学的な形が分かれば、次はそれを具体的に導出しましょう。最も基本的で応用が広い、等間隔直線アレイ(ULA)から始めます。

等間隔直線アレイ(ULA)のアレイファクタの導出

モデルの設定

$z$ 軸上に $N$ 個の等方性点源を等間隔 $d$ で配置した等間隔直線アレイ(Uniform Linear Array: ULA)を考えます。各素子の位置は次のとおりです。

$$ z_n = n d, \quad n = 0, 1, 2, \ldots, N-1 $$

$n = 0$ の素子(原点に置く)を基準とします。$n$ 番目の素子には、振幅 $a_n$ および位相 $\alpha_n$ の励振を与えます。

遠方界において、$z$ 軸からの角度 $\theta$ の方向を観測する場合、$n$ 番目の素子から放射される電波は、基準素子に比べて経路差 $n d \cos\theta$ を持ちます。この経路差は位相差 $k \cdot n d \cos\theta$ に対応します($k = 2\pi / \lambda$ は波数)。

一般的なアレイファクタの式

遠方界において、全素子からの寄与を重ね合わせると、アレイファクタは次の形で書けます。

$$ \text{AF}(\theta) = \sum_{n=0}^{N-1} a_n \, e^{j(n k d \cos\theta + \alpha_n)} $$

この式は、各素子の複素励振(振幅 $a_n$ と位相 $\alpha_n$)と、空間的な経路差による位相 $n k d \cos\theta$ を足し合わせたものです。

等振幅・等位相差の場合

ここで、もっとも基本的な場合として、等振幅($a_n = 1$)かつ隣接素子間の位相差が一定($\alpha_n = n \alpha_0$、$\alpha_0$ は定数)の場合を考えます。この条件は「等間隔等振幅アレイ(Uniform Array)」と呼ばれ、アレイファクタの理論で最も重要な出発点です。

このとき、アレイファクタは次のように簡潔になります。

$$ \text{AF}(\theta) = \sum_{n=0}^{N-1} e^{jn(kd\cos\theta + \alpha_0)} $$

新しい変数 $\psi$ を導入して、式をさらに整理しましょう。

$$ \psi = kd\cos\theta + \alpha_0 $$

この $\psi$ は「方向 $\theta$ における隣接素子間の全位相差」を表します。経路差に起因する位相差 $kd\cos\theta$ と、意図的に与えた位相差 $\alpha_0$ の合計です。$\psi$ を用いると、アレイファクタは非常にコンパクトな形になります。

$$ \text{AF} = \sum_{n=0}^{N-1} e^{jn\psi} $$

この和は等比級数(初項1、公比 $e^{j\psi}$)の形をしています。次のセクションでは、等比級数の公式を用いてこの和を閉じた形で求めます。

等比級数の和による閉形式の導出

等比級数の公式の適用

等比級数の和の公式は次のとおりです。

$$ \sum_{n=0}^{N-1} r^n = \frac{1 – r^N}{1 – r}, \quad r \neq 1 $$

アレイファクタの和では $r = e^{j\psi}$ なので、これを代入すると次の式を得ます。

$$ \text{AF} = \frac{1 – e^{jN\psi}}{1 – e^{j\psi}} $$

sinc 型の閉形式への変換

上の式をそのまま使ってもよいのですが、振幅パターンの議論をしやすくするため、sin 関数を使った形に変換します。コツは、分子と分母それぞれから「半分の位相」を括り出すことです。

まず分子を変換します。$e^{jN\psi}$ を $e^{jN\psi/2}$ で括り出すと、

$$ 1 – e^{jN\psi} = e^{jN\psi/2}\left(e^{-jN\psi/2} – e^{jN\psi/2}\right) $$

オイラーの公式 $e^{jx} – e^{-jx} = 2j\sin x$ を使うと、括弧の中は $-2j\sin(N\psi/2)$ となるため、

$$ 1 – e^{jN\psi} = -2j \, e^{jN\psi/2} \sin\!\left(\frac{N\psi}{2}\right) $$

同様に分母も変換します。

$$ 1 – e^{j\psi} = e^{j\psi/2}\left(e^{-j\psi/2} – e^{j\psi/2}\right) = -2j \, e^{j\psi/2} \sin\!\left(\frac{\psi}{2}\right) $$

分子を分母で割ると、$-2j$ 同士が約分され、次の結果を得ます。

$$ \text{AF} = \frac{e^{jN\psi/2}}{e^{j\psi/2}} \cdot \frac{\sin(N\psi/2)}{\sin(\psi/2)} = e^{j(N-1)\psi/2} \cdot \frac{\sin(N\psi/2)}{\sin(\psi/2)} $$

位相項の解釈と正規化

先頭の $e^{j(N-1)\psi/2}$ は位相項です。アレイの座標原点を端の素子ではなくアレイの中心に取ると、この位相項は消えます。パターンの「形状」(振幅分布)を議論する際には位相項は無視してよいため、正規化アレイファクタを次のように定義します。

$$ \boxed{ \text{AF}_N(\psi) = \frac{1}{N}\frac{\sin(N\psi/2)}{\sin(\psi/2)}, \quad \psi = kd\cos\theta + \alpha_0 } $$

$1/N$ は正規化係数で、最大値が1になるようにしています。$\psi = 0$ のとき、分子分母がともに0になりますが、ロピタルの定理(あるいは $\lim_{x \to 0} \sin(Nx)/(N\sin x) = 1$ の極限)により $\text{AF}_N(0) = 1$ が確認できます。

この式は $\psi$ の関数としてはsinc型($\sin(Nx)/\sin(x)$ 型)の周期関数であり、そのピーク・零点・サイドローブの位置はすべて $\psi$ で決まります。$\psi$ を $\theta$ に変換することで、実空間の指向性パターンが得られるわけです。

閉形式が得られたところで、この式が教えてくれる最も重要な性質 — ビームの方向制御 — について見ていきましょう。

メインビームの方向制御 — 位相差によるビームステアリング

メインビームの条件

アレイファクタ $|\text{AF}_N|$ が最大になるのは $\psi = 0$ のときです。$\psi = kd\cos\theta + \alpha_0 = 0$ を $\theta$ について解くと、メインビーム(主ローブ)の方向 $\theta_0$ が求まります。

$$ kd\cos\theta_0 + \alpha_0 = 0 $$

$$ \cos\theta_0 = -\frac{\alpha_0}{kd} $$

$kd\cos\theta_0 + \alpha_0 = 0$ を $\cos\theta_0$ について解き、さらに $k = 2\pi/\lambda$ を代入して整理すると、メインビーム方向の閉じた表現が得られます。

$$ \boxed{ \theta_0 = \arccos\!\left(-\frac{\alpha_0}{kd}\right) = \arccos\!\left(-\frac{\alpha_0 \lambda}{2\pi d}\right) } $$

この式が意味するのは、隣接素子間の位相差 $\alpha_0$ を変えるだけで、メインビームの方向 $\theta_0$ を自由に制御できる ということです。機械的にアンテナを回転させる必要はありません。これがフェーズドアレイの基本原理であるビームステアリング(beam steering) です。

代表的な走査方向

いくつかの代表的な $\alpha_0$ の値と、対応するビーム方向を整理します。

ブロードサイド(broadside): $\alpha_0 = 0$

$\alpha_0 = 0$ のとき、$\cos\theta_0 = 0$ より $\theta_0 = 90°$ です。これはアレイに対して垂直方向にビームが向く最も基本的な配置です。すべての素子が同位相で励振されるため、垂直方向では全素子の電波が同相で重なり、最大の利得が得られます。

エンドファイア(endfire): $\alpha_0 = -kd$

$\alpha_0 = -kd$ のとき、$\cos\theta_0 = 1$ より $\theta_0 = 0°$ です。ビームがアレイの軸方向(端の方向)を向きます。各素子間の位相差をちょうど波の伝搬にかかる位相差と同じにすることで、軸方向に進む波として全素子が建設的に干渉します。

任意の方向 $\theta_s$ への走査

ビームを方向 $\theta_s$ に向けたい場合は、次のように位相差を設定します。

$$ \alpha_0 = -kd\cos\theta_s $$

$n$ 番目の素子に与える位相は $\alpha_n = n\alpha_0 = -nkd\cos\theta_s$ となります。物理的には、$\theta_s$ 方向に向かう平面波の等位相面がすべての素子を同時に通過するような位相補償を施していることに相当します。

ビームステアリングの物理的意味

ビームステアリングの物理的意味を、もう少し深く理解しましょう。

$n$ 番目の素子から方向 $\theta$ に放射される電波は、基準素子に対して位相が $nkd\cos\theta$ だけ進みます(経路差に起因)。さらに、意図的に位相 $n\alpha_0$ を与えています。したがって、$n$ 番目の素子の電波は基準素子に対して合計 $n(kd\cos\theta + \alpha_0)$ の位相差を持ちます。

方向 $\theta = \theta_s$ でこの位相差が全素子でゼロになるように $\alpha_0$ を設定すれば、その方向にすべての素子の電波が同相で到達し、建設的干渉により強い放射が得られます。他の方向では位相がバラバラになるため、放射が弱くなります。

ビームの方向が制御できるようになったところで、次に気になるのは「ビームがどれだけ鋭いか」です。ビーム幅の計算に進みましょう。

ビーム幅の計算

半値ビーム幅(HPBW)の定義

ビームの鋭さを定量化する最も一般的な指標は、半値ビーム幅(Half Power Beam Width: HPBW) です。主ローブの電力パターン $|\text{AF}|^2$ が最大値の半分($-3$ dB)になる2つの角度の差として定義されます。

ビーム幅が狭いほど角度分解能が高く、特定の方向に電力を集中できます。

ブロードサイドアレイのHPBW導出

ブロードサイドアレイ($\alpha_0 = 0$, $\theta_0 = 90°$)の場合に、HPBWの近似式を導出します。

主ローブの中心 $\theta_0 = \pi/2$ からの微小なずれ $\Delta\theta$ を考えます。$\theta = \pi/2 + \Delta\theta$ とおくと、

$$ \cos\theta = \cos\!\left(\frac{\pi}{2} + \Delta\theta\right) = -\sin(\Delta\theta) \approx -\Delta\theta $$

ここで $|\Delta\theta| \ll 1$ の微小角近似を用いました。$\alpha_0 = 0$ なので、

$$ \psi = kd\cos\theta \approx -kd \, \Delta\theta $$

$|\psi|$ が十分小さい範囲では、$\sin(x) \approx x$ と近似できるため、正規化アレイファクタは次のようになります。

$$ |\text{AF}_N| \approx \left|\frac{\sin(Nkd\Delta\theta/2)}{N \cdot kd\Delta\theta/2}\right| = \left|\operatorname{sinc}\!\left(\frac{Nkd\Delta\theta}{2\pi}\right)\right| $$

ここで $\operatorname{sinc}(x) = \sin(\pi x)/(\pi x)$ です。

半値点の条件は $|\text{AF}_N|^2 = 1/2$、すなわち $|\text{AF}_N| = 1/\sqrt{2}$ です。$\operatorname{sinc}(x) = 1/\sqrt{2}$ を数値的に解くと $x \approx 0.4429$ が得られます。したがって、

$$ \frac{Nkd \, \Delta\theta_{3\text{dB}}}{2\pi} = 0.4429 $$

$k = 2\pi/\lambda$ を代入して $\Delta\theta_{3\text{dB}}$ を求めると、

$$ \Delta\theta_{3\text{dB}} = \frac{0.4429 \times 2\pi}{N \times (2\pi/\lambda) \times d} = \frac{0.4429\lambda}{Nd} $$

HPBWは主ローブの両側にこの幅があるため、

$$ \boxed{ \text{HPBW} = 2\Delta\theta_{3\text{dB}} \approx \frac{0.886\lambda}{Nd} = \frac{0.886\lambda}{L} } $$

ここで $L = Nd$ はアレイの全長です。

ビーム幅が教えてくれること

この結果から重要な設計指針が読み取れます。

  1. アレイが長いほどビームが鋭くなる: $L$ に反比例するため、素子数を増やすかアレイ間隔を広げるとビームが細くなります
  2. 波長が短いほどビームが鋭くなる: 同じ物理サイズのアレイでも、高い周波数(短い波長)を使えばビームが細くなります。5Gがミリ波帯を使う理由の一つがここにあります
  3. ビーム幅はアレイの全長 $L$ で決まる: 素子数 $N$ と素子間隔 $d$ は、全長 $L = Nd$ を通じてのみビーム幅に影響します

ビームステアリング時のビーム幅

ビームが $\theta_s$ 方向に走査されている場合、ビーム幅は次のように変化します。

$$ \text{HPBW}(\theta_s) \approx \frac{0.886\lambda}{Nd\sin\theta_s} $$

$\sin\theta_s$ が分母に入るため、ビームがブロードサイド($\theta_s = 90°$)から離れるほど、ビーム幅が広がります。$\theta_s = 0°$(エンドファイア方向)に近づくと $\sin\theta_s \to 0$ でビーム幅が発散する — つまり、エンドファイア方向では ULA のビーム走査能力に限界があることを意味しています。

ビーム幅はメインビームの鋭さを表す指標でしたが、メインビーム以外にもパターンには構造があります。次に、サイドローブの性質を詳しく見ていきましょう。

サイドローブレベル(SLL)

等振幅アレイのサイドローブ

等振幅等位相差アレイの正規化アレイファクタは $\sin(N\psi/2) / (N\sin(\psi/2))$ の形をしています。この関数のサイドローブの位置は、分子 $\sin(N\psi/2)$ の極大点(ただし分母のゼロ点を除く)で近似的に決まります。

最初のサイドローブ($\psi = 0$ に最も近いサイドローブ)は $N\psi/2 \approx 3\pi/2$ の近傍にあります。この位置での振幅を評価します。

$N\psi/2 = 3\pi/2$ のとき $|\sin(N\psi/2)| = 1$ です。一方、$\psi = 3\pi/N$ なので、$N$ が十分大きければ $\psi$ は小さく、$\sin(\psi/2) \approx \psi/2 = 3\pi/(2N)$ と近似できます。したがって、

$$ |\text{AF}_N|_{\text{1st SL}} \approx \frac{1}{N \cdot 3\pi/(2N)} = \frac{2}{3\pi} \approx 0.2122 $$

dBに変換すると、

$$ \text{SLL}_1 = 20\log_{10}(0.2122) \approx -13.46 \; \text{dB} $$

素子数に依存しないSLL

注目すべきは、この最大サイドローブレベル約 $-13.3$ dB は 素子数 $N$ に依存しない ということです。$N$ を100にしても1000にしても、等振幅アレイである限り、最大サイドローブのレベルは変わりません。

これは $\sin(Nx)/\sin(x)$ 関数の性質から来ています。$N$ を増やすとサイドローブの「数」は増えますが、主ローブに対する相対的な「高さ」は変わらないのです。

$-13.3$ dB のサイドローブは、レーダーや通信で不要な方向からの干渉やクラッタを受ける原因となるため、多くの実用システムでは不十分です。サイドローブをさらに下げる手法(テーパリング)については、後のセクションで詳しく扱います。

しかしその前に、サイドローブよりも深刻な問題 — メインローブと同じ大きさの不要なローブ — について議論する必要があります。

グレーティングローブの発生条件

グレーティングローブとは何か

回折格子(diffraction grating)に光を当てると、特定の角度に強い光が現れます。アレイアンテナでも同様の現象が起こります。素子間隔 $d$ が波長 $\lambda$ に対して大きくなると、メインビームと同等の強度を持つ不要なローブが別の方向に出現します。このローブをグレーティングローブ(grating lobe) と呼びます。

グレーティングローブはサイドローブとは本質的に異なります。サイドローブは主ローブに比べて弱い不要放射ですが、グレーティングローブは主ローブと同じ強度を持ちます。ビームを特定方向に集中させるという目的を根本的に損なうため、アレイ設計において最も避けなければならない現象です。

発生条件の数学的導出

グレーティングローブは、アレイファクタの分母 $\sin(\psi/2)$ がゼロになる点で発生します。$\sin(\psi/2) = 0$ となるのは次の条件のときです。

$$ \frac{\psi}{2} = m\pi, \quad m = 0, \pm 1, \pm 2, \ldots $$

$$ \psi = 2m\pi $$

$m = 0$ が主ローブに対応し、$m \neq 0$ がグレーティングローブに対応します。

$\psi = kd\cos\theta + \alpha_0$ を代入して $\theta$ について解くと、

$$ kd\cos\theta_m + \alpha_0 = 2m\pi $$

$$ \cos\theta_m = \frac{2m\pi – \alpha_0}{kd} = \frac{m\lambda}{d} – \frac{\alpha_0}{kd} $$

ブロードサイドアレイの場合

$\alpha_0 = 0$(ブロードサイドアレイ)のとき、

$$ \cos\theta_m = \frac{m\lambda}{d} $$

グレーティングローブが実空間(可視領域、$|\cos\theta| \leq 1$)に存在するには、$|\cos\theta_m| \leq 1$ が必要です。$|m| = 1$ のグレーティングローブが実空間に現れない条件は、

$$ \left|\frac{\lambda}{d}\right| > 1 \quad \Longrightarrow \quad d < \lambda $$

つまり、ブロードサイドアレイでは素子間隔が波長未満であればグレーティングローブは発生しません。

ビームステアリング時の条件

しかし、ビームを走査する場合にはより厳しい条件が必要です。主ローブを $\theta_s$ 方向に向ける場合、$\alpha_0 = -kd\cos\theta_s$ なので、

$$ \cos\theta_m = \frac{m\lambda}{d} + \cos\theta_s $$

$m = -1$ のグレーティングローブが実空間に現れない条件 $\cos\theta_{-1} < -1$ を整理すると、

$$ -\frac{\lambda}{d} + \cos\theta_s < -1 $$

両辺に $-1$ を掛けて不等号の向きを反転させると、次の条件に書き換わります。

$$ \frac{\lambda}{d} > 1 + \cos\theta_s $$

最も厳しいのは $\theta_s \to 0°$($\cos\theta_s = 1$)のときで、

$$ d < \frac{\lambda}{1 + \cos\theta_s}\bigg|_{\theta_s=0} = \frac{\lambda}{2} $$

全方位にビームを走査したい場合は、$d < \lambda/2$ が必要条件 となります。これは有名な「$\lambda/2$ 間隔」の設計ルールの根拠です。

$\psi$ 空間と可視領域

グレーティングローブの議論をより見通しよくする道具が、$\psi$ 空間($\psi$-space)です。

$\theta$ が $0$ から $\pi$ まで変化すると、$\cos\theta$ は $+1$ から $-1$ まで変化します。したがって、$\psi = kd\cos\theta + \alpha_0$ は次の範囲を動きます。

$$ \psi \in [\alpha_0 – kd, \; \alpha_0 + kd] $$

この区間を可視領域(visible region) と呼びます。可視領域の幅は $2kd = 4\pi d/\lambda$ です。

アレイファクタは $\psi$ について $2\pi$ 周期の関数なので、可視領域の幅が $2\pi$ 以下(すなわち $d \leq \lambda/2$)であれば、$\psi = 0$ のピーク(主ローブ)以外のピークが可視領域に入り込む余地がありません。逆に、$d > \lambda/2$ では可視領域が $2\pi$ を超え、隣の周期のピークが可視領域に入ってきます。これがグレーティングローブです。

$\psi$ 空間の考え方は、グレーティングローブだけでなく、テーパリングの設計やヌルの配置など、アレイファクタのあらゆる性質を統一的に理解するために非常に有用です。

素子間隔に制約があることがわかったところで、次は等振幅アレイの限界であるサイドローブを改善する手法を見ていきましょう。

振幅テーパリングによるサイドローブ低減

なぜテーパリングが必要か

先に述べたとおり、等振幅アレイの最大サイドローブレベルは約 $-13.3$ dB で素子数によらず一定です。レーダーでは $-20$ dB 以下、場合によっては $-40$ dB 以下のサイドローブレベルが要求されることがあります。

サイドローブを低減する最も一般的な手法が振幅テーパリング(amplitude tapering) です。アレイの中央の素子に大きな振幅を与え、端に向かうほど振幅を小さくする — すなわち、アレイの開口分布(aperture distribution)を窓関数で「テーパ」させます。

テーパリングの物理的直感

なぜ端の素子の振幅を下げるとサイドローブが減るのでしょうか。直感的に理解するため、フーリエ変換との対応を考えましょう。

連続開口アンテナでは、開口上の電界分布 $a(z)$ と遠方界パターン $\text{AF}(\psi)$ はフーリエ変換対の関係にあります。離散アレイでも同様に、重み係数列 $\{a_n\}$ とアレイファクタは離散フーリエ変換で結ばれています。

$$ \text{AF}(\psi) = \sum_{n=0}^{N-1} a_n e^{jn\psi} \quad \longleftrightarrow \quad a_n = \frac{1}{2\pi}\int_{-\pi}^{\pi}\text{AF}(\psi)\,e^{-jn\psi}\,d\psi $$

信号処理の世界では、矩形窓(全素子が等振幅)のフーリエ変換は sinc 関数であり、サイドローブが $-13$ dB 程度であることはよく知られています。窓関数を滑らかな形状にすれば、フーリエ変換のサイドローブは小さくなります。この原理がそのままアレイアンテナに適用されるのです。

代表的なテーパリング手法

コサインテーパリング

最もシンプルなテーパリングの一つです。$n$ 番目の素子の重みを次のように設定します。

$$ a_n = \cos\!\left(\frac{\pi(n – (N-1)/2)}{N}\right), \quad n = 0, 1, \ldots, N-1 $$

中央の素子で振幅が最大、端で振幅がゼロに近づく分布です。サイドローブレベルは約 $-23$ dB に改善されますが、主ローブは等振幅アレイに比べて約1.36倍広がります。

チェビシェフテーパリング

ドルフ-チェビシェフ法(Dolph-Chebyshev method)は、指定したサイドローブレベルに対してビーム幅が最小になるという最適性を持つテーパリングです。

チェビシェフ多項式 $T_N(x)$ の等リップル特性を利用して、すべてのサイドローブが同じレベルになるよう重み係数を設計します。チェビシェフ多項式は $|x| \leq 1$ の範囲で $|T_N(x)| \leq 1$ であり、この範囲で $N-1$ 回振動する — この振動がサイドローブに対応し、すべて同レベルになります。

設計手順の概要は次のとおりです。

  1. 所望のサイドローブレベル $R_0$(主ローブとサイドローブの振幅比)を指定する
  2. $T_{N-1}(x_0) = R_0$ を満たす $x_0$ を求める
  3. チェビシェフ多項式を $z$ 変換に対応させ、重み係数 $\{a_n\}$ を逆変換で求める

チェビシェフテーパリングの長所は、指定SLLに対してビーム幅が理論的に最小であること。短所は、遠方のサイドローブまですべて同じレベルで維持されるため、現実のアンテナでは実現が難しくなることがある点です。

テイラー分布

テイラー分布(Taylor distribution)は、チェビシェフテーパリングの実用上の問題を解決した手法です。チェビシェフ分布では主ローブに近い $\bar{n}$ 個のサイドローブを等レベルに保ちつつ、それより遠方のサイドローブは $1/\psi$ 的に自然に減衰させます。

パラメータ $\bar{n}$ は通常3〜10程度に設定され、この値が大きいほどチェビシェフ分布に近づき、小さいほど端の重みが0に近づいて実装が容易になります。テイラー分布は航空・宇宙レーダーを中心に最もよく使われるテーパリング手法の一つです。

テーパリングのトレードオフ

振幅テーパリングには避けられないトレードオフが存在します。

テーパリング 最大SLL (dB) ビーム幅拡大率 開口効率
等振幅(なし) $-13.3$ 1.00 1.00
コサイン $-23.0$ 1.36 0.81
ハニング $-31.5$ 1.63 0.67
チェビシェフ ($-30$ dB) $-30.0$ 1.40 0.72
テイラー ($\bar{n}=5, -30$ dB) $-30.0$ 1.38 0.75

サイドローブを下げると主ローブが広がり、開口効率(アレイ全体の利得効率)が低下します。これは、端の素子の振幅を下げるとアレイの実効的な開口長が短くなるためです。

この表から読み取れるのは、テイラー分布がチェビシェフ分布と同じ SLL を達成しつつ、開口効率がやや高い(ビーム幅がやや狭い)という利点を持つことです。実用上はテイラー分布が好まれる理由がここにあります。

ここまでは1次元(直線アレイ)のアレイファクタを扱ってきました。実際のアンテナシステムでは、2次元平面に素子を並べることが一般的です。次のセクションでは、平面アレイへの拡張を見ていきましょう。

2次元平面アレイ(URA)への拡張

平面アレイの必要性

直線アレイでは、アレイ軸を含む1つの平面内でしかビーム走査ができません。3次元空間の任意の方向にビームを向けるには、2次元平面アレイが必要です。

2次元等間隔矩形アレイ(Uniform Rectangular Array: URA)は、$x$ 軸方向に $M$ 素子を間隔 $d_x$ で、$y$ 軸方向に $N$ 素子を間隔 $d_y$ で配置したものです。

URA のアレイファクタ

URA のアレイファクタは、$x$ 方向のアレイファクタと $y$ 方向のアレイファクタの積として表されます。素子 $(m, n)$ の位置が $(md_x, nd_y, 0)$ であるとき、

$$ \text{AF}(\theta, \phi) = \left[\sum_{m=0}^{M-1} a_m^{(x)}\,e^{jm\psi_x}\right]\left[\sum_{n=0}^{N-1} a_n^{(y)}\,e^{jn\psi_y}\right] $$

ここで、$\psi_x$ と $\psi_y$ はそれぞれ $x$ 方向と $y$ 方向における隣接素子間の全位相差です。経路差に起因する項と意図的な位相シフトの和として定義されます。

$$ \psi_x = kd_x \sin\theta\cos\phi + \alpha_x $$

$$ \psi_y = kd_y \sin\theta\sin\phi + \alpha_y $$

$\theta$ は天頂角($z$ 軸からの角度)、$\phi$ は方位角($x$ 軸からの角度)です。$\alpha_x$ と $\alpha_y$ はそれぞれ $x$ 方向と $y$ 方向の隣接素子間位相差です。

この分離可能性は URA の大きな利点です。2次元のアレイファクタが2つの1次元アレイファクタの積に分解されるため、1次元で培った知識がそのまま活かせます。

ビームステアリングの2次元拡張

メインビームを方向 $(\theta_s, \phi_s)$ に向けるには、

$$ \alpha_x = -kd_x \sin\theta_s \cos\phi_s, \quad \alpha_y = -kd_y \sin\theta_s \sin\phi_s $$

と設定します。ULA の場合と同様に、所望の方向に対して全素子の位相がそろうように補償を行っています。

グレーティングローブの条件(2次元)

URA のグレーティングローブ回避条件は、$x$ 方向と $y$ 方向それぞれに対して独立に成立する必要があります。全方位走査を行う場合、

$$ d_x < \frac{\lambda}{1 + |\sin\theta_{\max}|}, \quad d_y < \frac{\lambda}{1 + |\sin\theta_{\max}|} $$

$\theta_{\max}$ が最大走査角です。全半球走査($\theta_{\max} = 90°$)の場合は $d_x, d_y < \lambda/2$ となり、直線アレイの場合と同じ結論に帰着します。

理論的な準備が整いました。ここからは Python を使って、これまでに導出した理論を実際に可視化し、数値的に確認していきましょう。

Python 実装 — アレイファクタの計算と可視化

素子数によるアレイパターンの変化

まず、等振幅ブロードサイドアレイにおいて、素子数 $N$ を変化させたときのアレイファクタの変化を確認します。理論から予測されるのは、$N$ が大きいほどビームが鋭くなる一方、最大サイドローブレベルは約 $-13.3$ dB で一定であるということです。

import numpy as np
import matplotlib.pyplot as plt

def array_factor(theta, N, d_lambda, alpha0=0.0, weights=None):
    """
    アレイファクターを計算する
    theta: 角度 [rad](z軸からの角度)
    N: 素子数
    d_lambda: 素子間隔(波長で正規化 d/lambda)
    alpha0: 隣接素子間の位相差 [rad]
    weights: 各素子の振幅重み(Noneの場合は等振幅)
    """
    if weights is None:
        weights = np.ones(N)
    k = 2 * np.pi  # k*lambda = 2*pi
    psi = k * d_lambda * np.cos(theta) + alpha0
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += weights[n] * np.exp(1j * n * psi)
    return af

theta = np.linspace(0.001, np.pi - 0.001, 2000)
N_list = [4, 8, 16, 32]
d_lambda = 0.5  # d = lambda/2

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

for N in N_list:
    af = array_factor(theta, N, d_lambda)
    af_norm = np.abs(af) / N
    af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
    axes[0].plot(np.degrees(theta), af_norm, label=f'N={N}')
    axes[1].plot(np.degrees(theta), af_dB, label=f'N={N}')

axes[0].set_xlabel('Angle [deg]')
axes[0].set_ylabel('Normalized |AF|')
axes[0].set_title('Array Factor vs Number of Elements')
axes[0].legend()
axes[0].grid(True)
axes[0].set_xlim(0, 180)

axes[1].set_xlabel('Angle [deg]')
axes[1].set_ylabel('|AF| [dB]')
axes[1].set_title('Array Factor (dB)')
axes[1].legend()
axes[1].grid(True)
axes[1].set_xlim(0, 180)
axes[1].set_ylim(-40, 0)

plt.tight_layout()
plt.show()

このグラフから、次の特徴が読み取れます。

  1. 素子数が増えるほど主ローブが鋭くなる: $N=4$ では主ローブが非常に広いのに対し、$N=32$ ではペンシル状の鋭いビームが形成されています。理論式 $\text{HPBW} \approx 0.886\lambda/(Nd)$ と整合しています
  2. 最大サイドローブレベルは $N$ に依存しない: dBスケールのグラフで確認すると、すべての $N$ で最初のサイドローブが約 $-13$ dB に位置しています
  3. サイドローブの数は $N$ とともに増加する: $N-2$ 個のサイドローブが主ローブの各側に現れます

ビームステアリングの可視化

次に、位相差 $\alpha_0$ を変えてビームの方向を制御するビームステアリングを可視化します。

import numpy as np
import matplotlib.pyplot as plt

def array_factor(theta, N, d_lambda, alpha0=0.0, weights=None):
    """アレイファクターを計算する"""
    if weights is None:
        weights = np.ones(N)
    k = 2 * np.pi
    psi = k * d_lambda * np.cos(theta) + alpha0
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += weights[n] * np.exp(1j * n * psi)
    return af

theta = np.linspace(0.001, np.pi - 0.001, 2000)
N = 16
d_lambda = 0.5
k = 2 * np.pi

steer_angles = [90, 75, 60, 45, 30]
colors = ['#1f77b4', '#ff7f0e', '#2ca02c', '#d62728', '#9467bd']

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

for theta0_deg, color in zip(steer_angles, colors):
    theta0 = np.radians(theta0_deg)
    alpha0 = -k * d_lambda * np.cos(theta0)
    af = array_factor(theta, N, d_lambda, alpha0)
    af_norm = np.abs(af) / N
    af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
    axes[0].plot(np.degrees(theta), af_norm,
                 label=f'θ₀={theta0_deg}°', color=color)
    axes[1].plot(np.degrees(theta), af_dB,
                 label=f'θ₀={theta0_deg}°', color=color)

axes[0].set_xlabel('Angle [deg]')
axes[0].set_ylabel('Normalized |AF|')
axes[0].set_title(f'Beam Steering (N={N}, d=λ/2)')
axes[0].legend()
axes[0].grid(True)
axes[0].set_xlim(0, 180)

axes[1].set_xlabel('Angle [deg]')
axes[1].set_ylabel('|AF| [dB]')
axes[1].set_title('Beam Steering (dB)')
axes[1].legend()
axes[1].grid(True)
axes[1].set_xlim(0, 180)
axes[1].set_ylim(-40, 0)

plt.tight_layout()
plt.show()

グラフから以下のことが確認できます。

  1. 位相差の変更だけでビーム方向が変わる: $\theta_0 = 90°$(ブロードサイド)から $\theta_0 = 30°$ まで、主ローブが指定した方向にきちんと向いています
  2. 走査角が大きいほどビームが広がる: $\theta_0 = 30°$ のパターンは $\theta_0 = 90°$ に比べて明らかに主ローブが太くなっています。これは $\text{HPBW} \propto 1/\sin\theta_s$ の関係によるものです
  3. $d = \lambda/2$ では走査してもグレーティングローブが現れない: 先に導出した $d < \lambda/2$ の条件を満たしているため、全走査範囲でグレーティングローブは発生していません

グレーティングローブの発生

素子間隔 $d$ を波長以上に広げたときに、グレーティングローブがどのように現れるかを確認します。

import numpy as np
import matplotlib.pyplot as plt

def array_factor(theta, N, d_lambda, alpha0=0.0, weights=None):
    """アレイファクターを計算する"""
    if weights is None:
        weights = np.ones(N)
    k = 2 * np.pi
    psi = k * d_lambda * np.cos(theta) + alpha0
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += weights[n] * np.exp(1j * n * psi)
    return af

theta = np.linspace(0.001, np.pi - 0.001, 2000)
N = 10

d_lambda_list = [0.25, 0.5, 0.75, 1.0, 1.5, 2.0]

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

for i, d_lam in enumerate(d_lambda_list):
    af = array_factor(theta, N, d_lam)
    af_norm = np.abs(af) / N
    af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))

    color = 'red' if d_lam >= 1.0 else 'blue'
    axes[i].plot(np.degrees(theta), af_dB, color=color, linewidth=1)
    axes[i].set_xlabel('Angle [deg]')
    axes[i].set_ylabel('|AF| [dB]')
    axes[i].grid(True)
    axes[i].set_xlim(0, 180)
    axes[i].set_ylim(-40, 5)

    if d_lam >= 1.0:
        axes[i].set_title(f'd = {d_lam}λ  [Grating Lobes]',
                          fontweight='bold', color='red')
    else:
        axes[i].set_title(f'd = {d_lam}λ')

plt.suptitle(f'Grating Lobe vs Element Spacing (N={N})', fontsize=14)
plt.tight_layout()
plt.show()

グラフから、グレーティングローブの発生メカニズムが視覚的に理解できます。

  1. $d = 0.25\lambda$ と $d = 0.5\lambda$: 主ローブのみが存在し、グレーティングローブは現れていません。$d < \lambda$ の条件を満たしています
  2. $d = 0.75\lambda$: まだグレーティングローブは出現していませんが、可視領域の端($\theta = 0°$ や $\theta = 180°$ 付近)で振幅が上がり始めており、条件ギリギリであることが見て取れます
  3. $d = 1.0\lambda$: $\theta = 0°$ と $\theta = 180°$ にメインビームと同等の強度のグレーティングローブが出現しています。$d = \lambda$ がちょうど臨界点です
  4. $d = 1.5\lambda$ と $d = 2.0\lambda$: 複数のグレーティングローブが出現し、アレイとしての指向性が完全に損なわれています

振幅テーパリングの比較

等振幅、コサイン、ハニング、チェビシェフ($-30$ dB 設計)のテーパリングを比較します。

import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import chebwin

def array_factor(theta, N, d_lambda, alpha0=0.0, weights=None):
    """アレイファクターを計算する"""
    if weights is None:
        weights = np.ones(N)
    k = 2 * np.pi
    psi = k * d_lambda * np.cos(theta) + alpha0
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += weights[n] * np.exp(1j * n * psi)
    return af

theta = np.linspace(0.001, np.pi - 0.001, 3000)
N = 32
d_lambda = 0.5
n_arr = np.arange(N)

# 各テーパリングの重み係数
w_uniform = np.ones(N)
w_cosine = np.cos(np.pi * (n_arr - (N - 1) / 2) / N)
w_hanning = 0.5 * (1 - np.cos(2 * np.pi * n_arr / (N - 1)))
w_cheb = chebwin(N, at=30)  # チェビシェフ窓(-30 dB)

taperings = {
    'Uniform (SLL≈-13 dB)': w_uniform,
    'Cosine (SLL≈-23 dB)': w_cosine,
    'Hanning (SLL≈-32 dB)': w_hanning,
    'Chebyshev -30 dB': w_cheb,
}

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

# パターン比較
for name, w in taperings.items():
    af = array_factor(theta, N, d_lambda, weights=w)
    af_norm = np.abs(af) / np.max(np.abs(af))
    af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
    axes[0].plot(np.degrees(theta), af_dB, label=name, linewidth=1)

axes[0].set_xlabel('Angle [deg]')
axes[0].set_ylabel('|AF| [dB]')
axes[0].set_title(f'Tapering Comparison (N={N}, d=λ/2)')
axes[0].legend(fontsize=9)
axes[0].grid(True)
axes[0].set_xlim(55, 125)
axes[0].set_ylim(-50, 0)

# 重み分布の比較
for name, w in taperings.items():
    axes[1].plot(n_arr, w / np.max(w), 'o-', markersize=3, label=name)

axes[1].set_xlabel('Element Index')
axes[1].set_ylabel('Normalized Weight')
axes[1].set_title('Tapering Weight Distribution')
axes[1].legend(fontsize=9)
axes[1].grid(True)

plt.tight_layout()
plt.show()

このグラフから、テーパリングの効果とトレードオフが明確に見えます。

  1. 等振幅(Uniform): サイドローブは約 $-13$ dB ですが、主ローブは最も狭くなっています。重み分布は完全にフラットです
  2. コサインテーパリング: サイドローブが約 $-23$ dB に改善され、10 dB近い低減効果があります。重み分布は端に向かってなだらかに減衰しています
  3. ハニングテーパリング: サイドローブは約 $-32$ dB まで低下し、非常にクリーンなパターンが得られます。しかし端の素子の振幅がほぼゼロになり、主ローブがかなり広がっています
  4. チェビシェフテーパリング($-30$ dB): すべてのサイドローブがほぼ同じレベル($-30$ dB)に揃っている等リップル特性が確認できます。同じ $-30$ dB のサイドローブ抑圧をハニングより狭い主ローブ幅で実現しており、最適性が見て取れます

極座標プロットによる放射パターンの可視化

放射パターンをより直感的に理解するため、極座標プロットで可視化します。ブロードサイド、ステアリング、テーパリングの3条件を比較します。

import numpy as np
import matplotlib.pyplot as plt

def array_factor(theta, N, d_lambda, alpha0=0.0, weights=None):
    """アレイファクターを計算する"""
    if weights is None:
        weights = np.ones(N)
    k = 2 * np.pi
    psi = k * d_lambda * np.cos(theta) + alpha0
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += weights[n] * np.exp(1j * n * psi)
    return af

theta = np.linspace(0, 2 * np.pi, 3600)
N = 16
d_lambda = 0.5
k = 2 * np.pi

fig, axes = plt.subplots(1, 3, figsize=(18, 6),
                          subplot_kw={'projection': 'polar'})

# (a) ブロードサイド(等振幅)
af = array_factor(theta, N, d_lambda, alpha0=0.0)
af_norm = np.abs(af) / N
af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
af_dB_plot = np.maximum(af_dB, -40) + 40
axes[0].plot(theta, af_dB_plot, 'b-', linewidth=1)
axes[0].set_title('(a) Broadside\n(θ₀=90°, Uniform)', pad=20)
axes[0].set_theta_zero_location('N')

# (b) ステアリング(60°方向)
theta_s = np.radians(60)
alpha0 = -k * d_lambda * np.cos(theta_s)
af = array_factor(theta, N, d_lambda, alpha0)
af_norm = np.abs(af) / N
af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
af_dB_plot = np.maximum(af_dB, -40) + 40
axes[1].plot(theta, af_dB_plot, 'r-', linewidth=1)
axes[1].set_title('(b) Steered\n(θ₀=60°, Uniform)', pad=20)
axes[1].set_theta_zero_location('N')

# (c) ブロードサイド + ハニングテーパリング
w_hanning = 0.5 * (1 - np.cos(2 * np.pi * np.arange(N) / (N - 1)))
af = array_factor(theta, N, d_lambda, alpha0=0.0, weights=w_hanning)
af_norm = np.abs(af) / np.max(np.abs(af))
af_dB = 20 * np.log10(np.maximum(af_norm, 1e-10))
af_dB_plot = np.maximum(af_dB, -40) + 40
axes[2].plot(theta, af_dB_plot, 'g-', linewidth=1)
axes[2].set_title('(c) Broadside\n(θ₀=90°, Hanning)', pad=20)
axes[2].set_theta_zero_location('N')

plt.suptitle(f'Polar Radiation Patterns (N={N}, d=λ/2)', fontsize=14)
plt.tight_layout()
plt.show()

極座標プロットにより、空間的な放射パターンが直感的に把握できます。

  1. (a) ブロードサイド + 等振幅: 90°方向に鋭いメインビームが形成され、両側に対称なサイドローブが並んでいます。0°方向と180°方向にもサイドローブが見えます
  2. (b) ステアリング 60°: メインビームが60°方向にシフトしています。パターンの対称性が崩れ、ビームがやや広がっていることがわかります
  3. (c) ブロードサイド + ハニング: (a) と同じ90°方向にメインビームがありますが、サイドローブがほぼ見えなくなっています。その代償としてメインビームは (a) より広がっています

2次元平面アレイのパターン可視化

最後に、2次元平面アレイ(URA)のアレイファクタを計算し、ビームの3次元的な広がりを可視化します。

import numpy as np
import matplotlib.pyplot as plt

def ura_array_factor(theta, phi, M, N, dx_lambda, dy_lambda,
                     alpha_x=0.0, alpha_y=0.0):
    """
    2次元平面アレイ(URA)のアレイファクターを計算する
    theta: 天頂角 [rad]
    phi: 方位角 [rad]
    M, N: x方向, y方向の素子数
    dx_lambda, dy_lambda: 素子間隔(波長正規化)
    alpha_x, alpha_y: 各方向の位相差 [rad]
    """
    k = 2 * np.pi
    psi_x = k * dx_lambda * np.sin(theta) * np.cos(phi) + alpha_x
    psi_y = k * dy_lambda * np.sin(theta) * np.sin(phi) + alpha_y

    # x方向のAF
    af_x = np.zeros_like(theta, dtype=complex)
    for m in range(M):
        af_x += np.exp(1j * m * psi_x)

    # y方向のAF
    af_y = np.zeros_like(theta, dtype=complex)
    for n in range(N):
        af_y += np.exp(1j * n * psi_y)

    return af_x * af_y

# パラメータ
M, N = 16, 16
dx_lambda = dy_lambda = 0.5

# 角度グリッド
theta_1d = np.linspace(0.001, np.pi/2, 200)
phi_1d = np.linspace(0, 2*np.pi, 360)
THETA, PHI = np.meshgrid(theta_1d, phi_1d)

# (1) ブロードサイド
AF = ura_array_factor(THETA, PHI, M, N, dx_lambda, dy_lambda)
AF_norm = np.abs(AF) / (M * N)
AF_dB = 20 * np.log10(np.maximum(AF_norm, 1e-10))

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

# u-v 座標系で表示
U = np.sin(THETA) * np.cos(PHI)
V = np.sin(THETA) * np.sin(PHI)

c1 = axes[0].pcolormesh(U, V, AF_dB, cmap='jet',
                         vmin=-40, vmax=0, shading='auto')
axes[0].set_xlabel('u = sinθ cosφ')
axes[0].set_ylabel('v = sinθ sinφ')
axes[0].set_title(f'Broadside (α_x=0, α_y=0)\nM×N = {M}×{N}')
axes[0].set_aspect('equal')
plt.colorbar(c1, ax=axes[0], label='|AF| [dB]')

# (2) ステアリング: (θ_s=30°, φ_s=45°)
k = 2 * np.pi
theta_s, phi_s = np.radians(30), np.radians(45)
alpha_x = -k * dx_lambda * np.sin(theta_s) * np.cos(phi_s)
alpha_y = -k * dy_lambda * np.sin(theta_s) * np.sin(phi_s)

AF2 = ura_array_factor(THETA, PHI, M, N, dx_lambda, dy_lambda,
                        alpha_x, alpha_y)
AF2_norm = np.abs(AF2) / (M * N)
AF2_dB = 20 * np.log10(np.maximum(AF2_norm, 1e-10))

c2 = axes[1].pcolormesh(U, V, AF2_dB, cmap='jet',
                         vmin=-40, vmax=0, shading='auto')
axes[1].set_xlabel('u = sinθ cosφ')
axes[1].set_ylabel('v = sinθ sinφ')
axes[1].set_title(f'Steered (θ_s=30°, φ_s=45°)\nM×N = {M}×{N}')
axes[1].set_aspect('equal')
plt.colorbar(c2, ax=axes[1], label='|AF| [dB]')

# ステアリング方向にマーカー
u_s = np.sin(theta_s) * np.cos(phi_s)
v_s = np.sin(theta_s) * np.sin(phi_s)
axes[1].plot(u_s, v_s, 'wx', markersize=10, markeredgewidth=2)

plt.tight_layout()
plt.show()

2次元アレイパターンの $u$-$v$ 平面表示から、次のことが読み取れます。

  1. ブロードサイド(左図): メインビームが $u = v = 0$($\theta = 0$、天頂方向)に形成されています。$u$ 方向と $v$ 方向にそれぞれサイドローブが規則的に並んでおり、URA の分離可能性($\text{AF} = \text{AF}_x \times \text{AF}_y$)が視覚的に確認できます
  2. ステアリング(右図): メインビームが $(\theta_s = 30°, \phi_s = 45°)$ の方向(白い×印)にシフトしています。サイドローブの格子構造は変わりませんが、メインビームの位置が確かに移動しています。$d = \lambda/2$ の条件を守っているため、グレーティングローブは可視領域内に現れていません

HPBW の数値検証

理論で導出したHPBWの近似式を、数値計算と比較して検証します。

import numpy as np

def compute_hpbw(N, d_lambda):
    """
    数値的にHPBWを計算する(ブロードサイド、等振幅)
    """
    theta = np.linspace(0.001, np.pi - 0.001, 100000)
    k = 2 * np.pi
    psi = k * d_lambda * np.cos(theta)

    # アレイファクタの計算
    af = np.zeros(len(theta), dtype=complex)
    for n in range(N):
        af += np.exp(1j * n * psi)
    af_norm = np.abs(af) / N

    # 主ローブの最大値の位置(90°付近)
    idx_max = np.argmax(af_norm)

    # 右側の-3dB点を探す
    half_power = 1.0 / np.sqrt(2)
    right_half = af_norm[idx_max:]
    idx_right = np.argmax(right_half < half_power)
    theta_right = theta[idx_max + idx_right]

    # 左側の-3dB点を探す
    left_half = af_norm[:idx_max][::-1]
    idx_left = np.argmax(left_half < half_power)
    theta_left = theta[idx_max - idx_left]

    hpbw_numerical = np.degrees(theta_right - theta_left)
    return hpbw_numerical

print(f"{'N':>5} {'d/λ':>6} {'HPBW(理論)':>12} {'HPBW(数値)':>12} {'誤差':>8}")
print("-" * 50)

d_lambda = 0.5
for N in [4, 8, 16, 32, 64]:
    hpbw_theory = np.degrees(0.886 / (N * d_lambda))
    hpbw_num = compute_hpbw(N, d_lambda)
    error = abs(hpbw_num - hpbw_theory) / hpbw_theory * 100
    print(f"{N:5d} {d_lambda:6.2f} {hpbw_theory:10.3f}° {hpbw_num:10.3f}° {error:6.2f}%")

この結果から、理論式 $\text{HPBW} \approx 0.886\lambda/(Nd)$ が数値計算の結果とよく一致していることが確認できます。$N$ が小さい場合は微小角近似の精度が落ちるため誤差がやや大きくなりますが、$N \geq 16$ では誤差が1%以下に収まります。$N$ が大きいほど主ローブが鋭くなり近似の精度が上がるという傾向は、導出過程で用いた近似($\sin x \approx x$, $\cos(\pi/2 + \Delta\theta) \approx -\Delta\theta$)の妥当性を裏付けています。

まとめ

本記事では、アレイファクタの理論を基礎から体系的に解説しました。

  • パターン乗算定理により、アレイアンテナの全体パターンは素子パターンとアレイファクタの積に分離できます。アレイファクタは素子の配置と給電条件のみで決まるため、アレイ設計の中核を担います
  • 等間隔直線アレイ(ULA)のアレイファクタは、等比級数の和を用いて $\text{AF}_N = \frac{1}{N}\frac{\sin(N\psi/2)}{\sin(\psi/2)}$ の閉形式で表されます
  • ビームステアリングは、隣接素子間の位相差 $\alpha_0 = -kd\cos\theta_s$ を設定するだけで実現できます。機械的な回転が不要な電子走査の原理です
  • ビーム幅はアレイの全長 $L = Nd$ と波長 $\lambda$ で $\text{HPBW} \approx 0.886\lambda/L$ と決まり、アレイが長いほど鋭いビームが得られます
  • 等振幅アレイの最大サイドローブレベルは約 $-13.3$ dB で素子数に依存しません
  • グレーティングローブの回避には、ブロードサイドで $d < \lambda$、全方位走査では $d < \lambda/2$ が必要です
  • 振幅テーパリング(コサイン、チェビシェフ、テイラー等)によりサイドローブを大幅に低減できますが、ビーム幅の拡大とのトレードオフがあります
  • 2次元平面アレイ(URA)では、アレイファクタが $x$ 方向と $y$ 方向の積に分離可能であり、1次元の理論がそのまま拡張できます

アレイファクタの理論は、フェーズドアレイレーダーやMIMOアンテナの設計において不可欠な基盤です。次のステップとして、以下の記事も参考にしてください。