L11 - Measurement Lab: Radiation Patterns#

ECE 444 · Fall 2026

Measurement Lab: Radiation Patterns

You are measuring the same antenna, describing its other half.

Lesson 11 Lab · Antennas, Phased Arrays, and Radar Systems · Dr. Neil Rogers

Printing

To print the slides, switch to present mode and print: one slide a sheet, with room for notes. Print from read mode for the whole lesson.

Learning Objectives

  1. I can measure the radiation pattern of an antenna and extract gain, beamwidth, sidelobe level, and polarization from the data.

Last period you stood at the terminals and asked whether power gets into the antenna. Today you walk into the chamber and ask where that power goes. You are measuring the same antenna and describing its other half, and the answer this time is not a single number but a curve: a beamwidth, a sidelobe structure, a back level, a polarization, and a hard limit on how much of that curve is real.

Lesson 9 supplied the reasoning — reciprocity, the far-field criterion, gain by comparison, and why a noise floor bounds every number you extract. Bring it with you. Today is procedure and reduction.

What You Can Wreck

The tower turns a real antenna on a real cable. Nobody inside during a scan.

What

Cost

Ruined by

Absorber

$750/sq ft

leaning, stacking

VNA port

$85k

cross-thread, over-torque, cable stress

Horn

$5k

dropping, wind-up

Cable

$1k

kinking, wind-up

A bad measurement costs you an afternoon; every row in that table costs the rig. Wind-up appears twice because it takes the cable and the horn together, and it is the failure this lab is most likely to cause.

Cable wind-up is the standing hazard, and it is slow. It does not announce itself until the cable is tight, and then it takes the cable, or the horn, or both. STOP preempts a move in progress and is live whenever the page is connected, which is why it sits in the tab header and not three scrolls down a settings panel. Confirm on the EMControl front panel that the axis is in non-continuous mode before any scan with a cable routed through the tower — continuous mode ignores the software limits entirely. Check the latched error line in the Turntable section while you are there; a fault the card is still holding from last period is worth knowing about before you commit 180 angles to it. Device Emulation on the front panel is not simulation and does not inhibit the motor.

The port is the expensive one, and the damage spreads. Start the threads by hand and square, tighten with the wrench rather than by feel, and turn the nut and not the cable body. A cross-threaded or over-torqued port is a bench repair on an eighty-five thousand dollar instrument, and the same damage transfers to the next connector it mates with — which on this rig is a calibration module. Side load at a connector is cable stress and is the slow version of the same failure, so nothing hangs off a port.

The horn is dropped and the cable is kinked — neither wears out. Two hands on a horn, support its weight while you mate it, never hang it from its own connector; and for the cable, respect the bend radius, no tight coils, and nothing routed where somebody will stand on it.

The absorber is priced by the square foot. The pyramids shed if you brush them and a crushed tip is a permanently worse quiet zone, so nobody leans on the walls and nothing gets rested on the floor pyramids. There is no repairing a tip; there is only buying more absorber.

The RF, for the record, is milliwatts. Nothing in this chamber will hurt you. Everything in it can be hurt by you.

Good Practice

  • Set the sweep, calibrate, verify, then measure.

  • Log all five sweep settings first.

  • Change one thing at a time.

  • Name every run before you start it.

And write down what you expect before you look. A prediction you committed to in writing is the only way a surprise can teach you anything; a prediction you made after seeing the answer is not a prediction.

What You Are Doing Today

  • Prove the range is long enough, with a tape measure.

  • Scan two principal planes from the dashboard, then a cross-pol cut.

  • Swap in the reference horn for gain.

  • Measure your own floor and quote it against everything.

Reciprocity means it does not matter which end transmits, so the source horn transmits and the antenna under test receives — the AUT is the thing that rotates, and you would rather not run transmit power through a rotary joint.

One instrument does both ends today. The chamber’s Copper Mountain VNA drives the source horn from port 1 and receives the AUT on port 2, so the quantity you record at every angle is \(S_{21}\) in dB: transmitted at one antenna, received at the other, ratioed against the source so the source’s own drift divides out. That is the same argument Lesson 9 made for trusting a ratioed measurement, now doing work on the range rather than at the connector.

