Satellite Model:

An intended purpose of the satellite model is to predict the visibility
of satellites from positions on Earth at specific times, to provide the
apparent angle above the horizon, or to provide the area covered by a
satellite at specific times.

The model uses second order motion equations, and should be accurate
for the intended purpose, for perhaps up to a week forward prediction
from ephemeris data.  However, daily ephemeris updates are recommended
for best accuracy.  Tidal, Lunar, atmospheric drag, and Solar perturbation
forces are not considered in this model, but could be added if needed.
The model is most accurate for medium Earth orbits (MEO).

Internally, the model operates within the celestial reference frame.
The x-axis is aligned with the vernal equinox (that is, the positive x-axis
points in the direction of the Sun from Earth at the time of the Vernal Equinox,
the positive y-axis points in the direction of the Sun from Earth at the time 
of the Winter Solstice, and the positive z-axis points toward the North pole).
The equator of the celestial sphere is aligned with the equator of the Earth.
The origin is the center of the Earth.  A spherical Earth is assumed, with
uniform radius of 6374 km (sea-level).  Satellite altitudes are given as the 
distance from the center of Earth.  For circular orbits, this is also 
the radius of the orbit.  (Or mean radius for elliptical orbits.)

Times are accepted as UTC hours, but are internally resolved to the starting
reference time of the simulation in seconds.  The day and month of the
year are needed to establish Earth's Ascension position.
(They can also be used in calculating apparent Sun position, as
 might be used in determining sky-noise-temperature or space-weather.) 
The Vernal Equinox reference is taken as 12:00 UTC on March 20.
The model calculates Earth's rotational angle from that time to a
specified time, using sidereal days, so that satellite RA ephemeris can be 
related.  (Every 23 hours, 54 minutes 4.09 seconds the Earth completes one
rotation within the celestial sphere.)

