TXDELAY Transmit delays for a uniform linear array

TXDELAY returns the transmit time delays for focused, plane or circular beam patterns in a linear array. TXDELAY also returns transmit time delays for focused waves in a curved array.

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:

1. PARAM.pitch: pitch of the linear array (in m, required)
2. PARAM.Nelements: number of elements in the transducer array (required)
3. 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,10e-2,200); % in m
[x,z] = meshgrid(x,z);


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,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

P = pfield(x,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


Damien Garcia, Eng., Ph.D.
Creatis, University of Lyon, France