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:
Set Source and Target
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 GPS pseudorange observations, the GPS 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 GPS 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:
Set Measurement Biases and Noise
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 Pseudorange observation, which uses the measurement bias and noise properties of the object being observed - the GPSReceiver. 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 GPSReceiver object is associated with both PointSolution observations and Pseudorange observations, the bias and noise properties associated with each observation type are called out explicitly:
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 Pseudorange Data
Simulating Pseudorange Observations presents some unique considerations, such as the number of simultaneous observations, highly variable visibility, and modeling the clocks aboard the GPS constellation. This section details how these considerations can be handled within FreeFlyer.
First of all, since the number of GPS spacecraft that are visible can change significantly over time or based on your Spacecraft's orbit, a List of PseudorangeObservations is provided as an argument to the SimulateTrackingData method. The dimension of the List is the maximum number of Pseudorange Observations that can be simulated. If a fewer number of GPS spacecraft are visible, the remaining elements of the List are left empty.
Secondly, since the visibility of GPS spacecraft can change rapidly over time, the user is not required to set the Observer of each PseudorangeObservation in the List. This is done internally by FreeFlyer.
Finally, when simulating Pseudorange Observations the user has two primary options for defining the GPS constellation. The user can define the GPS constellation using a RinexNavFile or define the constellation in script.