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.



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:

  1. PARAM.fs: sampling frequency (in Hz, required)
  2. PARAM.pitch: pitch of the transducer (in m, required)
  3. PARAM.fc: center frequency (in Hz, required for I/Q signals)
  4. PARAM.radius: radius of curvature (in m). The default is Inf (rectilinear array)
  5. PARAM.TXdelay: transmission law delays (in s, required if the vector DELAYS is not given)
  6. PARAM.c: longitudinal velocity (in m/s, default = 1540 m/s)
  7. 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):



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

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.


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


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

  1. 'nearest' : nearest neighbor interpolation
  2. 'linear' : (default) linear interpolation
  3. 'quadratic' : quadratic interpolation
  4. 'lanczos3' : 3-lobe Lanczos (windowed sinc) interpolation
  5. '5points' : 5-point least-squares parabolic interpolation
  6. '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 kerf width is the distance that separates two adjacent elements. They are constant for a uniform linear array (ULA).

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

dasmtx, txdelay, simus



Reference



About the author

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

websites: BioméCardio, MUST



Date modified