`PFIELD` RMS acoustic pressure field of a linear or convex array

`PFIELD` returns the radiation pattern of a uniform LINEAR or CONVEX array

## Contents

- Syntax
- Uniform linear array (ULA)
- The structure
`PARAM` - Other syntaxes
- X-, Y-, and Z-axes
- Element directivity
- Note on BAFFLE property
- Note on CHIRP signals
- Advanced options
- Example #1: 2-D focused pressure field with a phased-array transducer
- Example #2: 3-D focused pressure field with a cardiac phased-array
- Example #3: Diverging wave with a phased array
- Example #4: Multi-line transmit (MLT) with a phased-array
- Example #5: Focused pressure field with a subaperture of a linear array
- Example #6: Steered plane wave with a linear array
- Example #7: Focused pressure field with a subaperture of a curved array
- See also
- References
- About the author
- Date modified

## Syntax

`RP = PFIELD(X,Y,Z,DELAYS,PARAM)` returns the radiation pattern of a uniform linear or convex array whose elements are excited at different time delays (given by the vector `DELAYS`). The radiation pattern `RP` is given in terms of the root-mean-square (RMS) of acoustic pressure. The characteristics of the array and transmission must be given in the structure `PARAM` (see below for details). The radiation pattern is calculated at the points specified by (`X,Y,Z`).

`RP = PFIELD(X,Z,DELAYS,PARAM)` or `RP = PFIELD(X,[],Z,DELAYS,PARAM)` disregards elevation focusing (`PARAM.focus` is ignored) and assumes that `Y=0` (2-D space). The computation is faster in 2-D.

**TRY IT!** Enter `pfield` in the command window for an example.

Units: `X`, `Y`, `Z` must be in m; `DELAYS` must be in s.

`DELAYS` can also be a matrix. This alternative can be used to simulate MLT (multi-line transmit) sequences. In this case, each ROW represents a delay series. For example, to create a 4-MLT sequence with a 64-element phased array, `DELAYS` matrix must have 4 rows and 64 columns (size = [4 64]).

`PFIELD` is called by `SIMUS` to simulate ultrasound RF radio-frequency signals generated by an ultrasound uniform linear or convex array.

## Uniform linear array (ULA)

The ** pitch** is defined as the center-to-center distance between two adjacent elements. The

*width is the distance that separates two adjacent elements. The pitch and kerf are constant for a uniform linear array (ULA).*

**kerf**Some functions of the MUST toolbox can also consider curved (convex) ULAs.

The pitch is required as an input parameter for `PFIELD`. The element width or the kerf width is also required. See the paragraph below entitled **The structure PARAM** for details.

## The structure `PARAM`

`PARAM` is a structure that contains the following fields:

**TRANSDUCER PROPERTIES**

`PARAM.fc`: central frequency (in Hz,**required**)`PARAM.pitch`: pitch of the linear array (in m,**required**)`PARAM.width`: element width**OR**`PARAM.kerf`: kerf width (in m,**required**; width = pitch-kerf)`PARAM.focus`: elevation focus (in m, ignored if Y is not given). The default is Inf (no elevation focusing)`PARAM.height`: element height (in m, ignored if Y is not given). The default is Inf (no elevation focusing)`PARAM.radius`: radius of curvature (in m). The default is`Inf`(rectilinear array)`PARAM.bandwidth`: pulse-echo (2-way) 6dB fractional bandwidth (in %). The default is 75%.`PARAM.baffle`: property of the baffle:`'soft'`(default),`'rigid'`or a scalar > 0. Seebelow for details.*Note on BAFFLE property*

**MEDIUM PARAMETERS**

`PARAM.c`: longitudinal velocity (in m/s, default = 1540 m/s)`PARAM.attenuation`: attenuation coefficient (dB/cm/MHz, default: 0). A linear frequency-dependence is assumed. A typical value for soft tissues is ~0.5 dB/cm/MHz.

**TRANSMIT PARAMETERS**

`PARAM.TXapodization`: transmision apodization (default: no apodization)`PARAM.TXnow`: number of wavelengths of the TX pulse (default: 1). Use`PARAM.TXnow = Inf`for a mono-harmonic signal.`PARAM.TXfreqsweep`: frequency sweep for a linear chirp (default: [ ]). To be used to simulate a linear TX chirp. Seebelow for details.*Note on CHIRP signals*

## Other syntaxes

`[RP,PARAM] = PFIELD(...)` also returns the complete list of parameters including the default values.

