angularSpectrum
Project time-domain input plane using the angular spectrum method.
Syntax
pressure_max = angularSpectrum(input_plane, dx, dt, z_pos, c0) pressure_max = angularSpectrum(input_plane, dx, dt, z_pos, medium, ...) [pressure_max, pressure_time] = angularSpectrum(input_plane, dx, dt, z_pos, c0) [pressure_max, pressure_time] = angularSpectrum(input_plane, dx, dt, z_pos, medium, ...)
Description
angularSpectrum
projects a 2D input plane (given as a 3D matrix of time series at each spatial position) using the angular spectrum method. The time series are decomposed into spectral components and then each frequency is propagated using the spectral propagator with angular restriction described in reference [1].
The time signals are computed in retarded time, where the time series for each plane are offset by z/c0 and the input plane corresponds to z = 0. The projections are calculated directly from the input plane (no spatial stepping is used). For linear projections in a lossless medium, just the sound speed can be specified. For projections in a lossy medium, the parameters are given as fields to the input structure medium
.
Two datasets are returned. The first, pressure_max
, contains a 3D matrix of the maximum (temporal peak) pressure across the 2D planes specified by z_pos
, and is indexed as (x_ind, y_ind, plane_index)
. The second, pressure_time
, contains the time-varying pressure signals across the 2D planes specified by z_pos
, and is indexed as (x_ind, y_ind, t_ind, plane_index)
.
To compute the maximum pressure field over an isotropic domain with Nz
grid points (assuming the source plane is aligned with z_ind = 1
) without storing the time-series (which can be memory consuming), use the syntax:
pressure_max = angularSpectrum(input_plane, dx, dt, (0:(Nz - 1)) * dx, c0)
To compute the time series over another parallel plane separated by a distance of z_pos
, use the syntax:
[~, pressure_time] = angularSpectrum(input_plane, dx, dt, z_pos, c0)
[1] Zeng, X., & McGough, R. J. (2008). Evaluation of the angular spectrum approach for simulations of near-field pressures. The Journal of the Acoustical Society of America, 123(1), 68-76.
Inputs
input_plane |
3D matrix containing the time varying pressure over a 2D input plane indexed as (x, y, t) [Pa]. |
dx |
Spatial step between grid points in the input plane [m]. |
dt |
Temporal step between time points in the input plane [s]. |
z_pos |
Vector specifying the relative z-position of the planes to which the data is projected [m]. |
  |   |
c0 |
Medium sound speed [m/s]. |
  |
OR |
medium.sound_speed |
Medium sound speed [m/s]. |
medium.alpha_power |
Power law absorption exponent. |
medium.alpha_coeff |
Power law absorption coefficient [dB/(MHz^y cm)]. |
Optional Inputs
Optional 'string', value pairs that may be used to modify the default computational settings.
Input | Valid Settings | Default | Description |
---|---|---|---|
'AngularRestriction' |
(Boolean scalar) | true |
Boolean controlling whether angular restriction is used as described in [1]. |
'DataCast' |
(string of data type) | 'off' |
String input of the data type that variables are cast to before computation. For example, setting to 'single' will speed up the computation time (due to the improved efficiency of fft2 and ifft2 for this data type). This variable is also useful for utilising GPU parallelisation the Parallel Computing Toolbox by setting 'DataCast' to 'gpuArray-single' . |
'DataRecast' |
(Boolean scalar) | false |
Boolean controlling whether the output data is cast back to double precision. If set to false , sensor_data will be returned in the data format set using the 'DataCast' option. |
'FFTLength' |
(integer numeric scalar) | 1 + the next power of two larger than the grid size | Length of the FFT used to compute the angular spectrum. |
'GridExpansion' |
(integer numeric scalar) | 0 |
Grid padding used to increase the accuracy of the projection. The grid expansion is removed before returning the calculated pressure to the user. |
'Plot' |
(Boolean scalar) | true |
Boolean controlling whether the field is plotted at each z step. |
'Reverse' |
(Boolean scalar) | false |
Boolean controlling whether the projection is in the forward (false ) or backward (true ) direction. |
Outputs
pressure_max |
3D matrix of maximum pressure (temporal peak) across the 2D planes specified by z_pos , indexed as (x_ind, y_ind, plane_index) [Pa]. |
pressure_time |
4D matrix of the time varying pressure signals across the 2D planes specified by z_pos , indexed as (x_ind, y_ind, t_ind, plane_index) [Pa]. |
Examples
See Also
angularSpectrumCW