>
section 5 of 126 min read

5. Antenna Arrays

A single antenna's pattern is fixed by its geometry. To make a narrower beam, or to steer the beam, we combine multiple antennas in an array. The key principle: when multiple antennas radiate the same frequency, their fields interfere. By adjusting the relative phases and amplitudes, we can make the interference constructive in chosen directions and destructive elsewhere.

5.1 The two-element array

Take two identical antennas spaced by distance dd, fed by currents of equal magnitude but with phase difference δ\delta between them. At a far-field observation point in direction θ\theta (measured from the array axis), the path-length difference is dcosθd\cos\theta, which contributes a phase difference of kdcosθ=(2πd/λ)cosθkd\cos\theta = (2\pi d/\lambda)\cos\theta. Combined with the feed phase difference δ\delta, the total phase between the two contributions is

ψ=kdcosθ+δ\psi = kd\cos\theta + \delta

The two contributions add coherently. For unit amplitudes:

AF(θ)=1+ejψ=2cos(ψ/2)ejψ/2AF(\theta) = 1 + e^{j\psi} = 2\cos(\psi/2) \cdot e^{j\psi/2}

The magnitude is AF=2cos(ψ/2)|AF| = 2|\cos(\psi/2)|, which is the array factor.

The total far-field pattern is the product of the element pattern (what one antenna alone would do) and the array factor (the interference between elements). This is pattern multiplication, the most useful theorem in array design.

5.2 Broadside and end-fire arrays

Two special cases of the two-element array:

Broadside array. d=λ/2d = \lambda/2, δ=0\delta = 0. The two antennas are fed in phase. Maximum radiation is broadside (θ=90°\theta = 90°, perpendicular to the array axis), where the path lengths are equal so contributions add. Along the array axis (θ=0\theta = 0), the path difference is d=λ/2d = \lambda/2, giving ψ=π\psi = \pi, so cos(π/2)=0|\cos(\pi/2)| = 0: a perfect null along the axis.

plaintext
     Broadside (d=λ/2, δ=0)
     
         ↑↑↑ peak ↑↑↑
   null  ●     ●  null
           ↓↓↓ peak ↓↓↓
   (peaks broadside, nulls end-fire)

End-fire array. d=λ/4d = \lambda/4, δ=π/2\delta = -\pi/2. The element behind is delayed by 90°, exactly compensating for the 90° path lead it gives in the forward direction. Forward: phases align, additive. Backward: phases counter, subtractive. Result: peak along the array axis (end-fire) with a null behind.

plaintext
     End-fire (d=λ/4, δ=-90°)
     
            no↓
            null
             ●     ●  ━━▶ peak
            null
            no↑
   (peak along axis, null broadside-ish)

Yagi-Uda antennas are essentially end-fire arrays of dipoles (one driven, the rest parasitic).

5.3 N-element uniform linear array

Generalizing to NN identical equally-spaced elements with progressive phase shift δ\delta between adjacent elements:

AF(θ)=sin(Nψ/2)sin(ψ/2)AF(\theta) = \frac{\sin(N\psi/2)}{\sin(\psi/2)}

where ψ=kdcosθ+δ\psi = kd\cos\theta + \delta. As NN grows, the main beam narrows, side lobes appear at predictable positions (the first side lobe is at –13 dB for a uniform array), and the directivity increases. The beamwidth (HPBW) for a broadside ULA is approximately

HPBW0.886λNd (radians)\text{HPBW} \approx 0.886 \cdot \frac{\lambda}{Nd} \text{ (radians)}

Doubling the array length halves the beamwidth. Doubling the number of elements without changing length still helps but has diminishing returns.

5.4 Beam steering: phase as a knob

Now the most interesting part. By electronically varying δ\delta in real time, we steer the beam without moving the antenna. The peak occurs where ψ=0\psi = 0, i.e., where kdcosθ0=δkd\cos\theta_0 = -\delta, so

θ0=arccos(δkd)\theta_0 = \arccos\left(-\frac{\delta}{kd}\right)

