k-Wave Toolbox

Simulating CW Fields Using The Acoustic Field Propagator Example

This example demonstrates how to use acousticFieldPropagator to simulate the steady-state pressure field from a steered line array in 2D without time stepping.

For a more detailed discussion of this example and the underlying techniques, see B. E. Treeby, J. Budisky, E. S. Wise, J. Jaros, and B. T. Cox, "Rapid calculation of acoustic fields from arbitrary continuous-wave sources," The Journal of the Acoustical Society of America, vol. 143, no. 1, pp.529-537, 2018.



When simulating the output from time-varying pressure sources, if the driving signal is a continuous wave sinusoid and the acoustic medium is lossless and homogeneous, the steady-state acoustic field can be calculated very rapidly (without time stepping) using the function acousticFieldPropagator. For this function, the source is defined as two matrices of amplitude and phase which capture both the source geometry (the amplitude matrix is set to zero outside the support of the source) and the distribution of amplitude and phase across the source. In this example, the output from a steered line array is calculated in 2D. The steering angle is swept from -60 to 60 degrees with no apodisation (the amplitude is set to one across the array). For each steering angle, the phase at each grid point in the line array is calculated.

% assign constant amplitude across the line array
amp_in(x1, y1:y2) = 1;

% get the current steering angle
steering_angle = angle_array(index);

% calculate phase offset for each grid point in the line array based on
% element position and steering angle, and assign to the line array
phase_in(x1, y1:y2) = 2 * pi * f0 * el_pos * sind(steering_angle) / c0;

Running the simulation

For each steering angle, the matrices of amplitude and phase along with the grid spacing, source frequency, and medium sound speed are passed to acousticFieldPropagator. This calculates the steady state acoustic field (amplitude and phase) over the same size domain as the input matrices. A plot of the calculated amplitude and phase for a steering angle of -20 degrees is shown below.

% compute beam pattern
[amp_out, phase_out] = acousticFieldPropagator(amp_in, phase_in, dx, f0, c0);

To replicate this simulation using kspaceFirstOrder2D, source.p_mask could be defined as amp_in with source.p created using createCWSignals along with the calculated phase offset for each steering angle. For simulations in 3D (which are conducted in an analogous fashion), the function acousticFieldPropagatorC can be used to reduce memory usage and compute time.