tb_beamform_delay_sum — 2D typed op

• Data kinds: beatcube → signal

• Call: fullseye.apply(img, "tb_beamform_delay_sum", a=0.5, b=0.5) (2-D model = एक image + दो scalar knobs a,b∈[0,1])

tb_beamform_delay_sum: input → output

*Figure synthetic 128×128 input पर सच में चलाकर मिला output है। बाईं ओर input, दाईं ओर output। Point clouds ऊपर से देखे गए scatter के रूप में (brightness = z), 1-D series line के रूप में, volumes z दिशा में maximum-intensity projection के रूप में, videos बीच के frame के रूप में, complex images amplitude के रूप में, और जो return values चित्र नहीं बन सकते वे स्वयं values के रूप में दिखाए जाते हैं।*

Knob a को बदलकर (0.1 / 0.5 / 0.9, दूसरा knob default पर):

▸ tb_beamform_delay_sum: knob a को बदलने का figure (docs site)

*Knob b output नहीं बदलता (मापा गया: 0.1 / 0.5 / 0.9 पर एक जैसा)।*

Stages (पहले आने वाले ops → यह op, बाएँ से क्रम में):

▸ tb_beamform_delay_sum: stages का figure (docs site)

दूसरी images पर भी (synthetic scene / photo / coins। ऊपर की row में inputs, नीचे की row में उनके outputs। Knobs default पर):

▸ tb_beamform_delay_sum: दूसरी images पर output (docs site)

उपयोग

एक 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.

Typed bridge of the rangedoppler op beamform_delay_sum into the 2-D evolution registry: the same implementation, called under the op(v, a, b) convention. a drives wavelength_m (default 0.0038934); b is unused.

संदर्भ (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 के स्रोत।

Studio में आज़माएँ

नीचे का program सच में चलता है, यह जाँचा गया है (figure वाला ही input)। Studio की help में यह block buttons बन जाता है, जिनसे इसे वहीं load करके चलाया जा सकता है।

img_to_beatcube 0.50 0.50
tb_beamform_delay_sum 0.50 0.50

▸ यह pipeline load करें  ·  Load करके चलाएँ

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

नीचे के उदाहरण मूल ledger op beamform_delay_sum को call करते हैं। यह bridge op वही implementation है, बस fn(v, a, b) convention के अनुसार ढाला गया है, इसलिए व्यवहार वैसा ही लागू होता है (केवल 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 के रूप में लेते हैं)

identity · tb_create_funct_1d_array · tb_smooth_funct_1d_gauss · tb_smooth_funct_1d_mean · tb_derivate_funct_1d · tb_integrate_funct_1d · tb_zero_crossings_funct_1d · tb_abs_funct_1d

इसी category के (typed)

tb_points_to_voxel · tb_estimate_point_normals · tb_iss_keypoints · tb_project_points · tb_render_point_depth · tb_statistical_outlier_removal · tb_radius_outlier_removal · tb_voxel_grid_downsample


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

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