Demo — AoA Accuracy Explorer#
A phase interferometer turns the wavefront’s tilt into a bearing. Stretch the baseline and the bearing sharpens — but past a half-wavelength the pair can no longer guarantee an unambiguous read across the whole field of regard, and once the phase actually runs past \(\pm\pi\) the naive estimate snaps to a confidently wrong angle. This demo runs a two-baseline array: a short pair fixed at \(\lambda/2\) and a long pair on the slider. It shows all three answers at once — the short pair’s coarse bearing, the long pair’s naive (possibly wrapped) bearing, and the resolved bearing that uses the first to unwrap the second.
The relation#
A phase meter only reads \(\Delta\phi\) modulo \(2\pi\), so unambiguous coverage across \(\pm 90^\circ\) requires \(d \le \lambda/2\) — a short, coarse baseline. The escape is to carry both lengths, and let the short pair say which cycle the long pair is sitting in:
where \(\Delta\phi_{\text{pred}} = \frac{2\pi d_L}{\lambda}\sin\theta_{\text{short}}\) is the full phase the coarse bearing predicts for the long pair. The demo reports \(n\), so you can watch the cycle count step.
Interactive demo#
Walkthrough#
Start short. On the d = λ/2 preset the long pair is the same length as the short pair, the ambiguity card is green, and all three bearings agree — coarsely. Drop the SNR and every estimate wanders together: with no baseline advantage there is no precision to be had.
Stretch the baseline. Raise \(d\) and the resolved bearing tightens against the same noise, because a fixed phase error maps to a smaller angle error as \(d/\lambda\) grows. The short pair’s row does not improve — it never can.
Cross the half-wavelength. Past \(d = \lambda/2\) the card turns red. Read that flag as a guarantee lapsing, not as an error appearing: it says a lone long pair can no longer be unambiguous over the full \(\pm 90^\circ\). At the default \(\theta = 20^\circ\) the naive row stays correct until the true phase actually crosses \(\pm\pi\), which takes \(d > \lambda/(2\sin\theta) \approx 4.4\) cm at 10 GHz. Slide \(\theta\) toward \(\pm 90^\circ\) and the same break arrives at a shorter baseline.
Watch the wrap, then the repair. The stretch d preset puts \(d\) at \(2.5\lambda\), well past the break. On the phase plot the navy curve (long pair) now runs far outside the ±π limits while the blue curve (short pair) never leaves them — that contrast is the ambiguity problem. The receiver reads the long pair folded back inside, so the naive row jumps tens of degrees. The resolved row does not: the cycle readout steps to \(n = +1\), that whole turn of phase is added back, and the fine bearing lands within a few tenths of a degree.
Read the polar plot. Four rays, longest to shortest: navy truth, green resolved, red naive, blue short pair. Green riding just inside navy while red swings away is the lesson in one picture — and the blue ray sitting visibly off truth is why you still cannot throw the short pair away.
Break the resolution. Push the SNR to 0 dB with a very long baseline. The short pair’s bearing is now so noisy that it picks the wrong cycle, and the resolved row follows it off a cliff. The unwrap is only ever as good as the coarse bearing feeding it — which is why real arrays carry several baselines of graded length rather than just two.
Key observations#
Accuracy wants a long baseline; unambiguity wants a short one. No single pair gives both — the ambiguity card is a statement about the lone long pair, and it stays red even when the resolved answer is correct.
Multi-baseline buys both — the short pair picks the \(2\pi\) cycle, the long pair sets the precision. That is what the cycle readout \(n\) is counting, and it is the same arithmetic the companion script prints.
The short pair earns its place by never wrapping, not by being accurate. It is the worst of the three bearings on the display, and the array does not work without it.
Amplitude comparison never wraps because it reads a monotone power ratio, not a periodic phase — it trades that safety for poor accuracy.
Source#
MATLAB bundle · L13_InterferometricAoA.m↓
The companion script runs the same two-baseline pipeline as printed numbers — a short pair at \(\lambda/2\) and a long pair at \(4\lambda\), the long one wrapping and the short one unwrapping it into a fine, correct bearing — so you can read the arithmetic the demo animates.