Main Content

phased.ScenarioViewer

Display motion of radars and targets

Description

The phased.ScenarioViewer System object™ creates a 3-D viewer to display the motion of radars and targets that you model in your radar simulation. You can display current positions and velocities, object tracks, position and speed annotations, radar beam directions, and other object parameters. You can change radar features such as beam range and beam width during the simulation. You can use the phased.Platform System object to model moving objects or you can supply your own dynamic models.

This figure shows a four-object scenario consisting of a ground radar, two airplanes, and a ground vehicle. You can view the code that generated this figure in the Visualize Multiplatform Scenario example.

To run the scenario viewer:

  1. Create the phased.ScenarioViewer object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Creation

Description

sIS = phased.ScenarioViewer creates a scenario viewer System object, sIS having default property values.

sIS = phased.ScenarioViewer(Name=Value) returns a scenario viewer System object, sIS, with any specified property Name set to a specified Value. Name must appear inside double quotes (""). You can specify several name-value pair arguments in any order as Name1=Value1,...,NameN=ValueN. For example, to specify a beamwidth of 15, set BeamWidth=15.

example

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Window caption name, specified as a character vector. The Name property and the Title property are different.

Example: "Multitarget Viewer"

Data Types: char

Reference radar index, specified as a positive integer. This property selects one of the radars as the reference radar. Its value must be less than or equal to the number of radars that you specify in the radar_pos argument of the object. This property is tunable. Target range, radial speed, azimuth, and elevation are defined with respect to this radar.

Example: 2

Data Types: double

Enable the display of radar beams, specified as "ReferenceRadar", "None", or "All". This option determines which radar beams to show.

OptionBeams to show
"ReferenceRadar"Show the beam of the radar specified in the ReferenceRadar property.
"None"Do not show any radar beams.
"All"Show the beams for all radars.

This property is tunable.

Example: "All"

Data Types: char

Vertical and horizontal radar beam widths, specified as a positive real-valued scalar, a 2-element column vector, an N-element row vector, or a 2-by-N matrix. N is the number of radars. All scalar, vector, and matrix entries are positive, real-valued numbers between 0–360°. Units are in degrees.

Value SpecificationInterpretation
ScalarThe horizontal and vertical radar beam widths are equal and identical for all radars.
2-element column vectorThe first row specifies the horizontal beam width. The second row specifies the vertical beam width. These values are identical for all radars.
N-element row vectorEach element applies to one radar. Vertical and horizontal beam widths for each radar are equal.
2-by-N matrixEach column applies to one radar. The first row specifies the horizontal beam width and the second row specifies the vertical beam width for each radar.

When CameraPerspective is set to "Radar", the System object uses this property to calculate the value of CameraViewAngle. This property is tunable.

Example: [20 10; 18 9]

Data Types: double

Radar beam range, specified as a positive scalar or an N-element row vector, where N is the number of radars. Units are in meters. When specified as a scalar, all radars have the same beam range. When specified as a vector, each element corresponds to one radar. This property is tunable.

Example: [1000 1500 850]

Data Types: double

Beam steering directions of radars, specified as a real-valued 2-element column vector of positive values or 2-by-N real-valued matrix of positive values. N is the number of radars. Beam steering angles are relative to the local coordinate axes of each radar. Units are in degrees. Each column takes the form [azimuthangle;elevationangle]. When only one column is specified, the beam steering directions of all radars are the same. Azimuth angles are from –180° to 180°, and the elevation angles are from –90° to 90°. This property is tunable.

Example: [20 60 35; 5 0 10]

Data Types: double

Enable the velocity input arguments, radar_velocity and tgt_velocity, of the object, specified as true or false. Setting this property to true enables the input arguments. When this property is false, velocity vectors are estimated from the position change between consecutive updates divided by the update interval. The update interval is the inverse of the UpdateRate value.

Example: false

Data Types: logical

Enable the input of local coordinate system orientation axes, radar_laxes and tgt_laxes, to the object, specified as false or true. Setting this property to true enables the input arguments. When this property is false, the orientation axes are aligned with the global coordinate axes.

Example: true

Data Types: logical

Update rate of scenario viewer, specified as a positive scalar. Units are in hertz.

Example: 2.5

Data Types: double

Display title, specified as a character vector. The Title property and the Name property are different. The display title appears within the figure at the top. The name appears at the top of the figure window. This property is tunable.

Example: "Radar and Target Display"

Data Types: char

