Main Content


Propagated and reflected sonar signals


The underwaterChannel function models underwater sonar signal propagation based on a time varying acoustic Green’s function approach and uses the image method to account for multipath signal transmission. The function makes these assumptions:

  • The function assumes a shallow water (depth less than 200 meters) environment, in which an isospeed channel is valid.

  • The function assumes flat and uniform ocean floor and surface and does not account signal loss due to surface interaction.

For more details, see these References.


sonarsigout = underwaterChannel(sonarsigin,platforms) returns sonar signals, sonarsigout, as combinations of signals, sonarsigin, reflected from platforms, platforms.


collapse all

Create a sonar emission and a platform and reflect the emission from the platform.

Create a sonar emission object.

sonarSig = sonarEmission('PlatformID',1,'EmitterIndex',1,'OriginPosition',[0 0 0]);

Create a platform structure.

platfm = struct('PlatformID',2,'Position',[10 0 0],'Signatures',tsSignature());

Reflect the emission from the platform.

sigs = underwaterChannel(sonarSig,platfm)
sigs = 
  2x1 sonarEmission array with properties:


Create a tracking scenario object.

scenario = trackingScenario;

Create an sonarEmitter.

emitter = sonarEmitter(1);

Mount the emitter on a platform within the scenario.

plat = platform(scenario,'Emitters',emitter);

Add another platform to reflect the emitted signal.

tgt = platform(scenario);
tgt.Trajectory.Position = [30 0 0];

Emit the signal using the emit object function of a platform.

txSigs = emit(plat, scenario.SimulationTime)
txSigs = 1x1 cell array
    {1x1 sonarEmission}

Reflect the signal from the platforms in the scenario.

sigs = underwaterChannel(txSigs, scenario.Platforms)
sigs = 1x1 cell array
    {1x1 sonarEmission}

Input Arguments

collapse all

Input sonar signals, specified as an array of sonarEmission objects.

Reflector platforms, specified as a cell array of Platform objects, Platform, or an array of Platform structures:


Unique identifier for the platform, specified as a scalar positive integer. This is a required field which has no default value.


User-defined integer used to classify the type of target, specified as a nonnegative integer. Zero is reserved for unclassified platform types and is the default value.


Position of target in scenario coordinates, specified as a real-valued 1-by-3 vector. This is a required field. There is no default value. Units are in meters.


Velocity of platform in scenario coordinates, specified as a real-valued 1-by-3 vector. Units are in meters per second. The default is [0 0 0].


Speed of the platform in the scenario frame specified as a real scalar. When speed is specified, the platform velocity is aligned with its orientation. Specify either the platform speed or velocity, but not both. Units are in meters per second The default is 0.


Acceleration of the platform in scenario coordinates specified as a 1-by-3 row vector in meters per second-squared. The default is [0 0 0].


Orientation of the platform with respect to the local scenario NED coordinate frame, specified as a scalar quaternion or a 3-by-3 rotation matrix. Orientation defines the frame rotation from the local NED coordinate system to the current platform body coordinate system. Units are dimensionless. The default is quaternion(1,0,0,0).


Angular velocity of platform in scenario coordinates, specified as a real-valued 1-by-3 vector. The magnitude of the vector defines the angular speed. The direction defines the axis of clockwise rotation. Units are in degrees per second. The default is [0 0 0].


Cell array of signatures defining the visibility of the platform to emitters and sensors in the scenario. The default is the cell array {rcsSignature, irSignature, tsSignature}.

If you specify an array of platform structures, set a unique PlatformID for each platform and set the Position field for each platform. Any other fields not specified are assigned default values.

Output Arguments

collapse all

Reflected sonar signals, specified as an array of sonarEmission objects.


[1] Hung, Wen-Liang, and Shou-Jen Chang-Chien. “Learning-Based EM Algorithm for Normal-Inverse Gaussian Mixture Model with Application to Extrasolar Planets.” Journal of Applied Statistics, vol. 44, no. 6, Apr. 2017, pp. 978–99.

[2] Stojanovic, M., and J. Preisig. “Underwater Acoustic Communication Channels: Propagation Models and Statistical Characterization.” IEEE Communications Magazine, vol. 47, no. 1, Jan. 2009, pp. 84–89.

[3] Allen, Jont B., and David A. Berkley. “Image Method for Efficiently Simulating Small‐room Acoustics.” The Journal of the Acoustical Society of America, vol. 65, no. 4, Apr. 1979, pp. 943–50.

Extended Capabilities

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2018b