Denys Inhul

ch6: arrays and beamforming

date: May 17 2026

the question driving this chapter: why many small antennas can be combined into one with a narrow steerable beam, what the math actually says, and how MIMO turns a few physical antennas into a much larger virtual aperture.

1. The single-antenna baseline

A single antenna has a fixed shape pointing in a fixed direction. A half-wave dipole gives you a donut broadside to its axis, about 2 dBi peak gain, and ~90° of half-power beamwidth. To point it somewhere else you mechanically rotate the whole thing. To narrow its beam you make it physically bigger. The diffraction limit nails the cost of narrowness:

θHPBW    λD\theta_{\text{HPBW}} \;\gtrsim\; \frac{\lambda}{D}

A 1° beam at 10 GHz (λ = 3 cm) needs an antenna ~1.7 m across. That’s a real dish, mechanically aimed, with a slew rate way too slow for radar beam scanning at video rates.

Arrays cheat their way out of this. Instead of one big antenna, take many small antennas and add their fields together with carefully controlled phase. The result behaves like an antenna whose effective aperture is the entire array, so the diffraction limit is honored at the array scale rather than the element scale, and “pointing” the beam becomes a software update of phase coefficients with no moving parts.

2. Coherent summation

Place NN identical antennas at known positions rn\mathbf{r}_n. Drive each with a complex weight wnw_n (amplitude and phase). The radiated field in direction u^\hat{\mathbf{u}} in the far field is the sum of the individual fields, each carrying a phase factor that depends on the element’s position relative to the wavefront direction:

E(u^)  =  Eelement(u^)n=1Nwnejkrn  =  Eelement(u^)AF(u^),E(\hat{\mathbf{u}}) \;=\; E_\text{element}(\hat{\mathbf{u}}) \,\sum_{n=1}^{N} w_n \, e^{\,j \mathbf{k}\cdot\mathbf{r}_n} \;=\; E_\text{element}(\hat{\mathbf{u}}) \cdot \mathrm{AF}(\hat{\mathbf{u}}),

where k=(2π/λ)u^\mathbf{k} = (2\pi/\lambda)\,\hat{\mathbf{u}} is the wavevector pointing in the direction of interest. The sum is the array factor. The product on the left is the central array equation: total radiation = element pattern × array factor.

In any direction where all the phases line up (the wnejkrnw_n e^{j\mathbf{k}\cdot\mathbf{r}_n} all have the same phase), the sum is NN times one contribution and the field grows by NN, the power by N2N^2. In every other direction the phases scatter and the sum is much smaller. That is the entire mechanism behind array beamforming.

3. The array factor for a uniform linear array

For NN elements equally spaced by dd along the x-axis, with the nn-th element at xn=(n1)dx_n = (n-1)d, the array factor as a function of angle θ\theta from broadside (the direction perpendicular to the array axis) is

AF(θ)  =  n=0N1wnejnψ,ψ  =  kdsinθβ,\mathrm{AF}(\theta) \;=\; \sum_{n=0}^{N-1} w_n \, e^{\,j n \psi}, \qquad \psi \;=\; k d \sin\theta - \beta,

where β\beta is the inter-element phase progression used to steer the beam and k=2π/λk = 2\pi/\lambda.

For uniform amplitude weights (wn=1w_n = 1), the sum is a geometric series with closed form

AF(θ)  =  sin(Nψ/2)sin(ψ/2)|\mathrm{AF}(\theta)| \;=\; \left| \frac{\sin(N\psi/2)}{\sin(\psi/2)} \right|

The pattern peaks where ψ=0\psi = 0, i.e. at the steering angle sinθ0=β/(kd)\sin\theta_0 = \beta / (k d). Width of the main lobe in ψ\psi is 2π/N\sim 2\pi/N; in sinθ\sin\theta the half-power beamwidth scales as

θHPBW    0.886λNdcosθ0\theta_{\text{HPBW}} \;\approx\; \frac{0.886\,\lambda}{N d \cos\theta_0}

The product NdN d is the physical aperture of the array. More elements at the same spacing, or wider spacing at the same element count, both give a tighter beam. The price of wider spacing is grating lobes (§5).

The DFT analogy

