`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.

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

## See also

## About the author

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

**websites**: **BioméCardio**, **MUST**

## Date modified