`[...] = PFIELD` without any input argument provides an interactive example designed to produce a focused ultrasound beam using a 2.7 MHz phased-array transducer.

## X-, Y-, and Z-axes

Conventional axes are used:

- For a
**LINEAR**array, 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). The`Y`-axis is such that the coordinates are right-handed. These axes are represented in the above ULA figure. - For a
**CONVEX**array, the`X`-axis is parallel to the chord and`Z = 0`at the level of the chord.

## Element directivity

By default, the calculation is made faster by assuming that the directivity of the elements is dependent only on the central frequency (see figure below). This simplification very little affects the pressure field in most situations (except in the vicinity of the array). To turn off this option, use `OPTIONS.FullFrequencyDirectivity = true`.

See * ADVANCED OPTIONS* below.

## Note on BAFFLE property

In `PFIELD`, it is assumed by default that the array elements are embedded in an infinite **SOFT** baffle. To modify the property of the baffle, modify the field `PARAM.baffle`:

`'rigid'``'soft'`(this is the default)- a nonnegative scalar , with = (medium impedance)/(baffle impedance). Note:
`'rigid'`;`'soft'`.

The baffle property affects the obliquity factor included in the directivity of the elements. This obliquity factor is not 1 if the baffle is not rigid. A general case (see case #3 below) can be chosen by specifying an impedance ratio. For details, refer to the corresponding papers.

- Rigid baffle obliquity factor = 1.
- Soft baffle obliquity factor = cos().
- General baffle obliquity factor = cos()/(cos() + ), with = (medium impedance)/(baffle impedance).

**References for baffle models**:

- Selfridge
*et al*.*A theory for the radiation pattern of a narrow-strip acoustic transducer*. Appl Phys Lett 37(1), 35-36 (1980) - Pesqué
*et al*.*Effect of the planar baffle impedance in acoustic radiation of a phased array element theory and experimentation*. IEEE Ultrasonics Symposium, (1984)

**Example**: For a baffle of impedance 2.8 MRayl (epoxy) adjacent to soft tissues of impedance 1.6 MRayls, = 1.75.

## Note on CHIRP signals

Linear chirps are characterized by `PARAM.TXnow`, `PARAM.fc` and `PARAM.TXfreqsweep`. The transmitted pulse has a duration of approximately `T` (= `PARAM.TXnow/PARAM.fc`), with the amplitude and phase defined over the time interval `-T/2` to `+T/2`.

The total frequency sweep is `DeltaF` (= `PARAM.TXfreqsweep`): the frequencies increase linearly from (`PARAM.fc - DeltaF/2`) to (`PARAM.fc + DeltaF/2`) in the defined time interval.

**Documentation**: Chirp spectrum in Wikipedia.

## Advanced options

**FREQUENCY SAMPLES**

Only frequency components of the transmitted signal in the range [0, `2fc`] with significant amplitude are considered. The default relative amplitude is -60 dB in `PFIELD`. You can change this value by using the following:

`[...] = PFIELD(...,OPTIONS)`,

where `OPTIONS.dBThresh` is the threshold in dB (default = `-60`).

**FULL-FREQUENCY DIRECTIVITY**

By default, the directivity of the elements depends on the center frequency only. This makes the algorithm faster. To make the directivities fully frequency-dependent, use:

`[...] = PFIELD(...,OPTIONS)`,

with `OPTIONS.FullFrequencyDirectivity = true` (default = `false`).

**ELEMENT SPLITTING**

Each transducer element of the array is split into small segments. The length of these small segments must be small enough to ensure that the far-field model is accurate. By default, the elements are split into M segments, with `M` being defined by:

`M = ceil(element_width/smallest_wavelength)`;

To modify the number `M` of subelements by splitting, you may adjust `OPTIONS.ElementSplitting`. For example, `OPTIONS.ElementSplitting = 1`.

**WAIT BAR**

If `OPTIONS.WaitBar` is `true`, a wait bar appears (only if the number of frequency samples >10). Default is `true`.

## Example #1: 2-D focused pressure field with a phased-array transducer

This example shows how to generate 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
```

Simulate 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 ij 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: 3-D focused pressure field with a cardiac phased-array

This example shows how to generate a 3-D 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
```

Simulate the pressure field by using `PFIELD`.

First define the x-, y-, z-coordinates:

x = linspace(-4e-2,4e-2,200); y = linspace(-0.75,.75,50)*param.height; z = linspace(0,10e-2,200);

Obtain the RMS pressure field on the azimuthal plane:

[xaz,zaz] = meshgrid(x,z); yaz = zeros(size(xaz)); Paz = pfield(xaz,yaz,zaz,txdel,param);

Obtain the RMS pressure field on the elevation plane:

[yel,zel] = meshgrid(y,z); xel = ones(size(yel))*xf; Pel = pfield(xel,yel,zel,txdel,param);

Obtain the RMS pressure field on the focal plane:

[xfo,yfo] = meshgrid(x,y); zfo = ones(size(xfo))*zf; Pfo = pfield(xfo,yfo,zfo,txdel,param);

Display the acoustic pressure field.

Pmax = max(Paz(:)); surf(xaz,yaz,zaz,20*log10(Paz/Pmax)), shading flat hold on surf(xel,yel,zel,20*log10(Pel/Pmax)), shading flat surf(xfo,yfo,zfo,20*log10(Pfo/Pmax)), shading flat hold off % Fine-tune the figure: axis equal set(gca,'ZDir','reverse') title('3-D focused field ([-20,0] dB)') caxis([-20 0]) alpha color

## Example #3: Diverging wave with a phased array

This example shows how to simulate a circular wave with a phased-array transducer with the 2-D approximation.

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 75-degrees wide circular wave. Use `TXDELAY`.

width = 75/180*pi; % width angle in rad tilt = 0; % tilt angle in rad txdel = txdelay(param,tilt,width); % in s

Define a transmit apodization.

param.TXapodization = cos(linspace(-3*pi/8,3*pi/8,64)); bar(param.TXapodization) xlabel('Element number') title('TX apodization') axis tight square

Simulate the pressure field with `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 ij tight xlabel('x (cm)'), ylabel('z (cm)') title('Diverging 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.

`param` by using `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

Simulate the pressure field with `PFIELD`.

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); % image grid y = zeros(size(x));