Setting δ\delta as a function of time scans the beam across the sky. This is the principle of phased-array radar and beam-forming.

plaintext
   Phased array beam steering
   
       (δ = 0)        (δ = -kd/2)        (δ = -kd)
       
          ┃                ╱                 ──→
          ┃              ╱
          ┃           ╱
       ━━━━━━━     ━━━━━━━              ━━━━━━━
       (boresight) (steered 60°)    (steered to horizon)

Lighthouse analogy. A lighthouse rotates a heavy lens to sweep its beam across the horizon. A phased-array radar achieves the same sweep without any moving parts: it changes the relative phases of dozens or thousands of small antennas, electronically tilting the beam in microseconds. There is no mechanical inertia, so the beam can leap from one direction to another faster than any motor could turn. Modern AESA radars on fighter jets do this, tracking many targets simultaneously by interleaving beam positions in time.

Used in: AEGIS warship radars, F-22/F-35 AESA radars, modern weather radar (NEXRAD upgrades), 5G mm-wave base stations (which steer beams to individual user devices), Starlink satellite phased arrays (both on the spacecraft and on the user terminal), automotive 77 GHz radar (for adaptive cruise control), and the SKA radio telescope.

5.5 Adaptive arrays and digital beamforming

Once each antenna element has its own digital receiver and ADC, you can do all the beamforming in software. Sum the signals with one set of phase weights to look one direction; sum with a different set to look another direction. You can even look in many directions simultaneously (multibeam), which is what 5G "massive MIMO" base stations do, serving multiple users on the same frequency by separating them spatially.

Adaptive arrays go further: they sense their environment and dynamically null out interferers. An anti-jam GPS receiver uses an array of 4 to 7 elements to detect the direction of jamming and steer a deep null toward it while preserving the satellite signals. Microphone arrays in voice assistants do the same for sound: focus on the speaker, suppress ambient noise.

5.6 Pattern multiplication: a worked example

Take a 4-element broadside array of half-wave dipoles, each spaced λ/2\lambda/2. The array factor for N=4N = 4, d=λ/2d = \lambda/2, δ=0\delta = 0:

AF(θ)=sin(2πcosθ)sin(πcosθ/2)AF(\theta) = \frac{\sin(2\pi \cos\theta)}{\sin(\pi \cos\theta / 2)}

The element pattern is the dipole's cos((π/2)cosθ)/sinθ|\cos((\pi/2)\cos\theta)/\sin\theta|. The total pattern is the product. The result is a sharper main lobe broadside, with two small side lobes and the dipole's null along the wire axis preserved.

Pattern multiplication tells you: if you want to suppress side lobes, you can change either the element pattern (use a more directive element) or the array factor (use amplitude tapering across elements). Tapering (less amplitude on the outer elements, more in the middle) trades main-lobe width for side-lobe suppression. A common taper is the Dolph-Chebyshev distribution, which gives a desired side-lobe level at the price of a slightly wider main beam.

python
# Plotting an N-element uniform linear array's array factor.
import numpy as np
import matplotlib.pyplot as plt
 
N = 8                     # number of elements
d_over_lambda = 0.5       # element spacing
delta = 0                 # progressive phase (broadside)
 
theta = np.linspace(0, np.pi, 1000)
psi = 2*np.pi*d_over_lambda*np.cos(theta) + delta
AF = np.sin(N*psi/2) / (N*np.sin(psi/2))   # normalized
AF_dB = 20*np.log10(np.abs(AF) + 1e-9)
 
plt.polar(theta, np.maximum(AF_dB + 30, 0))   # shift for plotting
plt.title(f"{N}-element ULA, d=λ/2, broadside")
plt.show()

This snippet plots an 8-element broadside ULA. Change delta to -np.pi*0.5 and the beam swings to 60°. Change d_over_lambda to 1 and you get grating lobes (extra peaks because the array is over-sampled in the angular spectrum), an undesired effect that constrains element spacing.