TXDELAY Transmit delays for a uniform linear array
TXDELAY returns the transmit time delays for focused, plane or circular beam patterns with a linear or convex array.
Contents
- Syntax
- The structure PARAM
- Notes
- Uniform linear array (ULA)
- Diverging wave, plane wave, virtual source
- Example #1: Focused pressure field with a phased-array transducer
- Example #2: Diverging wave with a phased-array transducer
- Example #3: Plane wave with a linear array
- Example #4: Multi-line transmit (MLT) with a phased-array
- See also
- About the author
- Date modified
Syntax
DELAYS = TXDELAY(X0,Z0,PARAM) returns the transmit time delays which must be used to generate a pressure field focused at the point (x0,z0). Note: If z0 is negative, then the point (x0,z0) is a virtual source (i.e. emission of circular waves). The properties of the medium and uniform linear array must be given in the structure PARAM (see below).
DELAYS = TXDELAY(PARAM,TILT) returns the transmit time delays which must be used to get a tilted plane wave. TILT is the tilt angle, i.e the angle between the emission axis and Z-vertical axis.
DELAYS = TXDELAY(PARAM,TILT,WIDTH) yields the transmit time delays necessary for creating a circular wave. The sector enclosed by the circular waves is characterized by the angular width and tilt. TILT represents the sector tilt, WIDTH is the sector width (both in radians). This option is not available for a convex array.
X0, Z0, TILT and WIDTH can be vectors. In that case, DELAYS is a matrix whose rows contain the different delay laws.
[DELAYS,PARAM] = TXDELAY(...) updates the PARAM structure parameters including the default values. PARAM will also include PARAM.TXdelay which is equal to DELAYS (in s).
[...] = TXDELAY (no input parameter) runs an interactive example simulating a focused pressure field generated by a 2.7 MHz phased array. The user must choose the focus position.
Units: X0 and Z0 must be in m; TILT and WIDTH must be in rad. DELAYS are in s.
The structure PARAM
PARAM is a structure which must contain the following fields:
- PARAM.pitch: pitch of the linear array (in m, required)
- PARAM.Nelements: number of elements in the transducer array (required)
- PARAM.c: longitudinal velocity (in m/s, default = 1540 m/s)
Notes
- NOTE #1: X- and Z-axes
The X axis is PARALLEL to the transducer and points from the first (leftmost) element to the last (rightmost) element (X = 0 at the CENTER of the transducer).
The Z axis is PERPENDICULAR to the transducer and points downward (Z = 0 at the level of the transducer, Z increases as depth increases). See the figure below.
For a convex array, the X axis is parallel to the chord and Z = 0 at the level of the chord.
- NOTE #2: TILT angle
TILT describes the tilt angle in the trigonometric direction. See the second figure.
- NOTE #3: cardiac phased-array
A cardiac phased-array is also a uniform linear array!
Uniform linear array (ULA)
The pitch is defined as the center-to-center distance between two adjacent elements. It is constant for a uniform linear array (ULA).
Diverging wave, plane wave, virtual source
The two angles that define a diverging (circular) wave transmit are illustrated in the following figure.
represents the width angle.
is the tilt angle.
is the width of the array aperture, i.e. the center-to-center distance from the first to the last element of the linear array.
If the array has elements, and if
stands for the pitch, then:
The coordinates of the virtual source are given by:
A diverging wave becomes a -tilted plane wave when
.
Example #1: Focused pressure field with a phased-array transducer
This example shows how to generate the transmit delays to obtain a focused pressure field with a phased-array transducer.
Download the properties of a 2.7-MHz 64-element cardiac phased array in a structure param by using GETPARAM.
param = getparam('P4-2v');
Choose a focus location at xf = 2 cm, zf = 5 cm.
xf = 2e-2; zf = 5e-2; % focus position (in m)
Obtain the corresponding transmit time delays (in s).
txdel = txdelay(xf,zf,param); % in s
Display the transmit delays in microseconds.
bar(txdel*1e6) xlabel('Element number') ylabel('Delays (\mus)') title('TX delays for a field focused at \{2;5\} cm') axis tight square