The Chain and Its Failure Modes

Stage

Must do

Goes wrong as

VNA port 1

one stable sweep

a changed setting reads as pattern

Source horn

clean polarization

leaks into your cross-pol

Turntable

one centered axis

biased HPBW

VNA port 2

\(S_{21}\) per angle

unrecorded settings

The rig is fixed today, which removes a variable Lesson 9 left open: there is one chain, it is cabled, and it is the same one every section uses. What is left to you is the discipline — the settings you choose, the zero you define, and whether you wrote any of it down.

The chain is a loop rather than a line. The VNA is both the transmitter and the receiver, the two horns are the only things between its ports, and the positioner is a serial link the acquisition software drives in step with the sweep. Nothing in the chain is free-running: every angle is commanded, then confirmed, then measured. That is what makes the run file trustworthy, and it is why the file records both the angle asked for and the angle reported.

The Chamber and the Dashboard

  • One page drives the rig: sweep, turntable, scan.

  • Start scan and STOP sit in the tab header.

  • Every run writes pattern.csv and meta.json.

The strip along the bottom says what you are talking to: hardware or simulated, cal or uncal.

Open the address given in class. The settings sidebar is four sections — VNA, Turntable, Simulation, Output — and the plots carry five tabs: Pattern Measurement, VNA, Turntable, Sweep, Logs. A pattern needs the first and the last; Sweep is Lesson 10’s tab, and you will use it twice today.

You can have the whole dashboard on your own laptop before the period, with no instruments attached — one command brings up the service and the frontend together:

./start.sh --sim

The badge reads simulated and the service synthesizes a plausible array-factor pattern — a main lobe, decaying sidelobes, nulls floored around −45 dB — and simulates the tower slewing at a believable rate, so live position, progress and the stop button all have something real to exercise. A simulated sweep is not a pattern at all: it returns a mismatched load behind a length of line, which draws the arc a real one does on the Smith chart and has no resonance in it anywhere.

So rehearse the controls there, not the physics. Half an hour in simulation is the difference between a period spent measuring and a period spent finding buttons.

The Chamber Range

  • \(f = 2.45\ \text{GHz}\), so \(\lambda = 12.2\ \text{cm}\).

  • AUT: pyramidal horn, \(24 \times 17\ \text{cm}\), on the tower.

  • Reference: standard-gain horn, \(34 \times 25\ \text{cm}\), \(G_{\text{ref}} = 15.0\ \text{dBi}\).

  • Source fixed, AUT rotating, absorber everywhere else.

Measure the source-to-tower separation yourself with a tape and write it down; it is a property of the chamber, not of your run, and every geometry check below depends on it. The worked numbers that follow are for a 3.0 m range — redo them with the number you measured.

The chamber does for you what the absorber block did on a bench range, and more of it: the specular floor, wall and ceiling bounces are all absorbed rather than aimed away, which is why the chamber’s contribution shows up in your data as a floor rather than as a ripple you can locate. It does not make the range longer. The far-field criteria below are geometry, and no amount of absorber changes them.

Is the Range Far Enough?

\[\begin{split}\begin{aligned} D_\text{AUT} &= \sqrt{0.24^2 + 0.17^2} = 0.294\ \text{m} \\ 2D^2/\lambda &= 1.41\ \text{m}, \quad 5D = 1.47\ \text{m}, \quad 10\lambda = 1.22\ \text{m} \end{aligned}\end{split}\]
  • Use the aperture diagonal, not a side.

  • The binding criterion here is \(5D\), not \(2D^2/\lambda\).

  • The reference horn is the bigger antenna: \(D = 0.422\ \text{m}\), so it needs 2.91 m.

  • At 3.0 m that clears by 3%.

Run all three criteria on both antennas, not just \(2D^2/\lambda\) on the AUT. For a physically small antenna the aperture-phase rule is often not the one that decides, and here it is not. The reference sizes the range, and a 3% margin is the correct statement of where you stand: the gain comparison is the measurement sitting closest to the edge of the far field, and that belongs in your report.

