`DAS` Delay-And-Sum

`DAS` beamforms the RF or I/Q signals.

## Contents

## Syntax

`BFSIG = DAS(SIG,X,Z,DELAYS,PARAM)` beamforms the RF or I/Q signals stored in the array `SIG`, and returns the beamformed signals BFSIG. The signals are beamformed at the points specified by `X` and `Z`.

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

`SIG` must be a 2-D or 3-D array. The first dimension (i.e. each column) corresponds to a single RF or I/Q signal over (fast-) time, with the FIRST COLUMN corresponding to the FIRST ELEMENT. Several 2-D signals can be stacked along the 3rd dimension.

`DELAYS` are the transmit time delays (in s). The number of elements in `DELAYS` must be the number of elements in the array (which is equal to `size(SIG,2)`). If a sub-aperture was used during transmission, use `DELAYS(i) = NaN` if element # `i` of the linear array was off.

`PARAM` is a structure that contains the parameter values required for DAS beamforming (see below for details).

**Note**: `SIG` must be complex when beamforming I/Q data (i.e. `SIG = complex(I,Q) = I + 1i*Q`).

## Note: `DASMTX`

`DAS` calls `DASMTX`. `DASMTX` creates a DAS matrix.

**Beamforming using**:`DAS``bfSIG = das(SIG,x,z,delays,param)`

