%radarChannel  Atmospheric propagation and reflections of radar signals
%   EMPROP = radarChannel(EMTX, PLATS) returns radar emissions, EMPROP,
%   which are the combination of the input radar emissions, EMTX, as well
%   as the reflections of each of the input emissions off each of the
%   platforms, PLATS. EMTX and EMPROP are arrays of radarEmission objects.
%   
%   If EMTX is a cell array of radarEmission objects, then EMPROP is a
%   cell array of radarEmission objects. If EMTX is an array of
%   radarEmission objects, then EMPROP is an array of radarEmission
%   objects.
%
%   PLATS is cell array of platform objects provided by the Platforms
%   property on the scenario or an array of platform structures with fields
%   as listed <a href="matlab:help('fusion.internal.interfaces.DataStructures/platformStruct')">here</a>.
%
%   If an array of platform structures is used, the PlatformID and Position
%   fields are required. All of the remaining fields will be assigned
%   default values if not specified.
%
%   radarChannel(... 'Name', Value, ...) specifies additional
%   name-value pair arguments described below:
%
%   'HasOcclusion'  A real, finite, scalar value. When true or non-zero,
%                   the channel models occlusion of the input radar
%                   emissions, EMTX, along the propagation path to each
%                   platform, PLATS. If another platform blocks the
%                   propagation to a reflecting platform, a reflection is
%                   not returned for that reflecting platform. When set to
%                   false or zero, occlusion is not modeled between the
%                   input radar emissions and each reflecting platform. The
%                   default is true.
%
%   EXAMPLE 1: Reflect a radar emission off a platform.
%
%   % Define a platform for the emitter.
%   plat = struct('PlatformID', 1, 'Position', [0 0 0], ...
%                 'Signatures', {rcsSignature});
%
%   % Create a radar emission.
%   emTx = radarEmission('EmitterIndex', 1, ...
%                        'PlatformID', plat.PlatformID, ...
%                        'OriginPosition', plat.Position);
%   
%   % Define a target to reflect the emission.
%   tgt = struct('PlatformID', 2, 'Position', [10 0 0], ...
%                'Signatures', {rcsSignature});
%
%   % Reflect the emission off the target.
%   emProp = radarChannel(emTx, [plat tgt]);
%
%   % The first propagated emission is the same as the emitter's emission.
%   emProp(1)
%
%   % The second emission is the reflected emission. Its PlatformID is set
%   % to the PlatformID of the target from which it was reflected.
%   emProp(2)
%
%   EXAMPLE 2: Reflect a radar emission using radarEmitter.
%
%   % Create a radarEmitter.
%   emitter = radarEmitter(1);
%
%   % Define a platform for the emitter.
%   plat = struct('PlatformID', 1, 'Position', [0 0 0], ...
%                 'Signatures', {rcsSignature});
%
%   % Add a target platform to reflect the emitted signal.
%   tgt = struct('PlatformID', 2, 'Position', [30 0 0], ...
%                'Signatures', {rcsSignature});
%
%   % Emit the signal.
%   simulationTime = 0;
%   emTx = step(emitter, plat, simulationTime)
%
%   % Reflect the signal off the target platform.
%   emProp = radarChannel(emTx, [plat tgt])
%
%   See also: radarEmitter, radarEmission.

 %   Copyright 2018-2022 The MathWorks, Inc.