Both antennas must be in each other’s far field, and both must see the same illumination. Set the heights with a tape, not by eye. A 5 cm height mismatch over a 3 m range is a 1° pointing error, which is small — but it is a bias, and biases do not average out over repeated sweeps.

Procedure — Set the Sweep

  1. VNA section: start, stop, Points, IF BW, Power.

  2. Parameter: S21 — source on port 1, AUT on port 2.

  3. Log all five before anything else.

Read the cal / uncal pill. An uncalibrated run is data, never an accident.

If you are calibrating today, the wizard’s Calibration dropdown wants the 2-port option: a pattern is a transmission measurement, and one-port correction would leave the through path uncorrected. Setting the sweep is the first step because everything else depends on it: a calibration belongs to a sweep, and changing span, points, IF bandwidth or power afterwards leaves the instrument interpolating a correction across a span it never measured. The panel says so when you do it — it flags the mismatch and the log warns again at the start of the run.

Two of those five numbers are yours to argue about. Points sets how finely you resolve frequency: 101 across 2 to 3 GHz is a 10 MHz grid, which is plenty for a horn and far too coarse for a narrowband element. IF bandwidth is the dynamic-range knob — narrowing it lowers the noise floor by about 10 dB per decade and costs you sweep time on every one of your angles, which is where a 72-angle run turns into a long one. Power is the other floor knob and the one with a limit: the amplifier chain and the receiver both have to stay linear.

The Calibrate… button opens a wizard, not a calibration. Running one means somebody walks into the chamber, unmates the horn and the AUT from the cable ends, mates the calibration module across them, and comes back out — so the modal states the sweep it will calibrate at, asks which reference plane you are calibrating, takes an acknowledgement, and reminds you to put the antennas back. That dropdown is Lesson 9’s reference-plane argument turned into a required field: nothing in the data afterwards distinguishes the cable ends from the instrument’s front panel, and the difference is every dB of cable loss in your pattern.

Procedure — Peak Up and Define Zero

  1. Jog ±1° and ±10°, taking a Sweep each time, until \(\vert S_{21} \vert\) peaks.

  2. Press Define here as 0°.

Every number you extract afterwards is measured from that zero. Set it once, and do not touch it again.

Peak on the frequency you care about, not on the broadest part of the band: set the Sweep tab’s Marker there and watch that one number as you jog.

Nothing on this dashboard shows a live trace while the tower is standing still. The VNA tab draws the sweep at the last measured angle, which during a scan is a running picture and between scans is history — so peaking up is jog, capture, read, repeat. Capture S11 + S21 while you do it and the same two sweeps tell you the antenna is still matched and the link is still there.

That is also your through check. Two minutes of it before you start is worth the time: a peak 20 dB lower than last period means a cable, a connector or a horn, and finding that out now costs two minutes rather than the length of a 180-angle scan.

Defining zero does not move anything — it renames where the axis is standing. The run file records both the angle the software commanded and the angle the card reported, and the difference between those two columns is your positioning error, available afterwards without any extra work. If they disagree by more than a small fraction of your step size, say so in the report rather than quietly using the commanded column.

Procedure — The Angle Grid

  1. From 0°, To 355°, Step 2°.

  2. The hint under the grid reads back the angle count. Check it.

  • Step \(\le\) HPBW/5 — but sidelobes are narrower than the beam.

  • A 40° beam allows 8°. Take 2°.

Coarse steps do not just add noise; they systematically miss peaks and nulls, and a sidelobe you stepped over is a sidelobe you cannot report. The cost is time: the axis spends far longer moving than the VNA spends sweeping, so the angle count, not the point count, is what sets the length of your period.

A full circle asked for as 0 to 360 would measure the start angle twice, so the grid stops one step short — 0 to 355 in 5° is 72 angles, and 0 to 358 in 2° is 180. Going all the way round is worth the time on this rig: the back half of the pattern is where the front-to-back ratio lives, and a ±180° cut taken as two halves has a seam in it.

Procedure — Measure Your Floor

  1. Unmate the AUT and terminate the cable end in \(50\ \Omega\).

  2. Sweep tab, Capture: S11 + S21. Press Sweep, and Export it.

