Simulating Tracking Data
|Top Previous Next|
You can use FreeFlyer to create simulated observation data for any of the observation types shown in the table below. The first step is to create an instance of the desired Observation object. For example:
This page is covers the following topics:
Once the observation object has been created, you will need to set the observing object, and observed object. The object being observed will be the target Spacecraft, or in the case of GNSS pseudorange observations, the GNSS receiver attached to the target Spacecraft. The observing object will vary based on the type of observation, as shown in the table below.
If a Transponder is specified as the object being observed, this models a transponder delay on the Spacecraft. If a Sensor is specified in addition to a GNSS Receiver, Transponder, or TDRS Transponder, the Sensor's X, Y, and Z position properties will be used to model an offset from the origin of the Spacecraft body coordinate system (BCS) when modeling measurements.
In order to set the observation target and source in script, the SetObjectBeingObserved and SetObserver methods are used. The syntax example below demonstrates how these methods are used in the case of a Ground Station observation.
For spacecraft-to-spacecraft observations, similar syntax can be used to set the observation target and source. The SpacecraftObservation object can store the observing Spacecraft's position at the time of observation through the ObserverPosition property.
The next step is to set a series of flags, indicating what measurement types should be included in the simulated observation. You can also set flags that specify whether or not to apply certain corrections to the observation. The available measurement types and other options vary for each observation type:
 Note: The UseObserverPosition property of the SpacecraftObservation object cannot be set to True when both UseRange/RangeRate and UseLightTimeCorrection are used. When observations are processed in any of the FreeFlyer estimators and UseObserverPostion is set to True, the data in the ObserverPosition array is copied into the Observing Spacecraft's state and there is no propagation. The state of the Observing spacecraft is at the observation epoch, and the ObserverPosition with a velocity of zero. Processing Range/RangeRate data along with light time corrections enabled require backwards propagation of the observer, which cannot be done with only position data. Light time corrections can be enabled for the Right Ascension/Declination or Azimuth/Elevation measurements.
The example below shows how to set the flags relevant to a Ground Station observation via FreeFlyer script:
Note: The tropospheric correction calculation relies on the GroundStation.MonthlyRefractivity property, so it is possible to configure different values for the refractivity when simulating the measurements vs. when processing. Similarly, the ionospheric correction calculation relies on the FF_SolarSystem.IonosphereOptions.ScaleFactor property, which can be configured to scale the ionospheric correction values differently for simulating vs. processing.
The receiving and transmitting antennas for Ground Station Observations can be configured using the SetObserver(), SetTransmittingAntenna(), and SetReceivingAntenna() methods. When only SetObserver() is used, a single GroundStation is both the transmitter and receiver - this is sometimes called a "2-way" observation. The SetTransmittingAntenna() and SetReceivingAntenna() methods can be used to specify two different GroundAntennas as the transmitter and receiver - this is sometimes called a "3-way" observation. In 2-way observations, the ground antenna transmits a signal to the Spacecraft, which generates a phase coherent downlink signal that is transmitted back to the same ground antenna. In 3-way observations, the Spacecraft is tracked by two different GroundStations. The primary station transmits a signal to the Spacecraft, which returns a signal to both GroundStations, allowing the primary station to behave in 2-way mode while the received frequency at the secondary station can be used for comparison. In this way, the 3-way observation is formed at the second station and based off data from both stations, while the 2-way observation only uses data based off the primary station.
GroundStation1 alone forms a 2-way measurement, GroundStation2 as the receiver yields a 3-way measurement
This can be configured in script as follows:
Next, the biases and noise for each measurement must be set. The measurement bias and noise are properties of the Observing object (except when working with the GNSSObservation, which uses the measurement bias and noise properties of the object being observed - the GNSSReceiver. See the table in "Set Source and Target", above). For instance, the Range Bias and Noise properties associated with a GroundStationObservation are associated with the GroundAntenna object.
The example below shows how to set the bias and noise properties for a Ground Station observation that has Canberra as the observing Ground Station:
Also, since the GNSSReceiver object is associated with both PointSolution observations and GNSS pseudorange observations for Global Navigation Satellite System (GNSS) constellations, the bias and noise properties associated with each observation type are called out explicitly as appropriate. An example for PointSolution observations is shown below:
For GNSS pseudorange observations, a noise value must be specified when adding a measurement code to the model. The value can be changed by accessing properties of the Pseudoranges Array for the appropriate GNSS constellation. An example is shown below:
Now, your observation object is set up and ready to be populated with simulated data. This is done using the Spacecraft.SimulateTrackingData() method. The SimulateTrackingData method simulates orbit determination tracking data, which can then be written out to a file or included in an estimation process. The measurement noise, bias, and error model settings are determined by the Observation object (such as a GroundStationObservation) and its associated observing object (such as a GroundAntenna).
Simulating observations from Global Navigation Satellite System (GNSS) constellations, such as GPS or Galileo, presents some unique considerations, including the number of simultaneous observations, highly variable visibility, and modeling the clocks aboard the observing constellations. This section details how these considerations can be handled within FreeFlyer.
First of all, since the number of spacecraft in the observing constellation that are visible can change significantly over time or based on your Spacecraft's orbit, a List of GNSSObservations is provided as an argument to the SimulateTrackingData method. The dimension of the List is the maximum number of GNSS Observations that can be simulated. If a fewer number of observing spacecraft are visible, the remaining elements of the List are left empty.
Secondly, since the visibility of observing spacecraft can change rapidly over time, the user is not required to set the Observer of each GNSSObservation in the List. This is done internally by FreeFlyer, so that the Observer is automatically set up as a Spacecraft in a GNSS constellation such as GPS or Galileo.
When simulating GNSS Observations the user has two primary options for defining the observing constellation. The user can define the constellation using a RinexNavFile or define the constellation in script.
Once the observing constellation (or constellations) has been configured, GNSSObservations can be simulated. The example below demonstrates how to configure the observed object, available measurements based on Rinex codes, and Iono-Free pair data for each Observation. Finally, the SimulateTrackingData method is called to generate GNSS pseudorange data which can then be written out to a file or included in an estimation process.