beamform_delay_sum — RANGEDOPPLER beamform op

• Data kinds: beatcube → signal

• Call: import fullseye as fs; fs.ledger.beamform_delay_sum(cube, wavelength_m=0.0038934, element_spacing_m=None, angles_deg=None, range_bin=None, doppler_bin=None, normalize=False) (implementation को सीधे call करना हो तो import rangedoppler; rangedoppler.beamform_delay_sum(cube, wavelength_m=0.0038934, element_spacing_m=None, angles_deg=None, range_bin=None, doppler_bin=None, normalize=False), registry से लेना हो तो opsrangedoppler.get("beamform_delay_sum"))

उपयोग

एक range-Doppler cell के लिए delay-and-sum (Bartlett) angle spectrum।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

Takes the per-antenna complex value at a single range-Doppler cell — by default the strongest one — and for each steering angle removes the expected inter-element phase and sums:

P(theta) = |sum_k conj(exp(1j*2*pi*d*k*sin(theta)/lambda)) * x_k|^2

which peaks at the true arrival angle with value (N_a * |a|)^2: the aperture gives N_a in amplitude, N_a^2 in power. That is the exact ground truth the tests pin. Measured with 8 elements: the peak power is bit-exactly (N_a*N_c*N_s)^2 = 268435456 (relative error 0.0), and sweeping the true angle from -80 to +80 degrees in 5-degree steps (33 cases) the reported angle matches the truth with a maximum error of 0.0 degrees.

The steering grid defaults to arange(-90, 90.5, 1.0). normalize=True divides by N_a^2 * N_c^2 * N_s^2 so that a unit-amplitude bin-centred target peaks at 1.0.

Returns a 1-D float64 array of powers, one per grid angle — a plain signal,

so dsp's find_peaks and funct1d's smoothing apply to it.

Use beamform_doa if you want the angles themselves.

*range_bin* is a plain 0..N_s-1 index; *doppler_bin* is the signed velocity bin, the same convention range_doppler_peaks reports, so a detection can be handed straight back in. Both or neither — half a cell address raises rather than quietly beamforming the strongest cell instead.

Raises ValueError: no aperture — either a single element, or many elements packed into under ~0.28 wavelengths. In both cases the spectrum is flat to within float noise and argmax returns the first grid angle, i.e. a confident report of -90 degrees that is pure tie-breaking (measured: 8 elements at 1e-12 m spacing gave a peak-to-trough spread of exactly 0.0 and reported -90.0). Also: an all-zero cube or an all-zero selected cell; only one of *range_bin* / *doppler_bin*; an out-of-bounds bin index; an angle grid outside [-90, 90]; an FFT that overflows to NaN; plus the usual cube and scalar refusals.

उपयोग की विस्तृत guide

• fmcw_range_doppler family guide

संदर्भ (sample data, साहित्य)

• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।

• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।

• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• fmcw_range_doppler — py -3.11 examples/fmcw_range_doppler.py

• poc_multibeam_bathymetry — py -3.11 examples/poc_multibeam_bathymetry.py

वे अगले ops जिनसे type जुड़ता है (signal को input के रूप में लेते हैं)

—

इसी category के (beamform)

beamform_doa


*Provenance: rangedoppler.py — RANGEDOPPLER operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.