Treat the array as a discrete spatial signal: the element weights wnw_n as samples taken at positions xn=ndx_n = n d. The array factor at angle θ\theta is

AF(θ)  =  nwnej2π(d/λ)nsinθ,\mathrm{AF}(\theta) \;=\; \sum_n w_n \, e^{\,j 2\pi (d/\lambda) n \sin\theta},

which is the discrete Fourier transform of the weight sequence, evaluated at “spatial frequency” (d/λ)sinθ(d/\lambda)\sin\theta. The visible region 1sinθ1-1 \le \sin\theta \le 1 corresponds to one full DFT period when d=λ/2d = \lambda/2. Every result from temporal DSP transfers to spatial array processing: windows reduce sidelobes (at the cost of beamwidth), zero-padding doesn’t add information, the FFT is the efficient way to evaluate the array factor on a dense θ\theta grid.

The thing that actually controls beamwidth is the aperture in wavelengths, not the element count or the spacing separately. Doubling either gives the same beam-narrowing. Aperture is the resource you’re spending; element count and spacing are how you spend it. A few widely-spaced elements buy you narrowness but invite grating lobes; many closely-spaced elements stay grating-lobe-free but need more hardware.

4. Beam steering: just a phase ramp

To steer the main lobe to angle θ0\theta_0, apply a linear phase progression across the elements:

β  =  kdsinθ0,wn  =  ejnβ\beta \;=\; k d \sin\theta_0, \qquad w_n \;=\; e^{-j n \beta}

This makes ψ=kdsinθβ\psi = k d \sin\theta - \beta equal zero at θ=θ0\theta = \theta_0, which is where the array factor peaks. No mechanical motion. No re-routing of cables. Just a complex coefficient update per element.

What “applying a phase” physically means depends on the hardware:

  • Analog phased array. Each element has a controllable phase shifter (electronic, often diode- or MEMS-based). The phase is applied in the RF path before combining. Cheap on power, expensive in hardware per element.
  • Digital beamforming. Each element has its own ADC. Phase is applied in software after digitizing. Expensive on power and data rate (one ADC per element), but you can form multiple beams simultaneously from the same data.
  • Hybrid. Sub-arrays of analog-steered elements feed a smaller number of ADCs. Common in 5G base stations and modern radar.

From the array factor’s perspective, all three are identical: the same β\beta produces the same steered beam. The choice is about power, data rate, and how many simultaneous beams you need, not about the physics.

5. Two roles of λ: element size and array spacing

λ\lambda shows up twice when arrays are designed, doing two independent jobs that happen to want the same number.

  1. Element size. Each radiating element wants to be roughly λ/2\lambda/2 for the resonance and impedance reasons in Chapter 5. This sets the element’s individual radiation pattern and how easily it can be fed.
  2. Element spacing. The separation between adjacent elements wants to be no more than about λ/2\lambda/2 to prevent grating lobes from appearing as the beam is steered. This is a sampling constraint on the array, not a constraint on any individual element.

The two constraints are physically distinct: one is about each element’s coupling between guided current and free space, the other is about the array as a discrete spatial sampler. They converge numerically on the same λ/2\lambda/2 scale, which is why textbooks describe “λ/2\lambda/2-spaced arrays of λ/2\lambda/2 dipoles” as the canonical configuration.

Where grating lobes come from

From the array factor AF(θ)=sin(Nψ/2)/sin(ψ/2)|\text{AF}(\theta)| = |\sin(N\psi/2) / \sin(\psi/2)| derived in §3, peaks occur whenever ψ=2πm\psi = 2\pi m for integer mm. The intended main lobe sits at m=0m = 0; additional peaks at m=±1,±2,m = \pm 1, \pm 2, \ldots are the grating lobes. They appear in the visible region π/2θπ/2-\pi/2 \le \theta \le \pi/2 as soon as the element spacing is large enough that another ψ=2πm\psi = 2\pi m solution falls inside it.

For a broadside-steered array (β=0\beta = 0), the first grating lobe enters the visible region at d=λd = \lambda. For a beam steered to θ0\theta_0, the constraint tightens:

d    λ1+sinθ0d \;\le\; \frac{\lambda}{1 + |\sin\theta_0|}

