Main Content

step

System object: phased.IsoSpeedUnderwaterPaths
Namespace: phased

Create propagation paths in an isospeed multipath sound channel

Description

Note

Instead of using the step method to perform the operation defined by the System object™, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

example

pathmat = step(channel,srcpos,destpos,srcvel,destvel,T) returns the propagation paths matrix, pathmat, for a multipath underwater acoustic channel. The matrix describes one or two-way propagation from the signal source position, srcpos, to the signal destination position, destpos. The velocity of the signal source is specified in srcvel and the velocity of the signal destination is specified in destvel. T is the step time interval.

When you use this method for one-way propagation, srcpos refers to the origin of the signal and destpos to the receiver. One-way propagation modeling is useful for passive sonar and underwater communications.

When you use this method for two-way propagation, destpos now refers to the reflecting target, not the sonar receiver. A two-way path consists of a one-way path from source to target and then along an identical one-way path from target to receiver (which is collocated with the source). Two-way propagation modeling is useful for active sonar systems.

example

[pathmat,dop,aloss,destang,srcang] = step(channel,srcpos,destpos,srcvel,destvel,T) also returns the Doppler factor, dop, the frequency dependent absorption loss, aloss, the receiver arrival angles, destang, and the srcang transmitting angles.

When you use this method for two-way propagation, destang now refers to the reflecting target, not the sonar receiver.

Note

The object performs an initialization the first time the object is executed. This initialization locks nontunable properties and input specifications, such as dimensions, complexity, and data type of the input data. If you change a nontunable property or an input specification, the System object issues an error. To change nontunable properties or inputs, you must first call the release method to unlock the object.

Note

Instead of using the step method to perform the operation defined by the System object, you can call the object with arguments, as if it were a function. For example, y = step(obj,x) and y = obj(x) perform equivalent operations.

Input Arguments

expand all

Isospeed underwater channel paths, specified as a phased.IsoSpeedUnderwaterPaths System object.

Example: phased.IsoSpeedUnderwaterPaths

Source of the sonar signal, specified as a real-valued 3-by-1 column vector. Position units are meters.

Example: [1000;100;500]

Data Types: double

Destination position of the signal, specified as a real-valued 3-by-1 column vector. Position units are in meters.

Example: [0;0;0]

Data Types: double

Velocity of signal source, specified as a real-valued 3-by-1 column vector. Velocity units are in meters per second.

Example: [10;0;5]

Data Types: double

Velocity of signal destination, specified as a real-valued 3-by-1 column vector. Velocity units are in meters per second.

Example: [0;0;0]

Data Types: double

Elapsed time of current step, specified as a positive scalar. Time units are in seconds.

Example: 0.1

Data Types: double

Output Arguments

expand all

Propagation paths matrix, returned as a real-valued 3-by-N matrix. N is the number of paths in the channel. Each column represents a path. When you set NumPathsSource to 'Auto', N is 51. In this case, any columns filled with NaN do not correspond to found paths. The matrix rows represent:

RowData
1Propagation delays for each path. Units are in seconds.
2Total reflection coefficient for each path. Units are dimensionless
3Spreading loss for each path. Units are in dB.

Except for the direct path, paths consists of alternating surface and bottom reflections. The losses for multiple reflections are multiplied. Bottom loss per reflection is specified by the BottomLoss property. The loss at the surface is –1 indicating no loss, but only a 180° phase change. This is because the air-water interface surface is a pressure-release surface.

Data Types: double

Doppler factor, returned as a real-valued N-by-1 row vector where N is the number of paths. The Doppler factor multiplies the transmitted frequency to produce the Doppler-shifted received frequency for each path. The Doppler shift is defined as the difference between the transmitted frequency and the received frequency. The Doppler factor also defines the time compression or expansion of a signal. Units are dimensionless.

Data Types: double

Frequency-dependent absorption loss, returned as a real-valued K-by-(N+1) matrix. K is the number of frequencies specified in the LossFrequencies property. N is the number of paths returned. The first column of aloss contains the absorption loss frequencies in Hz. You specify the frequencies using the LossFrequencies property. The remaining columns contain the absorption losses for each frequency. There is one column for each path. Units are in dB.

Data Types: double

Angles of paths at destination, returned as a real-valued 2-by-N matrix. Each column contains the direction of the received path with respect to the destination position as azimuth and elevation, [az;el]. Units are in degrees.