Ephemeris data is accepted by specifying the following satellite
information when at apogee or perigee:
  - Altitude and velocity in km and km/h, respectively.
     (Altitude is relative Earth's center.)
  - Right Ascension (RA) in hours, minutes, seconds.  
     (This is relative the celestial sphere, and sets the satellite's 
      'longitude' within the fixed celestial reference frame.)
  - Present declination in degrees, and sign of motion.  The first is the 
     current angle relative the celestial equator.  Positive degrees 
     correspond to the Northern hemisphere, negative in the Southern.  
     The second value is either +1 or -1, indicating whether the satellite
     is presently in the phase of moving North = +1, or South = -1.  
     These values set the declination phase, and are not applicable for
     purely equatorial orbits.  (If maximum declination occurs at apogee or
     perigee, then the sign does not matter.)
  - Orbital declination in degrees.  This is the inclination of the 
     satellite's orbital plane, or the maximum declination.
     It is also the absolute value of the angle of motion relative the
     equator.  (0-degrees = equatorial orbit, 90-degrees = polar orbit.)  
  - Time in UTC hours, minutes, seconds (h:m:s), day and month of the 
     year (mm/dd).


Note - By specifying velocity at apogee or perigee, we do not need
  further information about the satellite's specific velocity vector,
  because the motion at those points is, by definition, tangential to the
  center of the Earth.  We also do not need to know whether the apogee
  or perigee values were given, because the model itself will reveal 
  the remaining motion attributes from the velocity and altitude alone.

Note - Forward time predictions are assumed to be for periods much less 
  than one year (ex. minutes, hours, days).  A prediction from Dec 30
  to Jan 2 is therefore assumed to be about 4-days; not negative time,
  nor multiple years.  Therefore, we do not need the year value.


The Earth observer's time and location need only be resolved to the
Lat/Lon position in degrees and time in UTC hours.



How Date/Time is handled:
 The satellite model accepts time in UTC (Coordinated Universal Time), also
 known as Zulu time.  This is 5 hours ahead of US EST (UTC-5).


Calculate_Satellite_Orbits Utility

Several convenience utilities are provided. Calculate_Satellite_Orbit accepts one of: 1. A desired orbital radius (altitude). It then calculates the orbital period and velocity for a circular orbit at that altitude; 2. A desired orbital period. It then calculates the orbital radius (altitude) and velocity for a circular orbit with that period; 3. An altitude and velocity ephemeris. It then calculates the resulting period, eccentricity, and velocity/altitude min/max ranges. In all cases it generates a plot of the trajectory. The last mode is useful for determining the parameters of non-circular or highly elliptical orbits. It accepts an altitude and velocity at apogee or perigee, and produces the orbital parameters concerning eccentricity, including the eccentricity in percent and km, the min and max altitudes and velocities in km and km/h respectively, and the resulting orbital period in hours, minutes, and seconds.

Satellite Model Implementation Details

For more information about the internal implementation details of how the satellite model works, see Satellite Model Implementation Details. The details may be helpful for anyone modifying or maintaining the code.

Example and Test Models

Several example models are provided under the examples_and_tests directory. These are also helpful in testing or validating the satellite model. Descriptions and instructions are provided within the documentation block of each file. Several of the examples plot the Sun angle for days of the year (seasons) or hours of the day, for given locations on the Earth. These serve as useful tests, because the Sun position is well-known over long periods of time. (IE. Sun rises in the East in the AM, is highest around noon at Summer Solstice, etc..) The following examples/tests are provided in the $CSIM_MODEL_LIBS/vpt/tests_and_examples directory: solar_seasons_plot.sim - Plots Noon Sun angle versus day of the year. solar_sweep_plot.sim - Plots Sun's angle versus hour of a given day. solar_position.sim - Calculates Sun angle for a given location & time/date. solar_orbit_day.sim - Model's Sun as a 1-yr-orbit satellite, plots Sun angle vs hour. solar_orbit_year.sim - Model's Sun as a 1-yr-orbit satellite, plots Sun angle vs day.

Satellite Model Functions:

The satellite model is available under the $CSIM_MODEL_LIBS/vpt/vehicles library, and is contained in the satellite.sim file. The satellite model provides the user-callable functions described below. In normal usage, the SatModel_Instantiate() is called to instantiate each satellite and to set its initial parameters. At later times, the SatModel_ViewAngle() function may be called to determine if the satellite is visible, and if so, its apparent elevation and azimuth, from a given location on Earth. The SatModel_Coverage() function may be called to determine the satellite's coverage region at any time. Periodically, when new ephemeris data becomes available, the model's state can be updated by calling the SatModel_UpdateEphemeris() function. Below are detailed descriptions of the user-callable functions provided by the Satellite model: - SatModel_Instantiate( char *name, char *type, float altitude, float velocity, int RA_hrs, int RA_mins, float RA_secs, float present_declination, int motion_sign, float orbital_declination, int month, int day, int hour, int minutes, float second ) This function instantiates a satellite instance with the specified name, type, and orbital parameters. Later queries can be made about the satellite's position relative to Earth observers. Internal calculations are performed in double-precision. Parameters: - Altitude and velocity in km and km/h, respectively. (Altitude is relative Earth's center.) - Right Ascension (RA) in hours, minutes, seconds. (This is relative the celestial sphere, and sets the satellite's absolute position within the fixed celestial reference frame.) - Present declination in degrees, and sign of motion. The first is the current angle relative the celestial equator. Positive degrees correspond to the Northern hemisphere, negative in the Southern. The second value is either +1 or -1, indicating whether the satellite is presently in the phase of moving North = +1, or South = -1. These values set the declination phase, and are not applicable for purely equatorial orbits. - Orbital declination in degrees. This is the inclination of the satellite's orbital plane, or the maximum declination. It is also the absolute value of the angle of motion relative the equator. (0-degrees = equatorial orbit, 90-degrees = polar orbit.) - Time in UTC hours, minutes, seconds (h:m:s), day and month of the year (mm/dd). - SatModel_ViewAngle( char *name, int month, int day, int hour, int minutes, float second, float latitude, float longitude, float *azimuth, float *elevation ) This function returns the apparent angle to a satellite at a given time, from a given observer Lat/Lon position on Earth, in azimuth and elevation angles in degrees. Zenith elevation is 90.0, and horizon is 0-degrees. If out of view, the elevation is reported as zero or negative. Azimuth 0-degrees is North and 90-degrees is East. Note that the last two values are return values. - SatModel_Coverage( char *name, int month, int day, int hour, int minutes, float second ) This function returns the radius (in km) of visible Earth surface at the specified time. The coverage area can be computed from this as: Pi * r^2. - SatModel_UpdateEphemeris( char *name, float altitude, float velocity, int RA_hrs, int RA_mins, float RA_secs, float declination, int motion_sign, float orbital_declination, int month, int day, int hour, int minutes, float second ) This function accepts similar arguments as SatModel_Instantiate for the purpose of updating the vehicle's position and trajectory states from new ephermis data.

Back Up to Vehicle Platform Terrains Model Libraries