Use `PFIELD` to obtain the RMS pressure field.

P = pfield(x,y,z,txdel,param);

Display the 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 ij 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

## Example #5: Focused pressure field with a subaperture of a linear array

This example shows how to generate a focused pressure field with a subaperture of a linear array 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 positions of the elements (for visualization).

```
L = param.pitch*(param.Nelements-1); % array aperture (in m)
xe = linspace(-0.5,0.5,param.Nelements)*L;
ze = zeros(1,param.Nelements);
```

Create a linear "sub-array" with 24 elements.

param_suba = param; param_suba.Nelements = 24;

Define a focus location at xf = 0 cm, zf = 2.5 cm, * relative to* the sub-array

```
xf = 0; zf = 2.5e-2; % focus position (in m)
```

Calculate the transmit time delays (in s) for the sub-array.

```
txdel_suba = txdelay(xf,zf,param_suba); % in s
```

Obtain the transmit time delays (in s) for the (complete) array...

... when firing with elements #1 to #24

txdel_1to24 = NaN(1,128); txdel_1to24(1:24) = txdel_suba;

... when firing with elements #91 to #114

txdel_91to114 = NaN(1,128); txdel_91to114(91:114) = txdel_suba;

Simulate the pressure fields by using `PFIELD`.

First define an image grid.

x = linspace(-2.5e-2,2.5e-2,150); % in m z = linspace(0,5e-2,150); % in m [x,z] = meshgrid(x,z);

The function `PFIELD` yields the root-mean-square (RMS) pressure fields.

P_1to24 = pfield(x,z,txdel_1to24,param); P_91to114 = pfield(x,z,txdel_91to114,param);

Display the acoustic pressure field when firing elements #1 to #24.

imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P_1to24/max(P_1to24,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal ij tight xlabel('x (cm)'), ylabel('z (cm)') title('Focused wave with elements #1 to #24') hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) plot(xe(1:24)*1e2,ze(1:24)*1e2,'r','Linewidth',5) hold off

Display the acoustic pressure field when firing elements #91 to #114.

imagesc(x(1,:)*1e2,z(:,1)*1e2,20*log10(P_91to114/max(P_91to114,[],'all'))) caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap hot axis equal ij tight xlabel('x (cm)'), ylabel('z (cm)') title('Focused wave with elements #91 to #114') hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) plot(xe(91:114)*1e2,ze(91:114)*1e2,'r','Linewidth',5) hold off

## Example #6: Steered plane wave with a linear array

This example shows how to simulated a steered plane wave with a linear vascular 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

