Main Content

Satellite

Satellite in satellite scenario

    Description

    Satellite defines a satellite in satellite scenario object.

    Creation

    You can create Satellite objects using the satellite function of satelliteScenario object.

    Properties

    expand all

    You can set this property only when calling the satellite function. After you call satellite function, this property is read-only.

    Satellite name, specified as a comma-separated pair consisting of 'Name' and a string scalar, string vector, character vector or a cell array of character vectors.

    • If only one satellite is added, specify Name as a string scalar or a character vector.

    • If multiple satellites are added, specify Name as a string scalar, character vector, string vector or a cell array of character vectors. All satellites added as a string scalar or a character vector are assigned the same specified name. The number of elements in the string vector or cell array of character vector must equal the number of satellites being added. Each satellite is assigned the corresponding name from the vector or cell array.

    The default value when satellite is added to the satellite scenario using

    • Keplerian orbital elements, TLE file, timeseries, or timetable — "Satellite ID", where ID is assigned by the satellite scenario.

    • SEM almanac file or RINEX GPS navigation data — "PRN:prnValue", where prnValue is an integer denoting the pseudorandom noise code of the satellite as specified in the SEM almanac file.

    • RINEX Galileo navigation data — "GAL Sat IF: id", where "id" is the satellite ID of the Galileo satellite defined in the RINEX navigation data.

    Data Types: string

    This property is set internally by the simulator and is read-only.

    Satellite ID assigned by the simulator, specified as a positive scalar.

    You can set this property only when calling the conicalSensor. After you call the conicalSensor function, this property is read-only.

    Conical sensors attached to the Satellite, specified as a row vector of conical sensors.

    You can set this property only when calling gimbal. After you call gimbal, this property is read-only.

    Gimbals attached to the Satellite, specified as the comma-separated pair consisting of 'Gimbals' and a row vector of Gimbal objects.

    You can set this property only when calling transmitter function. After you call the transmitter function, this property is read-only.

    Transmitters attached to the Satellite, specified as a row vector of Transmitter objects.

    You can set this property only when calling the receiver. After you call the receiver function, this property is read-only.

    Receivers attached to the satellite, specified as a row vector of Receiver objects.

    You can set this property only when calling Satellite. After you call Satellite, this property is read-only.

    Access analysis objects, specified as a row vector of Access objects.

    You can set this property only when calling groundTrack. After you call groundTrack, this property is read-only.

    Ground track of the Satellite, specified as a row vector of GroundTrack objects.

    Orbit object parameters for a satellite, specified as an orbit object. Only these object properties are relevant for this function.

    Color of the orbit, specified as an RGB triplet, hexadecimal color code, a color name, or a short name.

    For a custom color, specify an RGB triplet or a hexadecimal color code.

    • An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1], for example, [0.4 0.6 0.7].

    • A hexadecimal color code is a character vector or a string scalar that starts with a hash symbol (#) followed by three or six hexadecimal digits, which can range from 0 to F. The values are not case sensitive. Therefore, the color codes "#FF8800", "#ff8800", "#F80", and "#f80" are equivalent.

    Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.

    Color NameShort NameRGB TripletHexadecimal Color CodeAppearance
    "red""r"[1 0 0]"#FF0000"

    Sample of the color red

    "green""g"[0 1 0]"#00FF00"

    Sample of the color green

    "blue""b"[0 0 1]"#0000FF"

    Sample of the color blue

    "cyan" "c"[0 1 1]"#00FFFF"

    Sample of the color cyan

    "magenta""m"[1 0 1]"#FF00FF"

    Sample of the color magenta

    "yellow""y"[1 1 0]"#FFFF00"

    Sample of the color yellow

    "black""k"[0 0 0]"#000000"

    Sample of the color black

    "white""w"[1 1 1]"#FFFFFF"

    Sample of the color white

    "none"Not applicableNot applicableNot applicableNo color

    Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB® uses in many types of plots.

    RGB TripletHexadecimal Color CodeAppearance
    [0 0.4470 0.7410]"#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980]"#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250]"#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560]"#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880]"#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330]"#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840]"#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    Example: 'blue'

    Example: [0 0 1]

    Example: '#0000FF'

    Visual width of orbit in pixels, specified as a scalar in the range (0, 10).

    The line width cannot be thinner than the width of a pixel. If you set the line width to a value that is less than the width of a pixel on your system, the line displays as one pixel wide.

    Visibility mode of orbit graphic, specified as one of these values:

    • 'inherit' — Visibility of the graphic matches that of the parent

    • 'manual' — Visibility of the graphic is not inherited and is independent of that of the parent

    Data Types: char | string

    You can set this property on satellite object creation and then this property becomes read-only.

    Name of the orbit propagator used for propagating the satellite position and velocity, specified as "sgp4", "sdp4", "two-body-keplerian", "ephemeris","gps", or "galileo". The value depends on how you specify the satellite.

    • Timetable, table, timeseries, or tscollectionOrbitPropagator is "ephemeris".

    • SEM almanac file or RINEX data containing GPS navigation message — OrbitPropagator can be any value except "ephemeris" and "galileo". The initialization is performed using the "gps" orbit propagator.

    • RINEX data containing Galileo navigation message — OrbitPropagator is "galileo" and can be any value except "ephemeris" and "gps" The initialization is performed using the "galileo" orbit propagator..

    • TLE file — OrbitPropagator can be "two-body-keplerian", "sgp4", or "sdp4". If the orbital period is less than 225 minutes, the initialization is performed using "sgp4". Otherwise, the initialization is performed using "sdp4".

    • Keplerian elements — OrbitPropagator can be "two-body-keplerian", "sgp4", or "sdp4".

    If the satellite is initialized using a timetable, table, timeseries object, or tscollection object, the default propagator is "ephemeris". If the initialization is performed using a SEM almanac file, the default propagator is "gps". If the initialization is performed using RINEX data, the default propagator is "gps" for GPS satellites and "galileo" for Galileo satellites. Otherwise, if the orbital period is less than 225 minutes, the default propagator is "sgp4", else "sdp4".

    If RINEX data defines both valid GPS and Galileo navigation messages, OrbitPropagator cannot be specified as "gps" or "galileo" name value argument. However, it can still be specified as "two-body-keplerian", "sgp4", or "sdp4". The default propagator is "gps" for GPS satellites and "galileo" for Galileo satellites.

    OrbitPropagator is not available for ephemeris data inputs (timetable or timeseries). In these cases, satellite automatically selects "ephemeris" orbit propagator.

    Color of the marker, specified as a comma-separated pair consisting of 'MarkerColor' and either an RGB triplet or a string or character vector of a color name.

    For a custom color, specify an RGB triplet or a hexadecimal color code.

    • An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1], for example, [0.4 0.6 0.7].

    • A hexadecimal color code is a character vector or a string scalar that starts with a hash symbol (#) followed by three or six hexadecimal digits, which can range from 0 to F. The values are not case sensitive. Therefore, the color codes "#FF8800", "#ff8800", "#F80", and "#f80" are equivalent.

    Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.

    Color NameShort NameRGB TripletHexadecimal Color CodeAppearance
    "red""r"[1 0 0]"#FF0000"

    Sample of the color red

    "green""g"[0 1 0]"#00FF00"

    Sample of the color green

    "blue""b"[0 0 1]"#0000FF"

    Sample of the color blue

    "cyan" "c"[0 1 1]"#00FFFF"

    Sample of the color cyan

    "magenta""m"[1 0 1]"#FF00FF"

    Sample of the color magenta

    "yellow""y"[1 1 0]"#FFFF00"

    Sample of the color yellow

    "black""k"[0 0 0]"#000000"

    Sample of the color black

    "white""w"[1 1 1]"#FFFFFF"

    Sample of the color white

    "none"Not applicableNot applicableNot applicableNo color

    Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB uses in many types of plots.

    RGB TripletHexadecimal Color CodeAppearance
    [0 0.4470 0.7410]"#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980]"#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250]"#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560]"#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880]"#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330]"#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840]"#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    Size of the marker, specified as a comma-separated pair consisting of 'MarkerSize' and a real positive scalar less than 30. The unit is in pixels.

    State of Satellite label visibility, specified as a comma-separated pair consisting of 'ShowLabel' and numerical or logical value of 1 (true) or 0 (false).

    Data Types: logical

    Font color of the Satellitelabel, specified as a comma-separated pair consisting of 'LabelFontColor' and either an RGB triplet or a string or character vector of a color name.

    For a custom color, specify an RGB triplet or a hexadecimal color code.

    • An RGB triplet is a three-element row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range [0,1], for example, [0.4 0.6 0.7].

    • A hexadecimal color code is a character vector or a string scalar that starts with a hash symbol (#) followed by three or six hexadecimal digits, which can range from 0 to F. The values are not case sensitive. Therefore, the color codes "#FF8800", "#ff8800", "#F80", and "#f80" are equivalent.

    Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.

    Color NameShort NameRGB TripletHexadecimal Color CodeAppearance
    "red""r"[1 0 0]"#FF0000"

    Sample of the color red

    "green""g"[0 1 0]"#00FF00"

    Sample of the color green

    "blue""b"[0 0 1]"#0000FF"

    Sample of the color blue

    "cyan" "c"[0 1 1]"#00FFFF"

    Sample of the color cyan

    "magenta""m"[1 0 1]"#FF00FF"

    Sample of the color magenta

    "yellow""y"[1 1 0]"#FFFF00"

    Sample of the color yellow

    "black""k"[0 0 0]"#000000"

    Sample of the color black

    "white""w"[1 1 1]"#FFFFFF"

    Sample of the color white

    "none"Not applicableNot applicableNot applicableNo color

    Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB uses in many types of plots.

    RGB TripletHexadecimal Color CodeAppearance
    [0 0.4470 0.7410]"#0072BD"

    Sample of RGB triplet [0 0.4470 0.7410], which appears as dark blue

    [0.8500 0.3250 0.0980]"#D95319"

    Sample of RGB triplet [0.8500 0.3250 0.0980], which appears as dark orange

    [0.9290 0.6940 0.1250]"#EDB120"

    Sample of RGB triplet [0.9290 0.6940 0.1250], which appears as dark yellow

    [0.4940 0.1840 0.5560]"#7E2F8E"

    Sample of RGB triplet [0.4940 0.1840 0.5560], which appears as dark purple

    [0.4660 0.6740 0.1880]"#77AC30"

    Sample of RGB triplet [0.4660 0.6740 0.1880], which appears as medium green

    [0.3010 0.7450 0.9330]"#4DBEEE"

    Sample of RGB triplet [0.3010 0.7450 0.9330], which appears as light blue

    [0.6350 0.0780 0.1840]"#A2142F"

    Sample of RGB triplet [0.6350 0.0780 0.1840], which appears as dark red

    Font size of the Satellite label, specified as a comma-separated pair consisting of 'LabelFontSize' and a positive scalar in the range [6 30].

    Object Functions

    accessAdd access analysis objects to satellite scenario
    aerCalculate azimuth angle, elevation angle, and range of another satellite or ground station in NED frame
    conicalSensorAdd conical sensor to satellite scenario
    gimbalAdd gimbal to satellite or ground station
    groundTrackAdd ground track object to satellite in scenario
    orbitalElementsOrbital elements of satellites in scenario
    pointAtPoint satellite at target
    receiverAdd receiver to satellite scenario
    transmitterAdd transmitter to satellite scenario
    statesObtain position and velocity of satellite
    showShow object in satellite scenario viewer
    hideHide satellite scenario entity from viewer

    Examples

    collapse all

    Create a satellite scenario object.

    startTime = datetime(2020,5,5,0,0,0);
    stopTime = startTime + days(1);
    sampleTime = 60;                                      %seconds
    sc = satelliteScenario(startTime,stopTime,sampleTime);

    Add a satellite from a TLE file to the scenario.

    tleFile = "eccentricOrbitSatellite.tle";
    sat1 = satellite(sc,tleFile,"Name","Sat1")
    sat1 = 
      Satellite with properties:
    
                   Name:  Sat1
                     ID:  1
         ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
                Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
           Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
              Receivers:  [1x0 satcom.satellitescenario.Receiver]
               Accesses:  [1x0 matlabshared.satellitescenario.Access]
            GroundTrack:  [1x1 matlabshared.satellitescenario.GroundTrack]
                  Orbit:  [1x1 matlabshared.satellitescenario.Orbit]
        OrbitPropagator:  sdp4
            MarkerColor:  [0.059 1 1]
             MarkerSize:  6
              ShowLabel:  true
         LabelFontColor:  [1 1 1]
          LabelFontSize:  15
    
    

    Add a satellite from Keplerian elements to the scenario and specify its orbit propagator to be "two-body-keplerian".

    semiMajorAxis = 6878137;                                                                    %m
    eccentricity = 0;
    inclination = 20;                                                                           %degrees
    rightAscensionOfAscendingNode = 0;                                                          %degrees
    argumentOfPeriapsis = 0;                                                                    %degrees
    trueAnomaly = 0;                                                                            %degrees
    sat2 = satellite(sc,semiMajorAxis,eccentricity,inclination,rightAscensionOfAscendingNode,...
        argumentOfPeriapsis,trueAnomaly,"OrbitPropagator","two-body-keplerian","Name","Sat2")
    sat2 = 
      Satellite with properties:
    
                   Name:  Sat2
                     ID:  2
         ConicalSensors:  [1x0 matlabshared.satellitescenario.ConicalSensor]
                Gimbals:  [1x0 matlabshared.satellitescenario.Gimbal]
           Transmitters:  [1x0 satcom.satellitescenario.Transmitter]
              Receivers:  [1x0 satcom.satellitescenario.Receiver]
               Accesses:  [1x0 matlabshared.satellitescenario.Access]
            GroundTrack:  [1x1 matlabshared.satellitescenario.GroundTrack]
                  Orbit:  [1x1 matlabshared.satellitescenario.Orbit]
        OrbitPropagator:  two-body-keplerian
            MarkerColor:  [0.059 1 1]
             MarkerSize:  6
              ShowLabel:  true
         LabelFontColor:  [1 1 1]
          LabelFontSize:  15
    
    

    Add access analysis between the two satellites.

    ac = access(sat1,sat2);

    Determine the times when there is line of sight between the two satellites.

    accessIntervals(ac)
    ans=15×8 table
        Source    Target    IntervalNumber         StartTime                EndTime           Duration    StartOrbit    EndOrbit
        ______    ______    ______________    ____________________    ____________________    ________    __________    ________
    
        "Sat1"    "Sat2"           1          05-May-2020 00:09:00    05-May-2020 01:08:00      3540          1            1    
        "Sat1"    "Sat2"           2          05-May-2020 01:50:00    05-May-2020 02:47:00      3420          1            1    
        "Sat1"    "Sat2"           3          05-May-2020 03:45:00    05-May-2020 04:05:00      1200          1            1    
        "Sat1"    "Sat2"           4          05-May-2020 04:32:00    05-May-2020 05:26:00      3240          1            1    
        "Sat1"    "Sat2"           5          05-May-2020 06:13:00    05-May-2020 07:10:00      3420          1            1    
        "Sat1"    "Sat2"           6          05-May-2020 07:52:00    05-May-2020 08:50:00      3480          1            1    
        "Sat1"    "Sat2"           7          05-May-2020 09:30:00    05-May-2020 10:29:00      3540          1            1    
        "Sat1"    "Sat2"           8          05-May-2020 11:09:00    05-May-2020 12:07:00      3480          1            2    
        "Sat1"    "Sat2"           9          05-May-2020 12:48:00    05-May-2020 13:46:00      3480          2            2    
        "Sat1"    "Sat2"          10          05-May-2020 14:31:00    05-May-2020 15:27:00      3360          2            2    
        "Sat1"    "Sat2"          11          05-May-2020 17:12:00    05-May-2020 18:08:00      3360          2            2    
        "Sat1"    "Sat2"          12          05-May-2020 18:52:00    05-May-2020 19:49:00      3420          2            2    
        "Sat1"    "Sat2"          13          05-May-2020 20:30:00    05-May-2020 21:29:00      3540          2            2    
        "Sat1"    "Sat2"          14          05-May-2020 22:08:00    05-May-2020 23:07:00      3540          2            2    
        "Sat1"    "Sat2"          15          05-May-2020 23:47:00    06-May-2020 00:00:00       780          2            2    
    
    

    Visualize the line of sight between the satellites.

    play(sc);

    Set up the satellite scenario.

    startTime = datetime(2021,8,5);
    stopTime = startTime + days(1);
    sampleTime = 60;                                      % seconds
    sc = satelliteScenario(startTime,stopTime,sampleTime);

    Add satellites to the scenario from a SEM almanac file.

    sat = satellite(sc,"gpsAlmanac.txt","OrbitPropagator","gps");

    Visualize the GPS constellation.

    v = satelliteScenarioViewer(sc);

    References

    [1] Hoots, Felix R., and Ronald L. Roehrich. Models for propagation of NORAD element sets. Aerospace Defense Command Peterson AFB CO Office of Astrodynamics, 1980.

    Version History

    Introduced in R2021a