Names assigned to radars and targets, specified as a 1-by-(N+M) cell array of character vectors. N is the number of radars and M is the number of targets. Order the cell entries by radar names, followed by target names. Names appear in the legend and annotations. When you set PlatformNames to "Auto", names are created sequentially starting from "Radar 1" for radars and "Target 1" for targets.

Example: {'Stationary Radar','Mobile Radar','Airplane'}

Data Types: cell

Length of the visibility of object tracks, specified as a positive integer or (N+M)-length vector of positive integers. N is the number of radars and M is the number of targets. When TrailLength is a scalar, all tracks have the same length. When TrailLength is a vector, each element of the vector specifies the length of the corresponding radar or target trajectory. Order the entries by radars, followed by targets. Each call to the object generates a new visible point. This property is tunable.

Example: [100,150,100]

Data Types: double

Camera perspective, specified as "Auto", "Custom", or "Radar". When you set this property to "Auto", the System object estimates appropriate values for the camera position, orientation, and view angle to show all tracks. When you set this property to "Custom", you can set the camera position, orientation, and angles using camera properties or the camera toolbar. When you set this property to "Radar", the System object determines the camera position, orientation, and angles from the radar position and the radar beam steering direction. This property is tunable.

Example: "Radar"

Data Types: char

Camera position, specified as an [x,y,z] vector of real values. Units are in meters. This property applies when you set CameraPerspective to "Custom". When you do not specify this property, the System object chooses values based on your display configuration. This property is tunable.

Example: [100,50,40]

Data Types: double

Camera orientation, specified as a [pan,tilt,roll] vector of positive, real values. Units are in degrees. Pan and roll angles take values from –180° to 180°. The tilt angle takes values from –90° to 90°. Camera rotations are performed in the order: pan, tilt, and roll. This property applies when you set CameraPerspective to "Custom". When you do not specify this property, the System object chooses values based on your display configuration. This property is tunable.

Example: [180,45,30]

Data Types: double

Camera view angle, specified as a real-valued scalar. Units are in degrees. View angle values are in the range 0° to 360°. This property applies when you set CameraPerspective to "Custom". When you do not specify this property, the System object chooses values based on your display configuration. This property is tunable.

Example: 75

Data Types: double

Option to show the viewer legend, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Option to show the ground plane of the viewer scenario, specified as true or false. This property is tunable.

Example: false

Data Types: logical

Annotate radar and target tracks with names, specified as true or false. You can define custom platform names using PlatformNames. This property is tunable.

Example: false

Data Types: logical

Option to annotate radar and target tracks with positions, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Option to annotate radar and target tracks with the range from the reference radar, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Option to annotate radar and target tracks with altitude, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Option to annotate radar and target tracks with speed, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Option to annotate radar and target tracks with radial speed, specified as false or true. Radial speed is relative to the reference radar. This property is tunable.

Example: true

Data Types: logical

Option to annotate radar and target tracks with azimuth and elevation angles relative to the reference radar, specified as false or true. This property is tunable.

Example: true

Data Types: logical

Scenario viewer window size and position, specified as a [left bottom width height] vector of positive, real values. Units are in pixels.

  • left sets the position of the left edge of the window.

  • bottom sets the position of the bottom edge of the window.

  • width sets the width of the window.

  • height sets the height of the window.

When you do not specify this property, the window is positioned at the center of the screen, with width and height taking the values 410 and 300 pixels, respectively. This property is tunable.

Example: [100,200,800,500]

Data Types: double

Option to reduce the plot rate to improve performance, specified as true or false. Set this property to true to update the viewer at a reduced rate. Set this property to false to update the viewer with each call to the object. This mode adversely affects viewer performance. This property is tunable.

Example: false

Data Types: logical

Usage

Description

sSV(radar_pos,tgt_pos) updates the scenario viewer display with new radar positions, radar_pos, and target positions, tgt_pos. This syntax applies when VelocityInputPort and OrientationInputPort are set to false.

sSV(radar_pos,tgt_pos,radar_velocity,tgt_velocity) also specifies the radar velocity, radar_velocity, and target velocity, tgt_velocity. This syntax applies when VelocityInputPort is set to true and OrientationInputPort is set to false.

sSV(radar_pos,radar_laxes,tgt_pos,tgt_laxes) also specifies the radar orientation axes, radar_laxes, and the target orientation axes, tgt_laxes. This syntax applies when VelocityInputPort is set to false and OrientationInputPort is set to true.

sSV(radar_pos,radar_velocity,radar_laxes,tgt_pos,tgt_velocity,tgt_laxes) also specifies velocity and orientation axes when VelocityInputPort and OrientationInputPort are set to true.

Input Arguments