That capture is the credibility of your whole data set. Take it before you scan.

Take it at the settings you are about to scan with, and not at whatever the panel happened to be holding. What the \(S_{21}\) trace records is everything that reaches port 2 when the antenna is not connected: receiver noise, and whatever leaks around the chamber through the cables. That is your instrument floor, and the exported file is the evidence of it.

The capture menu has no \(S_{21}\)-only entry — the four options are all four, \(S_{11}\) only, \(S_{11} + S_{21}\), and \(S_{22}\) only — so the pair costs two sweeps, and the second one hands you the terminated port’s own reflection as a free check that the termination is actually a termination.

There are two floors here and Lesson 9 named both. The instrument floor is the one you just measured. The chamber contributes the other, and you cannot measure it this way: with the AUT unmated nothing radiates, so the stray field has nothing to scatter. It shows up instead in the back half of a real cut, as a level that will not go deeper no matter how much you narrow the IF bandwidth. Whichever of the two is higher is the one you actually have.

Narrowing the IF bandwidth by a decade is the cheapest 10 dB in the building and is worth doing once as an experiment: take the floor run at two settings and watch it drop. Do it before you calibrate, because changing the IF bandwidth is exactly the change the calibration panel will warn you about.

Procedure — The Four Scans

  1. E-plane cut. Name the run for what it is.

  2. H-plane cut, by rotating both antennas 90°.

  3. Repeat one cut. The disagreement is your repeatability.

  4. Gain comparison: mount the reference horn. Change nothing else.

Two scans of the same cut that disagree by 1 dB have measured your uncertainty directly, which is far more reliable than propagating catalog tolerances. On step 13, “nothing else” means it: same sweep, same cables, same zero, same calibration.

On step 11, “both” matters as much as “nothing else” does on step 13. Roll only the AUT and the source is now crossed with it: the run you saved as the H-plane is the H-plane cross-pol cut, a weak, ragged circle near the floor. The four-cuts widget in Lesson 9 shows exactly this in its chamber view.

Name every run in the Output section before you start it. Left empty the service stamps the date and time, which is enough to keep the runs apart and useless for telling you which is which a week later. l11_eplane_aut, l11_eplane_repeat, l11_hplane_aut, l11_ref_horn costs you four seconds each and is the difference between a reduction session and an archaeology session. Anything in the Stored runs list reloads straight back into the plots, so a run you named is a run you can still use.

Procedure — Polarization

  1. Reinstall the AUT and rotate the source 90° about the range axis. Re-scan.

Rotate the source, not the AUT. Rotating the AUT would change the cut plane and the polarization at once, and you could not separate the two.

That scan is your cross-pol pattern, and it is the last acquisition of the period. Everything after this frame is reduction, and you can do it away from the chamber.

Reduction — One Scan, Every Frequency

  • Each angle stores the whole sweep, not one number.

  • The Cut freq selector replots the same run at any frequency in the span.

  • pattern.csv is long format: angle, frequency, real, imaginary, dB, phase.

A pattern is a function of frequency, and this is where that stops being a sentence and starts being a slider. Step the cut frequency across the band and watch the beam narrow and the sidelobe structure move. Quote the frequency on every plot you produce; a cut without one is not a measurement of anything.

The file gives you more than the dashboard plots. Both angle columns are there, so positioning error is recoverable; the real and imaginary parts are there, so phase is too, which matters in Module 3 when the thing you are measuring is an array and the interesting quantity is the phase across it. Reduce it in Python, one csv read and a reshape — the grid is angles \(\times\) frequencies and it is complete, with every angle present at every frequency.

Reduction — Normalize First

  • Subtract the peak from every sample.

  • Cable loss, source gain, and range loss all drop out.

  • Plot polar dB for shape, rectangular dB for values.

Never plot pattern data linear. A −13 dB sidelobe is 5% of peak and disappears.

The dashboard’s Normalize toggle does this on screen for you. Do it again in your own reduction rather than trusting the screenshot, because the number you subtracted is one of the things your report has to state.

Reduction — Four Numbers from the Shape

Quantity

