Beam pattern × scene integration#
The closed-form beam-broadening width
\(\sigma_\mathrm{beam} = |\mathbf{u}_h|\,\theta_b / (2\sqrt{2\ln 2})\)
[Doviak and Zrnić, 1993] assumes every scatterer inside the beam sees
the same reflectivity and the same wind — a uniform resolution
volume. When the scene is not uniform (deep convection with
sub-beam-scale reflectivity cells, strong shear across the beam, a
scanning antenna over a horizontally-structured storm), the closed
form breaks and you have to integrate the beam pattern against the
scene explicitly. That is what rustmatrix.spectra.beam does.
What goes wrong with closed-form \(\sigma_\mathrm{beam}\)#
The Doviak–Zrnić result assumes
a Gaussian beam pattern \(G(\theta)\) of angular full-width-half- maximum \(\theta_b\),
a spatially uniform radar reflectivity and PSD inside the beam,
a single horizontal wind \(\mathbf{u}_h\) across the beam,
and then derives the Doppler-width contribution from the in-beam distribution of line-of-sight velocities as a closed-form Gaussian.
If any of the three assumptions fails, the measured spectrum is not \(\mathcal{N}(w, \sigma_t^2 + \sigma_\mathrm{beam}^2)\); it’s a \(G\)-weighted mixture of different reflectivities and velocities. The wind × turbulence sensitivity tutorial shows closed- form \(\sigma_\mathrm{beam}\) agreeing with the explicit integration under uniform conditions; the beam × scene tutorial shows the case where it fails.
The integration#
For a beam pointing in direction \(\hat{\mathbf{n}}\) with angular pattern \(G(\theta)\), and a scene with reflectivity field \(Z(\mathbf{x})\) and wind field \(\mathbf{u}(\mathbf{x})\), the received spectrum at Doppler velocity \(v\) is
with \(\mathcal{K}\) the turbulence + fall-speed kernel at each beam
angle. rustmatrix.spectra.beam discretises the beam angles on a
Gauss–Legendre grid, evaluates the scene at each angle, runs the
per-angle spectrum through SpectralIntegrator, and sums weighted
by \(G^2\).
Beam patterns#
Two patterns are built in:
GaussianBeam(theta_b, ...)— the classic Gaussian analytic pattern, matched in FWHM totheta_b. Sensible default.AiryBeam(theta_b, ...)— the diffraction pattern from a circular aperture; has non-zero side-lobes.TabulatedBeam(theta, gain)— wrap a measured antenna pattern as a 1-D (angle, gain) table.
Scene shortcuts#
Building a full 3-D reflectivity + wind scene is tedious. For the
common case of vertically pointing radars over a 2-D horizontal
reflectivity map, spectra.beam ships helpers:
marshall_palmer_scene(Z_map, N0=8000)— turn a dBZ map into a per-pixel Marshall–Palmer PSD.convective_cell_scene(...)— parameterised Gaussian cells for sensitivity studies; the NB14 tutorial drives an interactive slider over cell spacing.
When to reach for this#
Use spectra.beam when any of:
your beam covers horizontally-structured reflectivity (convective cells, stratiform-convective transition, the edge of a storm);
you have strong shear across the beam (upper-level jets, gust fronts, scanning geometries with large azimuth steps);
you need to reproduce a measured antenna side-lobe contamination signature.
For uniform stratiform rain with a narrow beam, the closed-form
\(\sigma_\mathrm{beam}\) in SpectralIntegrator is faster and
sufficient.
Further reading#
NB13 — wind × turbulence sensitivity validates the closed form against explicit integration in its regime of validity.
NB14 — beam × scene shows the breakdown in convective scenes.
[Doviak and Zrnić, 1993], chapter 7 — for the beam-pattern mathematics behind the implementation.