Array Response and Steering Vectors
Antenna Arrays: Spatial Filtering
An antenna array is to spatial signals what a filter is to time-domain signals. By weighting the outputs of multiple antenna elements, we can steer beams toward desired users and nulls toward interferers.
Definition: Uniform Linear Array (ULA) Steering Vector
Uniform Linear Array (ULA) Steering Vector
For a ULA with elements spaced apart, the steering vector for a plane wave arriving at angle from broadside is:
def steering_vector(N, d_lambda, theta):
"""ULA steering vector. d_lambda = d/wavelength, theta in radians."""
n = np.arange(N)
return np.exp(1j * 2 * np.pi * d_lambda * n * np.sin(theta))
With (half-wavelength spacing), the spatial Nyquist criterion is satisfied, avoiding grating lobes.
Definition: Array Factor
Array Factor
The array factor is the weighted sum of element responses:
For uniform weights (), the beam pattern is:
The main beam has width radians.
Definition: Uniform Planar Array (UPA) Steering Vector
Uniform Planar Array (UPA) Steering Vector
A UPA with elements has 2D steering:
where and are ULA steering vectors for the horizontal and vertical directions, and is the Kronecker product.
def upa_steering(Nh, Nv, d_lambda, theta, phi):
ah = steering_vector(Nh, d_lambda, theta)
av = steering_vector(Nv, d_lambda, phi)
return np.kron(ah, av)
Definition: Half-Power Beamwidth
Half-Power Beamwidth
The half-power beamwidth (HPBW) of a ULA with elements at half-wavelength spacing is approximately:
for broadside () and .
Definition: Array Gain and SNR Improvement
Array Gain and SNR Improvement
The array gain of elements with coherent combining is:
or dB. This is because the signal adds coherently (power ) while noise adds incoherently (power ).
Theorem: Spatial Nyquist Criterion
To avoid spatial aliasing (grating lobes), the element spacing must satisfy:
For full visible range (), this gives .
Just as temporal sampling below the Nyquist rate causes aliasing, spatial sampling below creates grating lobes that appear as phantom beams.
Theorem: Matched Filter Beamforming Is SNR-Optimal
For a single source in white noise, the weight vector that maximizes output SNR is the matched filter (conjugate beamformer):
achieving .
The matched filter coherently combines the signal from all elements, providing an -fold SNR improvement.
Theorem: Beam Steering
To steer the beam to angle , apply phase shifts:
This is equivalent to , and the beam pattern peaks at .
Phase shifting each element compensates for the path length differences, causing constructive interference at the desired angle.
Example: Computing and Plotting Beam Patterns
Compute the beam pattern of an 8-element ULA with steered to .
Implementation
N, d_lambda = 8, 0.5
theta0 = np.radians(30)
theta = np.linspace(-np.pi/2, np.pi/2, 1000)
w = steering_vector(N, d_lambda, theta0) / N
AF = np.array([w.conj() @ steering_vector(N, d_lambda, t) for t in theta])
pattern_dB = 20 * np.log10(np.abs(AF) + 1e-10)
Example: Beamwidth vs Number of Elements
Show how the beam narrows as the number of array elements increases.
Implementation
for N in [4, 8, 16, 32]:
w = steering_vector(N, 0.5, 0) / N
AF = np.array([w.conj() @ steering_vector(N, 0.5, t) for t in theta])
hpbw = np.degrees(2 * theta[np.argmin(np.abs(np.abs(AF) - 0.707))])
print(f"N={N}: HPBW ≈ {102/N:.1f}°, measured: {hpbw:.1f}°")
Example: Grating Lobes with Large Spacing
Demonstrate grating lobes when .
Implementation
for d_lambda in [0.5, 1.0, 2.0]:
AF = np.array([w.conj() @ steering_vector(N, d_lambda, t) for t in theta])
# d=0.5: no grating lobes
# d=1.0: grating lobes at ±90°
# d=2.0: multiple grating lobes
Array Beam Pattern Explorer
Explore beam patterns with adjustable array size, spacing, and steering angle.
Parameters
Polar Beam Pattern
Visualize the beam pattern in polar coordinates.
Parameters
ULA and UPA Array Geometries
Quick Check
Why is the most common element spacing?
It minimizes cost
It satisfies the spatial Nyquist criterion
It maximizes directivity
It eliminates mutual coupling
ensures no grating lobes in the visible range .
Common Mistake: Confusing Angle Conventions
Mistake:
Using instead of in the steering vector, or mixing degrees and radians.
Correction:
Our convention: is measured from broadside (array normal),
so the phase is . Always convert degrees
to radians: theta_rad = np.radians(theta_deg).
Key Takeaway
The steering vector is the fundamental building block of array processing. An -element ULA with provides -fold array gain, beamwidth , and no grating lobes.
Why This Matters: Beamforming in 5G mmWave
At mmWave frequencies (28-39 GHz), the small wavelength ( cm) enables large arrays in a small form factor: 256 elements in a 16x16 panel. 5G NR uses beam sweeping to find the best beam direction, scanning through a codebook of predetermined beam patterns.
See full treatment in Chapter 25
Historical Note: The Phased Array: From Radar to 5G
1940s-presentPhased arrays were invented for radar during World War II (Nobel Prize to Luis Alvarez for the ground-controlled approach radar). The same principle now drives 5G mmWave communications, with the key innovation being digital control of hundreds of elements at GHz sample rates.
Historical Note: MUSIC Algorithm
1986Ralph Schmidt published the MUSIC (MUltiple SIgnal Classification) algorithm in 1986, revolutionizing array signal processing. By exploiting the eigenstructure of the covariance matrix, MUSIC achieves super-resolution direction finding beyond the classical Rayleigh limit.
Steering Vector
A vector describing the phase progression across array elements for a plane wave from direction : .
Related: Uniform Linear Array (ULA)
Uniform Linear Array (ULA)
An antenna array with elements equally spaced along a line.
Beamwidth
The angular width of the main beam, typically measured at the half-power (-3 dB) points. Inversely proportional to the array aperture.
Grating Lobe
An unwanted beam appearing when the element spacing exceeds , analogous to aliasing in temporal sampling.
Array Gain
The SNR improvement from coherent combining of array elements: dB.