expand all

Radar positions, specified as a real-valued 3-by-N matrix. N is the number of radar tracks and must be equal to or greater than one. Each column has the form [x;y;z]. Position units are in meters.

Example: [100,250,75;0,20,49;300,5,120]

Data Types: double

Target positions, specified as a real-valued 3-by-N matrix. M is the number of target tracks and must be equal to or greater than one. Each column has the form [x;y;z]. Position units are in meters.

Example: [200,40;10,40;305,15]

Data Types: double

Radar velocities, specified as a real-valued 3-by-N matrix. N is the number of radar tracks and must be equal to or greater than one. Each column has the form [vx;vy;vz]. The dimensions of radar_velocity must match the dimensions of radar_pos. Velocity units are in meters per second.

Example: [100,10,0;4,0,7;100,500,0]

Data Types: double

Target velocities, specified as a real-valued 3-by-M matrix. M is the number of target tracks and must be equal to or greater than one. Each column has the form [vx;vy;vz]. The dimensions of tgt_velocity must match the dimensions of target_position. Velocity units are in meters per second.

Example: [100,10,0;4,0,7;100,500,0]

Data Types: double

Local coordinate axes of radar, specified as a real-valued 3-by-3-by-N array. N is the number of radar tracks. Each page (third index) represents a 3-by-3 orthogonal matrix that specifies the local coordinate axes of one radar. The columns are the unit vectors that form the x, y, and z axes of the local coordinate system. Array units are dimensionless.

Example: [100,10,0;4,0,7;100,500,0]

Data Types: double

Local coordinate axes of target, specified as a real-valued 3-by-3-by-M array. M is the number of target tracks. Each page (third index) represents a 3-by-3 orthogonal matrix that specifies the local coordinate axes of one radar. The columns are the unit vectors that form the x, y, and z axes of the local coordinate system. Array units are dimensionless.

Example: [100,10,0;4,0,7;100,500,0]

Data Types: double

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
resetReset internal states of System object

Examples

collapse all

Visualize the tracks of a radar and a single airplane target. The radar is stationary and the airplane is moving in a straight line. Maintain the radar beam pointing at the airplane.

Create the radar and airplane platform System objects™. Set the update rate to 0.1 s.

updateRate = 0.1;
radarPlatform = phased.Platform(...
    InitialPosition=[0;0;10], ...
    Velocity=[0;0;0]);
airplanePlatforms = phased.Platform(...
    InitialPosition=[5000.0;3500.0;6000.0], ...
    Velocity=[-300;0;0]);

Create the phased.ScenarioViewer System object. Show the radar beam and annotate the tracks with position, speed, and altitude.

sSV = phased.ScenarioViewer(BeamRange=5000.0,UpdateRate=updateRate,...
    PlatformNames={'Ground Radar','Airplane'},ShowPosition=true,...
    ShowSpeed=true,ShowAltitude=true,ShowLegend=true);

Run the scenario. At each step, compute the angle to the target. Use that angle to steer the radar beam toward the target.

for i = 1:100
    [radar_pos,radar_vel] = radarPlatform(updateRate);
    [tgt_pos,tgt_vel] = airplanePlatforms(updateRate);
    [rng,ang] = rangeangle(tgt_pos,radar_pos);
    sSV.BeamSteering = ang;
    step(sSV,radar_pos,radar_vel,tgt_pos,tgt_vel);
    pause(0.1);
end

Visualize the tracks of an airborne radar and a ground vehicle target. The airborne radar is carried by a drone flying at an altitude of 5 km.

Create the drone radar and ground vehicle using phased.Platform System objects™. Set the update rate to 0.1 s.

updateRate = 0.1;
drone = phased.Platform(...
    "InitialPosition",[100;1000;5000], ...
    "Velocity",[400;0;0]);
vehicle = phased.Platform(MotionModel="Acceleration", ...
    InitialPosition=[5000.0;3500.0;0.0],...
    InitialVelocity=[40;5;0],Acceleration=[0.1;0.1;0]);

Create the phased.ScenarioViewer System object. Show the radar beam and annotate the tracks with position, speed, and altitude.

viewer = phased.ScenarioViewer(BeamRange=8000.0, BeamWidth=2,UpdateRate=updateRate, ...
    PlatformNames={'Drone Radar','Vehicle'},ShowPosition=true, ...
    ShowSpeed=true,ShowAltitude=true,ShowLegend=true,Title="Vehicle Tracking Radar");

Run the scenario. At each step, compute the angle to the target. Use that angle to steer the radar beam toward the target.