Read it as

Sanity

HPBW

the −3 dB crossings

vs. \(26000/(\theta_E \theta_H)\)

First sidelobe

first lobe past the null

−13 to −25 dB

Front-to-back

peak minus 180°

15 to 25 dB

Null depth

minimum between lobes

floor-limited

Interpolate between samples for the −3 dB crossings. Snapping to the nearest grid point throws away most of the precision your 2° step bought you.

Worked example, one E-plane cut. The peak reads −35.6 dB at 0°, so the −3 dB level is −38.6 dB. Interpolating between samples puts the crossings at −19.8° and +20.2°:

\[\theta_\text{HP} = 20.2 - (-19.8) = 40.0^\circ\]

The first sidelobe peaks at −51.4 dB, and the level at 180° is −54.0 dB:

\[\begin{split}\begin{aligned} \text{SLL} &= -51.4 - (-35.6) = -15.8\ \text{dB} \\ \text{F/B} &= -35.6 - (-54.0) = 18.4\ \text{dB} \end{aligned}\end{split}\]

Cross-check the beamwidths against the gain: with an H-plane HPBW of 42°, \(26000/(40 \times 42) = 15.5\), or 11.9 dBi.

Reduction — Gain and XPD

\[\begin{split}\begin{aligned} G_{\text{AUT}} &= G_{\text{ref}} + \left( P_{\text{AUT}} - P_{\text{ref}} \right) = 15.0 - 3.2 = 11.8\ \text{dBi} \\ \text{XPD} &= -35.6 - (-59.9) = 24.3\ \text{dB} \end{aligned}\end{split}\]
  • Gain by comparison is one subtraction in dB.

  • A healthy linear antenna gives 20 to 30 dB of XPD.

Both levels are peak \(\vert S_{21}\vert\) in dB at the same cut frequency, one run each, and everything the two runs have in common subtracts out. The aperture formula with \(\eta_{\text{ap}} = 0.5\) predicts 12.3 dBi, so the measurement is 0.5 dB low — and the reference horn’s own calibration is good to about 0.5 dB. That is agreement, and your report should state it as agreement rather than assign it a physical cause. Below about 15 dB of XPD, check the mount alignment before blaming the antenna.

Reduction — Against the Simulation

  • Simulation section: import the pattern CSV your solver wrote in Lesson 8.

  • Both traces are normalized to their own peak, so dBi and \(S_{21}\) compare.

  • Rotate takes out a known mount offset. The footer reports RMS deviation.

This is the first time in the course that a predicted pattern and a measured one are on the same axes, and the number in the footer is the whole argument of Module 2 in one readout. Import your own model, not somebody else’s.

The comparison is clamped 30 dB below the peak before differencing, which matters more than it sounds. Nulls are where a model and a measurement disagree most and where the disagreement means least — a null one degree off its predicted angle differences to tens of dB against a neighboring lobe. Un-clamped, the RMS would report null alignment rather than pattern agreement.

Parsing happens in the browser, so nothing is uploaded and the service never learns a comparison is running. If the RMS comes back large, check Rotate before you check the physics: a mount offset is a rigid shift of the whole curve and it is the most common reason a good model disagrees with a good measurement.

How Much of Your Pattern Is Real

Work your own numbers first: a peak at −35.6 dB against a floor of −78 dB on the terminated run is a dynamic range of 42.4 dB. Any feature within a few dB of −42.4 dB relative is a measurement of your receiver, not of your antenna.

The widget makes the effect concrete. It takes a known pattern — a uniform \(8\lambda\) aperture, first sidelobe exactly −13.3 dB, HPBW 6.3° — and “measures” it through a receiver with the dynamic range you choose. Drag the floor from −45 dB up toward −15 dB and watch the three readouts separately: the beamwidth barely moves, the first sidelobe creeps upward by about a dB as the noise adds to it, and the nulls stop dead at the floor. Each readout shows the measured figure against the true one, and the null cell reads true / measured in that order. Then switch averaging from 1 sweep to 16 and notice what averaging does and does not buy you.

