# DIVERGING-WAVE ECHOCARDIOGRAPHY - simulations, beamforming, compounding

In this tutorial, it is shown how to simulate a realistic ultrasound image of the left ventricle (a three-chamber view) from the transmit of diverging waves.

The left ventricle will be insonified with seventeen diverging waves 60 degrees wide.

- RF signals will be simulated with the function
.`SIMUS` - The RF signals will be I/Q demodulated with
,`RF2IQ` - then beamformed with
.`DAS` - A compound echocardiographic image of the left ventricle will eventually be generated.

## Contents

- Select a transducer with
`GETPARAM` - Adjust the transmit delays with
`TXDELAY` - Simulate an acoustic pressure field with
`PFIELD` - Simulate RF signals with
`SIMUS` - Demodulate the RF signals with
`RF2IQ` - Beamform the I/Q signals with
`DAS` - Time-gain compensate the beamformed I/Q with
`TGC` - Check the ultrasound images
- See also
- About the author
- Date modified

## Select a transducer with `GETPARAM`

We want a 2.7-MHz 64-element cardiac phased array.

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

The structure `param` contains the tranducer properties.

## Adjust the transmit delays with `TXDELAY`

The left ventricle will be insonified with seventeen diverging waves 60 degrees wide and directed at -20 to +20 degrees.

tilt = linspace(-20,20,17)/180*pi; % tilt angles in rad txdel = cell(17,1); % this cell will contain the transmit delays

Use `TXDELAY` to calculte the transmit delays for the 17 diverging waves.

for k = 1:17 txdel{k} = txdelay(param,tilt(k),pi/3); end

These are the transmit delays to obtain a 60 degrees wide circular waves steered at -20 degrees

bar(txdel{1}*1e6) xlabel('Element number') ylabel('Delays (\mus)') title('TX delays for a 60{\circ}-wide -20{\circ}-tilted wave') axis tight square

## Simulate an acoustic pressure field with `PFIELD`

Check what the sound pressure fields look like.

Define a 200 200 grid:

xi = linspace(-4e-2,4e-2,200); % in m zi = linspace(0,10e-2,200); % in m [xi,zi] = meshgrid(xi,zi);

Simulate an RMS pressure field...

option.WaitBar = false; P = pfield(xi,zi,txdel{1},param,option);

...and display the result:

imagesc(xi(1,:)*1e2,zi(:,1)*1e2,20*log10(P/max(P(:)))) xlabel('x (cm)') ylabel('z (cm)') title('RMS pressure field for a 60{\circ}-wide -20{\circ}-tilted wave') axis equal tight caxis([-20 0]) % dynamic range = [-20,0] dB c = colorbar; c.YTickLabel{end} = '0 dB'; colormap(hot)

## Simulate RF signals with `SIMUS`

We will now simulate seventeen series of RF signals. Each series will contain 64 RF signals, as the simulated phased array contains 64 elements. We first load the scatterers of the left ventricle stored in `LVscat.mat`.

`x` and `z` contain the scatterers' positions. `RC` contains the reflection coefficients.

```
load('LVscat.mat')
```

Take a look at the scatterers. The backscatter coefficients are gamma-compressed for easy visualization.

scatter(x*1e2,z*1e2,2,abs(RC).^.15,'filled') colormap hsv axis equal ij set(gca,'XColor','none','box','off') title('Scatterers for a left ventricular 3-chamber view') ylabel('[cm]')

Simulate the seventeen series of RF signals with `SIMUS`. The RF signals will be sampled at 4 center frequency.

RF = cell(17,1); % this cell will contain the RF series param.fs = 4*param.fc; % sampling frequency in Hz option.WaitBar = false; % remove the wait bar of SIMUS h = waitbar(0,''); for k = 1:17 waitbar(k/17,h,['SIMUS: RF series #' int2str(k) ' of 17']) RF{k} = simus(x,z,RC,txdel{k},param,option); end close(h)

This is the 32th RF signal of the 1st series:

rf = RF{1}(:,32); t = (0:numel(rf)-1)/param.fs*1e6; % time (ms) plot(t,rf) set(gca,'YColor','none','box','off') xlabel('time (\mus)') title('RF signal of the 32^{th} element (1^{st} series, tilt = -20{\circ})') axis tight

## Demodulate the RF signals with `RF2IQ`

Before beamforming, the RF signals must be I/Q demodulated.

IQ = cell(17,1); % this cell will contain the I/Q series for k = 1:17 IQ{k} = rf2iq(RF{k},param.fs,param.fc); end

This is the 32th I/Q signal of the 1st series:

iq = IQ{1}(:,32); plot(t,real(iq),t,imag(iq)) set(gca,'YColor','none','box','off') xlabel('time (\mus)') title('I/Q signal of the 32^{th} element (1^{st} series, tilt = -20{\circ})') legend({'in-phase','quadrature'}) axis tight

## Beamform the I/Q signals with `DAS`

To generate images of the left ventricle, beamform the I/Q signals onto a 256 128 polar grid.

Generate the image (polar) grid using `IMPOLGRID`.

[xi,zi] = impolgrid([256 128],11e-2,pi/3,param);

Beamform the I/Q signals using a delay-and-sum with the function `DAS`.

bIQ = zeros(256,128,17); % this array will contain the 17 I/Q images h = waitbar(0,''); for k = 1:17 waitbar(k/17,h,['DAS: I/Q series #' int2str(k) ' of 17']) bIQ(:,:,k) = das(IQ{k},xi,zi,txdel{k},param); end close(h)

## Time-gain compensate the beamformed I/Q with `TGC`

Time-gain compensation tends to equalize the amplitudes along fast-time.

bIQ = tgc(bIQ);

## Check the ultrasound images

An ultrasound image is obtained by log-compressing the amplitude of the beamformed I/Q signals. Have a look at the images obtained when steering at -20 degrees.

I = bmode(bIQ(:,:,1),50); % log-compressed image pcolor(xi*1e2,zi*1e2,I) shading interp, colormap gray title('DW-based echo image with a tilt angle of -20{\circ}') axis equal ij set(gca,'XColor','none','box','off') c = colorbar; c.YTick = [0 255]; c.YTickLabel = {'-50 dB','0 dB'}; ylabel('[cm]')

The individual images are of poor quality. The compound image obtained with a series of 17 diverging waves steered at different angles is of high quality:

cIQ = sum(bIQ,3); % this is the compound beamformed I/Q I = bmode(cIQ,50); % log-compressed image pcolor(xi*1e2,zi*1e2,I) shading interp, colormap gray title('Compound DW-based cardiac echo image') axis equal ij set(gca,'XColor','none','box','off') c = colorbar; c.YTick = [0 255]; c.YTickLabel = {'-50 dB','0 dB'}; ylabel('[cm]')

## See also

## About the author

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

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

## Date modified