DIVERGING-WAVE ECHOCARDIOGRAPHY - simulations, beamforming, compounding
In this tutorial, it is shown how to simulate an ultrasound image of the heart (a five-chamber view) from the transmit of diverging waves.
The heart will be insonified with seven diverging waves 60-degrees wide.
- Scatterers will be provided by the function GENSCAT.
- 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 will eventually be generated.
Contents
- Select a transducer with GETPARAM
- Add transmit apodization
- Set 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.
Add transmit apodization
param.TXapodization = cos(linspace(-1,1,64)*pi/2);
Set the transmit delays with TXDELAY
The left ventricle will be insonified with seven diverging waves 60 degrees wide and tilted at -20 to +20 degrees.
tilt = deg2rad(linspace(-20,20,7)); % tilt angles in rad txdel = cell(7,1); % this cell will contain the transmit delays
Use TXDELAY to calculate the transmit delays for the 7 diverging waves.
for k = 1:7 txdel{k} = txdelay(param,tilt(k),deg2rad(60)); end
These are the transmit delays to obtain a 60 degrees wide circular waves steered at -20 degrees
stem(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 100 100 polar grid using IMPOLGRID:
[xi,zi] = impolgrid([100 100],15e-2,deg2rad(120),param);
Simulate an RMS pressure field...
option.WaitBar = false; P = pfield(xi,0*xi,zi,txdel{1},param,option);
...and display the result:
pcolor(xi*1e2,zi*1e2,20*log10(P/max(P(:)))) shading interp xlabel('x (cm)') ylabel('z (cm)') title('RMS pressure field for a 60{\circ}-wide -20{\circ}-tilted wave') axis equal ij tight caxis([-20 0]) % dynamic range = [-20,0] dB cb = colorbar; cb.YTickLabel{end} = '0 dB'; colormap(hot)

Simulate RF signals with SIMUS
We will now simulate seven series of RF signals. Each series will contain 64 RF signals, as the simulated phased array contains 64 elements. We first create scatterers with GENSCAT from a clipart image of the ventricle stored in heart.jpg.
x, y, and z contain the scatterers' positions. RC contains the reflection coefficients.
I = rgb2gray(imread('heart.jpg')); % Pseudorandom distribution of scatterers (depth is 15 cm) [x,y,z,RC] = genscat([NaN 15e-2],1540/param.fc,I);
Take a look at the scatterers. The backscatter coefficients are gamma-compressed to increase the contrast.
scatter(x*1e2,z*1e2,2,abs(RC).^.25,'filled') colormap([1-hot;hot]) axis equal ij tight set(gca,'XColor','none','box','off') title('Scatterers for a cardiac 5-chamber view') ylabel('[cm]')

Simulate the seven series of RF signals with SIMUS. The RF signals will be sampled at 4 center frequency.
RF = cell(7,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:7 waitbar(k/7,h,['SIMUS: RF series #' int2str(k) ' of 7']) RF{k} = simus(x,y,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(7,1); % this cell will contain the I/Q series for k = 1:7 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],15e-2,deg2rad(80),param);
Beamform the I/Q signals using a delay-and-sum with the function DAS.
bIQ = zeros(256,128,7); % this array will contain the 7 I/Q images h = waitbar(0,''); for k = 1:7 waitbar(k/7,h,['DAS: I/Q series #' int2str(k) ' of 7']) 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 7 diverging waves steered at different angles is of better 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