What to Trust, in Order

  • Beamwidth is measured 3 dB down, far above any practical floor. Trust it first.

  • Sidelobes are conditional. Quote the floor next to every one.

  • Nulls measure your floor. Report them as lower bounds.

A lobe 10 dB above the floor reads about 0.4 dB high; a lobe 3 dB above the floor reads 3 dB high and is nearly meaningless. Averaging smooths the fuzz — incoherent power averaging shrinks the variance like \(1/N\) — but it leaves the mean noise power exactly where it was. To lower the floor you need more power, a narrower IF bandwidth, or a quieter receiver.

The Rest of the Uncertainty Budget

Source

Looks like

Size

Chamber stray field

fills the back lobes

sets the floor

Cable flex

drift between scans

0.2 to 0.5 dB

Misalignment

peak low, HPBW biased

0.2 dB

Reference tolerance

offset on every gain

0.3 to 0.5 dB

Each leaves a recognizable signature. Cable flex is the one this rig makes easy to check: repeat a cut without touching anything and difference the two, and what you see is drift plus noise and nothing else.

A fifth entry belongs in the budget on any run the panel flags, and it is not a small one. A calibration is only meaningful at the sweep it was taken at, and a run set up at a different span, point count, IF bandwidth or power is flagged in the VNA section and warned about in the log. Correction interpolated across a span it never measured is a plausible-looking answer of unknown quality, and “the dashboard warned me and I scanned anyway” is not a sentence you want in a report.

Deliverables

  1. Two principal-plane cuts, polar dB, normalized, labeled.

  2. An extracted table, with an uncertainty on every row.

  3. Your floor, as a level and a dynamic range.

  4. A comparison against prediction, discrepancies named.

In detail:

  1. Two principal-plane cuts (E-plane and H-plane), plotted in polar dB, normalized to the peak, with the angle convention and the cut frequency labeled on each.

  2. An extracted table — HPBW, first sidelobe level, front-to-back ratio, gain, XPD — with an uncertainty estimate on every row. Your repeated scan from step 12 is the basis for most of them.

  3. Your measured floor, stated as a level and as a dynamic range, with one sentence per table row saying whether that number clears the floor and by how much.

  4. A comparison against prediction — your Lesson 8 model overlaid, with the RMS deviation quoted, plus the aperture-formula gain and the \(26000/(\theta_E \theta_H)\) beamwidth cross-check — with every discrepancy larger than your uncertainty named and explained.

Quote the run names for every figure, and state the calibration and mode your runs were taken under; both are written into each run’s meta.json and neither is recoverable afterwards from the pattern alone. A 2 dB gap with a named cause is a better report than a 0.2 dB gap with no discussion.

The Range Card

At the chamber

What to do

Number to remember

Check geometry

all three criteria, both antennas

the reference sizes the range

Set the sweep

span, points, IF BW, power, \(S_{21}\)

log all five before calibrating

Check the pill

cal or uncal, before the scan

an uncal run is data, not an accident

Peak up

jog, then define here as 0°

every number is measured from it

Angle step

resolve beam and sidelobes

step \(\le\) HPBW/5, use 2°

Floor

terminate port 2, one capture

42 dB dynamic range on this rig

Normalize

dB down from the peak

never plot linear

HPBW

interpolate the −3 dB crossings

robust, trust it first

Gain

\(G_{\text{ref}} + (P_{\text{AUT}} - P_{\text{ref}})\)

accuracy = reference + alignment

XPD

co-pol minus cross-pol at boresight

20 to 30 dB is healthy

Where This Is Going

  • This lab is the dress rehearsal for the midterm, due 2 Oct.

  • Same chamber, same extraction, same uncertainty discussion.

  • With a written analysis, and no procedure handed to you.

Mistakes made today carry no grade penalty; the same mistakes in the graded project do. You now have nine lessons of chamber access before the project is due, which is the reason the measurement block was pulled forward to sit here.

Lessons 12 to 14 go back to antenna families — loops and monopoles, patches and slots and horns, reflectors and Yagis — and every gain figure in them is now a claim you know how to check. Several of those antennas are defensible choices for your project, and you will be reading their published patterns with a measurer’s eye rather than a reader’s.