k-Wave Toolbox |
![]() ![]() |
On this page… |
---|
This example provides a simple demonstration of using k-Wave for the simulation and detection of a time varying pressure source within a three-dimensional heterogeneous propagation medium. It builds on the Monopole Point Source In A Homogeneous Propagation Medium Example and Simulations In Three Dimensions examples.
As in one- and two-dimensions, a time varying pressure source is defined by assigning a binary matrix (i.e., a matrix of 1's and 0's
with the same dimensions as the computational grid) to source.p_mask
where the
1's represent the pixels that form part of the source. The time varying input signal is then
assigned to source.p
. This must be the same length as kgrid.t_array
and can be a single time series
(in which case it is applied to all source elements), or a matrix of time series following
the source elements using MATLAB's standard column-wise linear matrix index ordering.
Here a sinusoidal input is assigned to a square source element. To avoid numerical
stabilities, the input should first be filtered using filterTimeSeries
(see the Filtering A Delta Function Input Signal Example
for more information).
% create the time array [kgrid.t_array, dt] = makeTime(kgrid, medium.sound_speed); % define a square source element source_radius = 5; source.p_mask = zeros(Nz, Nx, Ny); source.p_mask(Nz/4, Nx/2 - source_radius:Nx/2 + source_radius, Ny/2 - source_radius:Ny/2 + source_radius) = 1; % define a time varying sinusoidal source source_freq = 2e6; source_mag = 1; source.p = source_mag*sin(2*pi*source_freq*kgrid.t_array); % smooth the source source.p = filterTimeSeries(kgrid, medium, source.p);
To allow visualisation of the
source elements within the grid, the source mask is assigned to the optional input parameter
'DisplayMask'
. This mask is overlayed onto the plot during the
simulation. The optional input 'DataCast'
is also set to 'single'
to reduce the computation time.
% input arguments input_args = {'DisplayMask', source.p_mask, 'DataCast', 'single'}; % run the simulation [sensor_data, p_final] = kspaceFirstOrder3D(kgrid, medium, source, sensor, input_args{:});
A plot of display during simulation is shown below.
The effective visualisation of three-dimensional matrix data remains an important
part of data exploration and presentation. An animated slice-by-slice visualisation
of the final pressure field can be viewed using flyThrough
.
% view final pressure field slice by slice flyThrough(p_final);
![]() |
Diffraction Through A Slit | Sensor Directivity | ![]() |
© 2009, 2010, 2011 Bradley Treeby and Ben Cox.