for i = 1:100
    [radar_pos,radar_vel] = drone(updateRate);
    [tgt_pos,tgt_vel] = vehicle(updateRate);
    [rng,ang] = rangeangle(tgt_pos,radar_pos);
    viewer.BeamSteering = ang;
    viewer(radar_pos,radar_vel,tgt_pos,tgt_vel)
    pause(.1)
end

This example shows how to create and display a multiplatform scenario containing a ground-based stationary radar, a turning airplane, a constant-velocity airplane, and a moving ground vehicle. The turning airplane follows a parabolic flight path while descending at a rate of 20 m/s.

Specify the scenario refresh rate at 0.5 Hz. For 150 steps, the time duration of the scenario is 300 s.

updateRate = 0.5;
N = 150;

Set up the turning airplane using the Acceleration model of the phased.Platform System object™. Specify the initial position of the airplane by range and azimuth from the ground-based radar and its elevation. The airplane is 10 km from the radar at 60° azimuth and has an altitude of 6 km. The airplane is accelerating at 10 m/s² in the negative x-direction.

airplane1range = 10.0e3;
airplane1Azimuth = 60.0;
airplane1alt = 6.0e3;
airplane1Pos0 = [cosd(airplane1Azimuth)*airplane1range;...
    sind(airplane1Azimuth)*airplane1range;airplane1alt];
airplane1Vel0 = [400.0;-100.0;-20];
airplane1Accel = [-10.0;0.0;0.0];
airplane1platform = phased.Platform(MotionModel="Acceleration", ...
    AccelerationSource="Input port",InitialPosition=airplane1Pos0,...
    InitialVelocity=airplane1Vel0,OrientationAxesOutputPort=true,...
    InitialOrientationAxes=eye(3));

Set up the stationary ground radar at the origin of the global coordinate system. To simulate a rotating radar, change the ground radar beam steering angle in the processing loop.

groundRadarPos = [0,0,0]';
groundRadarVel = [0,0,0]';
groundradarplatform = phased.Platform(MotionModel="Velocity", ...
    InitialPosition=groundRadarPos,Velocity=groundRadarVel, ...
    InitialOrientationAxes=eye(3));

Set up the ground vehicle to move at a constant velocity.

groundVehiclePos = [5e3,2e3,0]';
groundVehicleVel = [50,50,0]';
groundvehicleplatform = phased.Platform(MotionModel="Velocity",...
    InitialPosition=groundVehiclePos,Velocity=groundVehicleVel,...
    InitialOrientationAxes=eye(3));

Set up the second airplane to also move at constant velocity.

airplane2Pos = [8.5e3,1e3,6000]';
airplane2Vel = [-300,100,20]';
airplane2platform = phased.Platform(MotionModel="Velocity", ...
    InitialPosition=airplane2Pos,Velocity=airplane2Vel, ...
    InitialOrientationAxes=eye(3));

Set up the scenario viewer. Specify the radar as having a beam range of 8 km, a vertical beam width of 30°, and a horizontal beam width of 2°. Annotate the tracks with position, speed, altitude, and range.

BeamSteering = [0;50];
viewer = phased.ScenarioViewer(BeamRange=8.0e3,BeamWidth=[2;30],UpdateRate=updateRate, ...
    PlatformNames={'Ground Radar','Turning Airplane','Vehicle','Airplane 2'},ShowPosition=true, ...
    ShowSpeed=true,ShowAltitude=true,ShowLegend=true,ShowRange=true, ...
    Title="Multiplatform Scenario",BeamSteering=BeamSteering);

Step through the display processing loop, updating radar and target positions. Rotate the ground-based radar steering angle by four degrees at each step.

for n = 1:N
    [groundRadarPos,groundRadarVel] = groundradarplatform(updateRate);
    [airplane1Pos,airplane1Vel,airplane1Axes] = airplane1platform(updateRate,airplane1Accel);
    [vehiclePos,vehicleVel] = groundvehicleplatform(updateRate);
    [airplane2Pos,airplane2Vel] = airplane2platform(updateRate);
    viewer(groundRadarPos,groundRadarVel,[airplane1Pos,vehiclePos,airplane2Pos],...
        [airplane1Vel,vehicleVel,airplane2Vel]);
    BeamSteering = viewer.BeamSteering(1);
    BeamSteering = mod(BeamSteering + 4,360.0);
    if BeamSteering > 180.0
        BeamSteering = BeamSteering - 360.0;
    end
    viewer.BeamSteering(1) = BeamSteering;
    pause(0.2);
end

Version History

Introduced in R2016a