Skip to content

Field II Correspondence

eSDIva deliberately mirrors Field II's conventions so a Field II user can transition (and cross-validate) with minimal friction. This page collects the correspondences in one place.

Transducer classes ↔ xdc_* functions

Field II eSDIva z-datum
xdc_linear_array LinearArrayTransducer flat face at z = 0
xdc_focused_array LinearArrayTransducer(elevation_focus_mm=...) element face (rim) at z = 0, lens dished back to −sag
xdc_convex_array ConvexArrayTransducer centre element at z = 0, arc centre at z = −R
xdc_convex_focused_array ConvexArrayTransducer(elevation_focus_mm=...) as above + rim-referenced lens
xdc_2d_array / xdc_rectangles MatrixArrayTransducer flat face at z = 0
xdc_piston FlatCircularTransducer face at z = 0
xdc_concave ConcaveCircularTransducer apex at z = 0, rim at z = +sag
— (convex bowl) ConvexCircularTransducer apex at z = 0, rim at z = −sag
xdc_focused_array (1 element, cylindrical lens) FocusedCircularTransducer face (curved-axis rim) at z = 0, centre line at −sag
any Th via xdc_get(Th, 'all') from_fieldii_xdc_dataFieldIITransducer as exported
any Th via xdc_get(Th, 'rect') from_fieldii_rect_dataFieldIITransducer as exported

sag = R − √(R² − (D/2)²) in every case.

Lens tiles of the native lensed arrays are sampled equal-arc in the lens angle θ (nodes at y = R·sin θ), exactly matching Field II's tiling of xdc_focused_array.

Simulation calls

Field II eSDIva
calc_h Emission(tx) — pulsed mode (returns ρ₀·h; identical arrays at rho=1)
calc_hp Emission(tx, fs=..., excitation=e) with xdc_impulsetx.set_impulse_response
calc_scat Reception(tx, rx).scan_focusline(...) (focused, apodized, summed on receive)
calc_hhp / calc_scat (unit point) Reception(tx, rx).pulse_echo_rf(...) per-element RF
calc_scat_all Reception(tx, rx).synthetic_aperture_rf(...) (FMC)

The pulse-echo derivative convention is shared: the physical ∂³v/∂t³ is carried by the band-limited excitation and TX/RX impulse responses — neither simulator applies an explicit derivative, so calc_scat for a unit point equals calc_hhp and eSDIva's RF coincides with both (correlation ≈ 1.0000).

Time origin (t0)

Field II reports absolute time from the excitation start. eSDIva returns each result with coords["t0"], referenced to the beam axis: the TX (and RX) focusing bulk delays.max() is subtracted so downstream beamforming needs no per-line correction.

For a lens-focused aperture, eSDIva's time grid is referenced to the first-arriving rim, but the focused elevation echo peaks one lens transit later; reception therefore adds elevation_lens_sag / c once per aperture (TX and RX). With this, a native elevation-focused linear array matches Field II pulse-echo RF at lag 0.

Imported probes: the lens curvature is already in the imported patches (the RF shape matches without help), but the t0 transit correction needs the lens focal length — pass elevation_focus_mm= (the Field II Rfocus) to from_fieldii_xdc_data / FieldIITransducer, or set tx.elevation_lens_sag (metres) directly.

Amplitude scale

eSDIva scales the pulse-echo RF by ρ₀ / 2c₀² (the physical scattering prefactor); Field II uses approximately ρ₀ / 2. For a unit-amplitude scatterer the raw RF amplitudes therefore differ by a factor c₀² (≈ 2.37 × 10⁶ at 1540 m/s). Normalised comparisons (envelope / peak, PSF, correlation) are unaffected.

Units

Field II is SI everywhere (metres, seconds). eSDIva's user-facing API is mm (_mm suffixes) with SI internals — the one deliberate departure. FieldIITransducer takes its patch geometry in metres, exactly as exported by xdc_get.