Data Types: double

Angles of paths from source, returned as a real-valued 2-by-N matrix. Each column contains the direction of the transmitted path with respect to the source position as azimuth and elevation, [az;el]. Units are in degrees.

Data Types: double

Examples

expand all

Create a 5-path underwater sound channel and display the propagation path matrix. Assume the source is stationary and the receiver is moving along the x-axis towards the source at 20 kph. Assume one-way propagation.

speed = -20*1000/3600;
numpaths = 5;
channelpaths = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200,'BottomLoss',10, ...
    'NumPathsSource','Property','NumPaths',numpaths,'CoherenceTime',5);
tstep = 1;
srcpos = [0;0;-160];
rcvpos = [500;0;-50];
srcvel = [0;0;0];
rcvvel = [speed;0;0];
pathmat = channelpaths(srcpos,rcvpos,srcvel,rcvvel,tstep);
disp(pathmat)
    0.3356    0.3556    0.4687    0.3507    0.3791
    1.0000   -1.0000   -0.3162    0.3162   -0.3162
   54.1847   54.6850   57.0766   54.5652   55.2388

The first row contains the time delay in seconds. The second row contains the bottom reflection loss coefficients, and the third row contains the spreading loss in dB. The reflection loss coefficient for the first path is 1.0 because the direct path has no boundary reflections. The reflection loss coefficient for the second path is -1.0 because the path has only a surface reflection.

Create a 7-path underwater sound channel and display the propagation path matrix. Assume the source is stationary and the target is moving along the x-axis towards the source at 20 kph. Assume two-way propagation.

speed = -20*1000/3600;
numpaths = 7;
channelpaths = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200,'BottomLoss',10, ...
    'NumPathsSource','Property','NumPaths',numpaths,'CoherenceTime',5,...
    'TwoWayPropagation',true);
tstep = 1;
srcpos = [0;0;-160];
tgtpos = [500;0;-50];
srcvel = [0;0;0];
tgtvel = [speed;0;0];
[pathmat,dop,aloss,tgtangs,srcangs] = channelpaths(srcpos,tgtpos,srcvel,tgtvel,tstep);
disp(pathmat)
    0.6712    0.7112    0.9374    1.0354    0.7014    0.7581    1.0152
    1.0000    1.0000    0.1000    0.1000    0.1000    0.1000    0.0100
  108.3693  109.3699  114.1531  115.8772  109.1304  110.4775  115.5355

The first row contains the time delay in seconds. The second row contains the bottom reflection loss coefficients, and the third row contains the spreading loss in dB. The reflection loss coefficient for the first path is 1.0 because the direct path has no boundary reflections. The reflection loss coefficient for the second path is -1.0 because the path has only a surface reflection.

Create an underwater sound channel and display the propagation paths which are found automatically. Assume the source is stationary and the receiver is moving along the x-axis towards the source at 20 kph. Assume two-way propagation.

speed = -20*1000/3600;
channelpaths = phased.IsoSpeedUnderwaterPaths('ChannelDepth',200,'BottomLoss',5, ...
    'NumPathsSource','Auto','CoherenceTime',5,'TwoWayPropagation',true);
tstep = 1;
srcpos = [0;0;-160];
tgtpos = [500;0;-50];
srcvel = [0;0;0];
tgtpos = [speed;0;0];
[pathmat,dop,aloss,rcvangs,srcangs] = channelpaths(srcpos,tgtpos,srcvel,tgtpos,tstep);

Display the first 7 columns of pathmat. Some columns are filled with NaNs.

disp(pathmat(:,1:7))
    0.2107    0.2107       NaN       NaN       NaN       NaN       NaN
    1.0000    1.0000       NaN       NaN       NaN       NaN       NaN
   88.1753   88.1753       NaN       NaN       NaN       NaN       NaN

Select the column indices of the valid paths from the entire matrix.

idx = find(~isnan(pathmat(1,:)))
idx = 1×4

     1     2    27    28

Display the valid paths information.

validpaths = pathmat(:,idx)
validpaths = 3×4

    0.2107    0.2107    0.3159    0.3159
    1.0000    1.0000    0.3162    0.3162
   88.1753   88.1753   95.2131   95.2131

The first row contains the time delays in seconds. The second row contains the bottom reflected loss coefficients, and the third row contains the spreading losses.

Version History

Introduced in R2017a