At maximum scan angle of ±90°\pm 90° (endfire), this collapses to dλ/2d \le \lambda/2. That endfire bound is where the rule-of-thumb ”λ/2\lambda/2 spacing” comes from. An array that only needs to scan, say, ±30°\pm 30° can get away with spacing up to λ/1.50.67λ\lambda / 1.5 \approx 0.67\lambda without grating lobes, which buys a slightly wider effective aperture for a given element count.

Array factor vs spacing d/λ

A linear array of 8 elements with adjustable spacing d/λd/\lambda and adjustable steering angle. The polar plot shows the array factor magnitude vs angle from broadside. Grating lobes appear as additional main-strength peaks at angles other than the intended steering direction.

0.50

Increase d/λd/\lambda past about 1 and a second peak (“grating lobe”) emerges. Steering the beam off broadside pulls the grating lobe into the visible region at smaller d/λd/\lambda.

6. Pattern multiplication

The element pattern Eelement(θ)E_\text{element}(\theta) multiplies the array factor AF(θ)\mathrm{AF}(\theta) to give the total radiation pattern. Two consequences:

  1. The element pattern cannot create radiation outside its own pattern. If the element has a null at 90° from boresight, the array has a null at 90° regardless of how cleverly you weight the elements.
  2. The element pattern can kill grating lobes that the array factor would otherwise have. A grating lobe is just another peak of AF|\mathrm{AF}|; if it sits in a direction where the element pattern is small, the product is small.

This is the principled answer to “what if my array elements are horns instead of dipoles.” A horn has a much narrower element pattern than a dipole. Multiplying that narrower envelope against the array factor suppresses any sidelobes and grating lobes outside the horn’s main lobe. The cost is reduced angular coverage: you can no longer steer beyond the horn’s beamwidth, because outside that angular region the element pattern is dragging the total to zero.

Pattern multiplication: element × array factor = total

A uniform linear array with adjustable spacing, element count, steering, and element type. The three polar plots show element pattern, array factor, and their product. Pick a directive element (horn) and watch how it suppresses grating lobes that the array factor alone would create when d>λd > \lambda.

8 0.50
Polar plots, broadside up, dipole axis horizontal (perpendicular to the array axis). Try N=8, d=1.0λ first to see grating lobes in the bare AF; then switch to a "horn" element and watch the grating lobes disappear in the product because the horn pattern is small in those directions.

7. Two-dimensional arrays

Placing elements on a 2D grid extends beamforming to azimuth and elevation independently. For a rectangular array of M×NM \times N elements with spacings dx,dyd_x, d_y, the array factor separates:

AF(θx,θy)  =  AFx(θx)AFy(θy)\mathrm{AF}(\theta_x, \theta_y) \;=\; \mathrm{AF}_x(\theta_x) \cdot \mathrm{AF}_y(\theta_y)

Each factor steers and shapes its respective axis independently. The total aperture is Mdx×NdyM d_x \times N d_y, and the resulting beam has azimuth beamwidth λ/(Mdx)\sim \lambda/(M d_x) and elevation beamwidth λ/(Ndy)\sim \lambda/(N d_y). A square aperture gives a circular beam; a rectangular aperture gives an elliptical beam.

Two-dimensional steering uses two independent phase ramps, one across each axis. Grating-lobe constraints apply along each axis separately. For a steered 2D array, the maximum spacing in each axis tightens by the same 1+sinθ01 + |\sin\theta_0| factor as in §5, but evaluated against that axis’s steering angle.

8. MIMO virtual arrays

A standard array has NN antennas, NN receive chains, and produces a receive aperture of NN elements. MIMO radar uses NTXN_\text{TX} transmitters and NRXN_\text{RX} receivers, each TX-RX pair making an independent measurement, and synthesizes a virtual array with up to NTXNRXN_\text{TX} \cdot N_\text{RX} elements.

Where the virtual elements live

Consider a TX at position pT\mathbf{p}_T and an RX at position pR\mathbf{p}_R. A far-field target at angle θ\theta sees a one-way phase from the TX of ejkpTu^e^{-j k \mathbf{p}_T \cdot \hat{\mathbf{u}}}, and the reflection returns to the RX with an additional phase ejkpRu^e^{-j k \mathbf{p}_R \cdot \hat{\mathbf{u}}}. The total round-trip phase is