**Beamforming using**: (M = dasmtx(size(SIG),x,z,delays,param)| bfSIG = M*SIG(:); bfSIG = reshape(bfSIG,size(x));`DASMTX`

## Other syntaxes

`DAS(SIG,X,Z,PARAM)` uses `DELAYS = param.TXdelay`.

`DAS(...,METHOD)` specifies the interpolation method. The available methods are decribed in NOTE #3 below.

`[M,PARAM] = DAS(...)` also returns the structure `PARAM` with the default values.

## The structure `PARAM`

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

`PARAM.fs`: sampling frequency (in Hz,**required**)`PARAM.pitch`: pitch of the transducer (in m,**required**)`PARAM.fc`: center frequency (in Hz,**required**for I/Q signals)`PARAM.radius`: radius of curvature (in m). The default is`Inf`(rectilinear array)`PARAM.TXdelay`: transmission law delays (in s, required if the vector`DELAYS`is not given)`PARAM.c`: longitudinal velocity (in m/s, default = 1540 m/s)`PARAM.t0`: start time for reception (in s, default = 0 s)

**A note on the f-number**

The f-number is defined by the ratio (depth)/(aperture size). A null f-number, i.e. `PARAM.fnumber = 0`, means that the full aperture is used during DAS-beamforming. This might be a suboptimal strategy since the array elements have some directivity.

Use `PARAM.fnumber = []` to obtain an "optimal" f-number, which is estimated from the element directivity (and depends on fc, bandwidth, element width):

`PARAM.fnumber`: reception f-number (default = 0, i.e. full aperture)`PARAM.width`: element width (in m, required if`PARAM.fnumber = []`)**or**`PARAM.kerf`: kerf width (in m, kerf = pitch-width, required if`PARAM.fnumber`= [])`PARAM.bandwidth`: pulse-echo 6dB fractional bandwidth (in %). The default is 60% (used only if`PARAM.fnumber = []`).

## Advanced syntax for vector Doppler

`PARAM.RXangle`: reception angles (in rad, default = 0)

This option can be used for vector Doppler. Beamforming with at least two (sufficiently different) reception angles enables different Doppler directions and, in turn, vector Doppler.

## 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:**

`DASMTX` uses a standard delay-and-sum. It is a linear operator. Phase rotations are included if I/Q (complex) signals are beamformed.

**NOTE #3: interpolation methods**

By default `DASMTX` uses a linear interpolation to generate the DAS matrix. To specify the interpolation method, use `DASMTX(...,METHOD)`, with `METHOD` being:

`'nearest'`: nearest neighbor interpolation`'linear'`: (default) linear interpolation`'quadratic'`: quadratic interpolation`'lanczos3'`: 3-lobe Lanczos (windowed sinc) interpolation`'5points'`: 5-point least-squares parabolic interpolation`'lanczos5'`: 5-lobe Lanczos (windowed sinc) interpolation

The linear interpolation (it is a 2-point method) returns a matrix twice denser than the nearest-neighbor interpolation. It is 3, 4, 5, 6 times denser for `'quadratic'`, `'lanczos3'`, `'5points'`, `'lanczos5'`, respectively (they are 3-to-6-point methods).

## 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. They are constant for a uniform linear array (ULA).**

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

## Example #1: Beamform signals from a phased array

This example shows how to simulate RF signals then beamform I/Q signals

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 non-tilted 60-degrees wide circular wave.

width = pi/3; % width angle in rad txdel = txdelay(param,0,width); % in s

Create the scatterers of a 12-cm-by-12-cm phantom.

xs = rand(1,50000)*12e-2-6e-2; zs = rand(1,50000)*12e-2; idx = hypot(xs,zs-.05)<1e-2; xs(idx) = []; % create a 1-cm-radius hole zs(idx) = []; RC = 3+randn(size(xs)); % reflection coefficients

Simulate RF signals by using `SIMUS`.

```
param.fs = 4*param.fc; % sampling frequency
RF = simus(xs,zs,RC,txdel,param);
```

Demodulate the RF signals.

IQ = rf2iq(RF,param);

Create a 256x256 80-degrees wide polar grid with `IMPOLGRID`.

[x,z] = impolgrid([256 256],10e-2,pi/3,param);

Beamform the I/Q signals.

IQb = das(IQ,x,z,txdel,param);

Create the ultrasound image with `BMODE`.

```
B = bmode(IQb,30); % log-compressed B-mode image with a -30 dB range
```

Display the ultrasound image

pcolor(x*100,z*100,B) c = colorbar; c.YTick = [0 255]; c.YTickLabel = {'-30 dB','0 dB'}; colormap gray title('A simulated ultrasound image') ylabel('[cm]') shading interp axis equal ij tight set(gca,'XColor','none','box','off')

## Example #2: Beamform signals from a convex array

This example shows how to simulate RF signals with a convex array and how to beamform the I/Q signals with `DAS`.

Download the properties of a 2.7-MHz 64-element cardiac phased array in a structure `param` by using `GETPARAM`.

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

Create the scatterers of a 17-cm-by-10-cm cyst phantom.

xs = rand(1,100000)*17e-2-8.5e-2; zs = rand(1,100000)*10e-2; idx = hypot(xs-.02,zs-.04)<1e-2; % create a 1-cm-radius hole xs(idx) = []; zs(idx) = []; RC = 3+randn(size(xs)); % reflection coefficients idx = hypot(xs+.02,zs-.06)<1e-2; % create a 1-cm-radius cyst RC(idx) = RC(idx)+10;

Simulate RF signals by using `SIMUS`.

txdel = zeros(1,128); % transmit delays param.fs = 4*param.fc; % sampling frequency opt.ElementSplitting = 1; % to make simulations faster RF = simus(xs,zs,RC,txdel,param,opt);

Demodulate the RF signals.

IQ = rf2iq(RF,param);

Create a 256x256 polar grid with `IMPOLGRID`.

[x,z] = impolgrid([256 256],10e-2,param);

It is recommended to use an "optimal" f-number.

param.fnumber = [];

Beamform the I/Q signals.

IQb = das(IQ,x,z,txdel,param);

Create the ultrasound image with `BMODE`.

```
B = bmode(IQb,30); % log-compressed B-mode image with a -30 dB range
```

Display the ultrasound image

pcolor(x*100,z*100,B) c = colorbar; c.YTick = [0 255]; c.YTickLabel = {'-30 dB','0 dB'}; colormap gray title('A simulated ultrasound image') ylabel('[cm]') shading interp axis equal ij tight set(gca,'XColor','none','box','off')

## See also

## Reference

- Perrot V, Polichetti M, Varray F, Garcia D.
**So you think you can DAS? A viewpoint on delay-and-sum with tips and tricks**.*Ultrasonics*, 2020. (**PDF**)

## About the author

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

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

## Date modified