Use `PFIELD` to simulate the pressure field.

First define the image grid.

x = linspace(-4e-2,4e-2,150); % in m z = linspace(0,8e-2,150); % 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 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 ij tight xlabel('x (cm)'), ylabel('z (cm)') title('A steered plane wave with a linear array') % Calculate the positions of the element centers. L = param.pitch*(param.Nelements-1); % array aperture (in m) xe = linspace(-0.5,0.5,param.Nelements)*L; ze = zeros(1,param.Nelements); hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) hold off

Add an attenuation coefficient.

```
param.attenuation = 0.5; % attenuation coefficient (in dB/cm/MHz)
```

Calculate the pressure field and compare.

P = pfield(x,z,txdel,param); 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 ij tight xlabel('x (cm)'), ylabel('z (cm)') title('A plane wave with an attenuation coefficient of 0.5 dB/cm/MHz') hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) hold off

## Example #7: Focused pressure field with a subaperture of a curved array

This example shows how to generate a focused pressure field with a subaperture of a convex array transducer.

Download the properties of a 3.6-MHz 128-element curved linear array in a structure `param` by using `GETPARAM`.

```
param = getparam('C5-2v');
```

Calculate the positions of the elements (for visualization).

```
R = param.radius;
p = param.pitch;
N = param.Nelements;
L = 2*R*sin(asin(p/2/R)*(N-1)); % chord length
h = sqrt(R^2-L^2/4);
th = linspace(atan2(-L/2,h),atan2(L/2,h),N);
xe = R*sin(th);
ze = R*cos(th)-h;
```

Create a convex "sub-array" with 32 elements.

param_suba = param; param_suba.Nelements = 32;

Define a focus location at xf = 0 cm, zf = 7.5 cm, * relative to* the sub-array

```
xf = 0; zf = 7.5e-2; % focus position (in m)
```

Calculate the transmit time delays (in s) for the sub-array.

```
txdel_suba = txdelay(xf,zf,param_suba); % in s
```

Obtain the transmit time delays (in s) for the (complete) array...

... when firing with elements #1 to #32

txdel_1to32 = NaN(1,128); txdel_1to32(1:32) = txdel_suba;

... when firing with elements #83 to #114

txdel_83to114 = NaN(1,128); txdel_83to114(83:114) = txdel_suba;

Simulate the pressure fields by using `PFIELD`.

First define an image polar-type grid by using `IMPOLGRID`.

[x,z] = impolgrid([128 128],15e-2,param); y = zeros(size(x));

The function `PFIELD` yields the root-mean-square (RMS) pressure fields.

P_1to32 = pfield(x,y,z,txdel_1to32,param); P_83to114 = pfield(x,y,z,txdel_83to114,param);

Display the acoustic pressure field when firing elements #1 to #32.

pcolor(x*1e2,z*1e2,20*log10(P_1to32/max(P_1to32(:)))) shading interp colormap hot axis equal tight ij caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; xlabel('[cm]'), ylabel('[cm]') title('Focused wave with elements #1 to #32') hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) plot(xe(1:32)*1e2,ze(1:32)*1e2,'r','Linewidth',5) hold off

Display the acoustic pressure field when firing elements #83 to #114.

pcolor(x*1e2,z*1e2,20*log10(P_83to114/max(P_83to114(:)))) shading interp colormap hot axis equal tight ij caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; xlabel('[cm]'), ylabel('[cm]') title('Focused wave with elements #83 to #114') hold on plot(xe*1e2,ze*1e2,'g','Linewidth',5) plot(xe(83:114)*1e2,ze(83:114)*1e2,'r','Linewidth',5) hold off

## See also

getparam, txdelay, simus, pfield3, cite

## References

- The paper that describes the first 2-D version of PFIELD is: Shariari S, Garcia D.
**Meshfree simulations of ultrasound vector flow imaging using smoothed particle hydrodynamics**.*Phys Med Biol*, 2018;63:205011. (**PDF**)

- The papers that describe the theory inside PFIELD and SIMUS are: Garcia D.
**SIMUS: an open-source simulator for medical ultrasound imaging. Part I: theory & examples**.*Comput Methods Programs Biomed*, 2022. (**PDF**), and: Cigier A, Varray F, Garcia D.**SIMUS: an open-source simulator for medical ultrasound imaging. Part II: comparison with four simulators**.*Comput Methods Programs Biomed*, 2022. (**PDF**).

## About the author

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

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

## Date modified