exp ⁣(jk(pT+pR)u^)\exp\!\bigl(-j k (\mathbf{p}_T + \mathbf{p}_R) \cdot \hat{\mathbf{u}}\bigr)

A monostatic radar with a single antenna at position pV\mathbf{p}_V would see a round-trip phase exp(j2kpVu^)\exp(-j \cdot 2 k \, \mathbf{p}_V \cdot \hat{\mathbf{u}}). The two match when

pV  =  pT+pR2\mathbf{p}_V \;=\; \frac{\mathbf{p}_T + \mathbf{p}_R}{2}

So each TX-RX pair behaves like a monostatic measurement from a virtual element halfway between the actual TX and RX positions. With NTXN_\text{TX} TX positions and NRXN_\text{RX} RX positions, you get up to NTXNRXN_\text{TX} \cdot N_\text{RX} virtual elements at all midpoint combinations.

The canonical compact MIMO geometry

The standard MIMO recipe for one-dimensional angular resolution is to space RX elements at dRXd_\text{RX} and TX elements at dTX=NRXdRXd_\text{TX} = N_\text{RX} \cdot d_\text{RX}. The virtual array then has NTXNRXN_\text{TX} \cdot N_\text{RX} elements at uniform spacing dRX/2d_\text{RX}/2 (the factor of two comes from the TX-RX midpoint).

The factor of two has a real consequence. If RX antennas sit at dRX=λ/2d_\text{RX} = \lambda/2 (the standard anti-grating choice from §5), the virtual array lands at λ/4\lambda/4 spacing, twice as dense as a normal ULA. That over-sampling does not improve angular resolution by itself, but it does mean the virtual array is grating-lobe-free for steering angles much larger than ±30°\pm 30°. The TI IWR1843 chip uses exactly this geometry: 3 TX at 2λ2\lambda spacing, 4 RX at λ/2\lambda/2 spacing, yielding 12 virtual elements at λ/4\lambda/4 spacing across a 2.75λ2.75\lambda aperture.

If a λ/2\lambda/2-spaced virtual ULA is what is needed instead, set dRX=λd_\text{RX} = \lambda and dTX=NRXλd_\text{TX} = N_\text{RX}\lambda. The virtual array is then λ/2\lambda/2-spaced across an aperture of NTXNRXλ/2N_\text{TX} \cdot N_\text{RX} \cdot \lambda/2. The demo below makes this factor of two explicit: it reports both the virtual spacing and whether the chosen TX and RX layouts produce a uniform virtual array.

Why this matters in practice

An NTXNRXN_\text{TX} \cdot N_\text{RX}-element virtual array needs only NTX+NRXN_\text{TX} + N_\text{RX} physical antennas and NTX+NRXN_\text{TX} + N_\text{RX} RF chains (one per TX or per RX). For comparable angular resolution, a standard NN-element array needs NN antennas and NN RF chains. The TI IWR1843 mmWave radar chip has 3 TX and 4 RX, building a 12-element virtual array with the hardware cost of 7 RF chains.

The price is one form of orthogonality between the TX signals so the RX can separate which TX produced which return: time-division (TX in turn), frequency-division (TX at different carriers), or code-division (TX use orthogonal codes). Most automotive radars use time-division because chirps are short and easy to interleave.

MIMO virtual array construction

Three rows: physical TX positions, physical RX positions, and the resulting virtual array. Spacing of TX and RX (in units of λ\lambda) are independent. The virtual array length and uniformity depend on how the two spacings match.

2 2.0 4 0.50

Physical TX in warm, physical RX in teal, virtual array in dark with horizontal scale in units of λ\lambda. The number of virtual elements equals NTXNRXN_\text{TX} \cdot N_\text{RX} when no two midpoints coincide; uniformity is achieved when TX spacing equals NRXN_\text{RX} × (RX spacing).

Why directivity peaks above λ/2

question: in the demo with one TX and four RX, the in-cut directivity climbs above 9 dBi when the RX spacing is around 0.75λ rather than the canonical 0.5λ. Why does spreading the elements further apart give more gain instead of less?