Check the pressure field by using PFIELD.
First define an image grid.
x = linspace(-4e-2,4e-2,200); % in m z = linspace(0,10e-2,200); % in m [x,z] = meshgrid(x,z);
The function PFIELD yields the root-mean-square (RMS) pressure field.
P = pfield(x,z,txdel,param);
Display the acoustic pressure field.
imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P/max(P,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal tight xlabel('x (cm)'), ylabel('z (cm)') title('Focused wave - RMS pressure field') hold on plot(xf*1e2,zf*1e2,'bo','MarkerFaceColor','b') legend('focus point','Location','South') hold off

Example #2: Diverging wave with a phased-array transducer
This example shows how to generate the transmit delays to obtain a diverging wave with a phased-array transducer.
Download the properties of a 2.7-MHz 64-element cardiac phased array in a structure param by using GETPARAM.
param = getparam('P4-2v');
Calculate the transmit delays to generate a 60-degrees wide circular wave steered at +10 degrees.
width = 60/180*pi; % width angle in rad tilt = 10/180*pi; % tilt angle in rad txdel = txdelay(param,tilt,width); % in s
Display the delays.
bar(txdel*1e6) xlabel('Element number') ylabel('Delays (\mus)') title('TX delays for a 60{\circ}-wide +10{\circ}-tilted wave') axis tight square

Alternatively, the transmit delays can also be calculated by defining a virtual source.
p = param.pitch; % pitch (in m) L = (param.Nelements-1)*p; % array width (in m) x0 = -L/2*sin(2*tilt)/sin(2*width); % in m z0 = -L/2*(cos(width)+cos(2*tilt))/sin(2*width); % in m txdel = txdelay(x0,z0,param); % in s bar(txdel*1e6,'r') xlabel('Element number') ylabel('Delays (\mus)') title('TX delays for a virtual source at \{0.37,-1.57\} cm') axis tight square

Display the resulting pressure field by using PFIELD.
First define the image grid.
x = linspace(-4e-2,4e-2,200); % in m z = linspace(0,10e-2,200); % in m [x,z] = meshgrid(x,z);
The function PFIELD yields the root-mean-square (RMS) pressure field.
P = pfield(x,z,txdel,param);
Display the acoustic pressure field.
imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P/max(P,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal tight xlabel('x (cm)'), ylabel('z (cm)') title('Diverging wave - RMS pressure field') hold on plot(x0*1e2,z0*1e2,'bo','MarkerFaceColor','b') legend('virtual source','Location','South') hold off

Example #3: Plane wave with a linear array
This example shows how to generate the transmit delays to obtain a plane wave with a linear transducer.
Download the properties of a 7.6-MHz 128-element uniform linear array in a structure param by using GETPARAM.
param = getparam('L11-5v');
Calculate the transmit delays for a plane wave steered at +10 degrees
tilt = 10/180*pi; % tilt angle in rad txdel = txdelay(param,tilt); % in s
Display the transmit delays.
bar(txdel*1e6) xlabel('Element number') ylabel('Delays (\mus)') title('TX delays for a +10{\circ}-tilted plane wave') axis tight square

Use PFIELD to simulate the pressure field.
First define the image grid.
x = linspace(-5e-2,5e-2,200); % in m z = linspace(0,5e-2,150); % in m [x,z] = meshgrid(x,z); y = zeros(size(x));
The function PFIELD yields the root-mean-square (RMS) pressure field. To make the simulations faster, the number of subelements is set to 1 in the structure options. See pfield documentation for more details. This will have (small) effects in the very near field.
options.ElementSplitting = 1; P = pfield(x,y,z,txdel,param,options);
Display the RMS acoustic pressure field.
imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P/max(P,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal tight xlabel('x (cm)'), ylabel('z (cm)') title('Plane wave - RMS pressure field')

Example #4: Multi-line transmit (MLT) with a phased-array
This example shows how to generate a MLT transmit sequence with a phased-array transducer. In this example, a 3-MLT sequence is designed, i.e. three focused waves are transmitted simultaneously.
Download the properties of a 2.7-MHz 64-element cardiac phased array in a structure param with GETPARAM.
param = getparam('P4-2v');
Define the TX delays for a 3-MLT transmit sequence.
x0 = 2e-2; z0 = 5e-2; % in m xf = [-x0 0 x0]; zf = [z0 sqrt(x0^2+z0^2) z0]; % focus points (in m) txdel = txdelay(xf,zf,param); % in s
Display the transmit delays.
bar3(txdel*1e6,.1) xlabel('Element number') zlabel('Delays (\mus)') title('TX delays for a 3-MLT transmit') axis tight square

Display the pressure field by using PFIELD.
x = linspace(-5e-2,5e-2,200); % in m z = linspace(0,10e-2,200); % in m [x,z] = meshgrid(x,z); % image grid y = zeros(size(x)); P = pfield(x,y,z,txdel,param); % pressure field imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P/max(P,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal tight xlabel('x (cm)'), ylabel('z (cm)') title('MLT - RMS pressure field') hold on plot(xf*1e2,zf*1e2,'bo','MarkerFaceColor','b') legend('focus points','Location','South') hold off

See also
About the author
Damien Garcia, Eng., Ph.D. INSERM researcher Creatis, University of Lyon, France
websites: BioméCardio, MUST
Date modified