Skip to content

Multi-element Transducers

Arrays of independently driven elements — electronic steering and focusing via per-element delays and apodization. See the Transducers API and Example 3 — Multi-element 3-D.

Linear array Convex array
Matrix array Custom array

Radiated pressure fields for these arrays live in the Emission guide.

At a glance

Type Layout Steering
LinearArrayTransducer 1-D row along X Lateral + depth (XZ)
ConvexArrayTransducer Elements on convex arc Wide-angle sector
MatrixArrayTransducer 2-D grid of elements Full 3-D volumetric
CustomTransducer Arbitrary positions Per-element definition

Basic usage

from esdiva.transducers import LinearArrayTransducer

tx = LinearArrayTransducer(
    n_elements=64,
    element_width_mm=0.25,
    element_height_mm=12.0,
    kerf_mm=0.05,
    no_sub_x=2,
    no_sub_y=4,
    frequency_Hz=5e6,
)

# Focus at (x=0, y=0, z=30 mm)
tx.compute_delays(focus_mm=[0, 0, 30])
tx.compute_apodization(focus_mm=[0, 0, 30], FoverD=2.0)

Delays and apodization can be recomputed for any focal point without recreating the transducer object.

Elevation lens

A linear array focuses electronically in the imaging plane but not in elevation — the out-of-plane direction the image cannot show. Real probes add an acoustic lens; eSDIva models it as geometry, curving each element's patches onto a cylindrical arc when you pass elevation_focus_mm.

tx = LinearArrayTransducer(
    n_elements=64, element_width_mm=0.108, element_height_mm=4.0,
    kerf_mm=0.002, no_sub_x=1, no_sub_y=6,
    elevation_focus_mm=12.0,          # RADIUS of curvature (not the focal depth)
    frequency_Hz=12.5e6,
)
tx.elevation_focus_depth_mm     # 11.832 mm — where it actually focuses
tx.elevation_lens_sag           # +1.678e-4 m, signed

no_sub_y must be ≥ 2, or there are no patches to put on the curve.

elevation_focus_mm is a radius, like focus_mm on the circular transducers

It is the lens radius of curvature (the datasheet value, the Field II xdc_focused_array Rfocus), not the depth the beam converges at. The lens face sits at z = 0, so the arc's centre of curvature — the point every patch is equidistant from, i.e. the true line focus — is one sagitta h²/(8R) shallower than R (0.17 mm for a 4 mm aperture at R = 12 mm). Read the real depth from elevation_focus_depth_mm. The mono-element focus_mm is the same radius convention, but there the apex is the datum, so focus and radius coincide.

Sign — concave or convex. Positive curves the surface away from the medium (concave, converging: an ordinary lens). Negative bulges it into the medium (convex, diverging), spreading the elevation beam; its focus is virtual and elevation_focus_depth_mm is then negative. A flat aperture returns inf.

Why it matters for measurements. The elevation beam at the focus is ≈ λ·z/H wide — 0.36 mm for a 4 mm aperture at 12 mm, vs 1.7 mm unfocused at 22 mm. Any quantity averaged over the resolution cell inherits that width: a Doppler velocity is the power-weighted mean over the cell, so an unfocused elevation aperture reads a vessel comparable to the beam as slower than it is. See Flow Simulation.

The time origin already accounts for the curve

The curved surface sits off the z = 0 plane the beamformer measures depth from, so reception subtracts the signed sag (once per aperture) from coords["t0"]. Nothing to do at the call site — a point target lands at its true depth for flat, concave and convex apertures alike. Emission needs no such term: its t0 is a physical origin, not a beamforming reference.