Two competing effects shape directivity as a function of element spacing.

  1. Aperture growth raises directivity. For a uniform NN-element array, beamwidth scales as λ/(Nd)\lambda / (N \cdot d). Increasing dd at fixed NN widens the aperture and narrows the main lobe. A narrower main lobe concentrates more of the radiated power near broadside, which raises directivity.
  2. Grating lobes eventually rob power. At d=λd = \lambda for a broadside-steered array, a second main lobe (the grating lobe) enters the visible region at endfire. Beyond d=λd = \lambda, more grating lobes appear at intermediate angles. Each one is an additional copy of the main lobe that takes power away from the original direction, which lowers directivity.

Directivity climbs as dd rises from λ/2\lambda/2 toward λ\lambda, peaks just before the first grating lobe touches the visible region, and then drops sharply once that grating lobe enters. For a uniformly excited four-element array, the peak sits empirically around 0.75λ0.75\lambda to 0.85λ0.85\lambda. The reading of about 9 dBi at dRX=0.75λd_\text{RX} = 0.75\lambda in the demo is on the rising arm of that curve. Push the RX spacing toward 0.85λ0.85\lambda and the value creeps higher; push past λ\lambda and watch it collapse as the back lobe rises into the polar diagram.

The MIMO factor-of-two undoes itself

One subtlety is which “spacing” sets the directivity peak. The virtual elements sit at the midpoint of each TX-RX pair, which would suggest the effective spacing is half of the physical RX spacing. But the two-way phase factor for a TX-RX measurement is 2kpV2k \cdot \mathbf{p}_V, twice the one-way phase used in a standard ULA analysis. That factor of two from the round trip cancels the factor of two from the midpoint construction. Under two-way processing, the effective electrical spacing of the virtual array equals the RX spacing directly, not half of it.

That is why the directivity-versus-spacing curve in the demo lines up with what would be expected from a normal one-way ULA at d=dRXd = d_\text{RX} rather than at d=dRX/2d = d_\text{RX}/2. It also explains why MIMO RX arrays in published designs often run wider than λ/2\lambda/2. For broadside-only operation with a single TX, the directivity sweet spot is around 0.7λ0.7\lambda to 0.9λ0.9\lambda on the RX side. Steering the beam off-broadside drags the grating-lobe boundary down, which is why automotive MIMO radars that need wide angular coverage stay closer to λ/2\lambda/2.

9. Sparse arrays and weighted apertures

Two more variations on the same array factor expression.

Sparse / non-uniform arrays

Place elements at non-uniform positions. The array factor is no longer a clean sum of phasors at integer multiples of ψ\psi; the regular grating lobes spread out into a higher general sidelobe floor. For the same number of elements, a sparse non-uniform array can synthesize a much larger aperture (and so a much tighter beam) at the cost of higher sidelobes. Used when element count is limited and aperture is what you need to maximize.

Amplitude tapering

Set wnw_n to a non-uniform amplitude weighting (Hamming, Taylor, Dolph-Chebyshev, Kaiser). The result is the same window-function effect as in DSP: reduced sidelobes at the cost of widened main lobe. The two-way Hamming window halves sidelobe height versus uniform weighting and widens the main lobe by ~40%. Dolph-Chebyshev gives the minimum-beamwidth pattern for a specified sidelobe ceiling. Chapter 7 unpacks this in detail.

Element pattern as a built-in window

From Section 5, the element pattern multiplies the array factor. A directive element (horn) is equivalent to a spatial taper, in the sense that the total pattern is the product of a smoothly-shaped envelope and the AF. Choosing a more directive element trades steering range for sidelobe suppression, in exactly the same way that choosing an amplitude taper trades beamwidth for sidelobe suppression.

One caveat for tightly-spaced arrays: pattern multiplication assumes each element’s pattern is identical and unaffected by its neighbors. In reality every element radiates into the near field of every other element, which slightly distorts both its pattern and its impedance. For spacings ≲λ/2 this mutual coupling matters and the simple element × AF model is only approximate. Orfanidis Ch 21 makes this precise.

next: ch7: shaping the beam →