Orbit Determination #
In this post, I’ll dive into orbit determination — the science of estimating the position and velocity of a satellite in space. This is part of my ongoing research and contributions to an open-source project called Nyx, a Rust-based astrodynamics toolkit.
Why Is Orbit Determination Important? #
Orbit determination is essential for space missions. It allows us to track and predict the movement of satellites using measurements from ground stations. The “state” of a satellite includes its position and velocity — both of which are needed to determine its orbit.
Satellite Position #
Definition #
The satellite’s position is defined by a position vector — a 3D vector from the center of the Earth to the satellite. It’s typically expressed in the Earth-Centered Inertial (ECI) frame, which considers Earth’s rotation.
To determine this vector, we often rely on three observational measurements from ground stations:
- Azimuth: The angle between the satellite and the North, measured clockwise (in degrees).
- Elevation: The angle between the satellite and the horizon (in degrees).
- Range: The straight-line distance between the ground station and the satellite (in kilometers).
These values are obtained via radio signals. The round-trip time of the signal gives us the range, assuming the speed of light is constant.

Figure 1: Azimuth and elevation of a satellite. Source
Example Calculation #
Let’s say our satellite is located at point A(-2.8, 4.13, 4). Using measured azimuth, elevation, and range, we can derive this position with trigonometry:
Given:
- Distance = 6.39 km
- Elevation = 38.74°
- Azimuth = 235.86°
Altitude (z-axis) #
let distance = 6.39;
let elevation = 38.74;
let altitude = distance * elevation.to_radians().sin();Result:
altitude ≈ 3.99 km(close to actual z = 4)
x Coordinate #
let azimuth = 235.86;
let x = distance * elevation.to_radians().cos() * azimuth.to_radians().sin();Result:
x ≈ -2.8 km
y Coordinate #
let azimuth = 63.26;
let y = distance * azimuth.to_radians().cos() * elevation.to_radians().cos();Result:
y ≈ 4.13 km
This shows how trigonometric relations using elevation and azimuth angles help convert observations into position vectors.

Figure 2: Visual representation of satellite position derived from measurements.

Figure 3: Observing satellite position and velocity using azimuth, elevation, and Doppler effect.
Satellite Velocity #
Doppler Effect #
The Doppler effect is the change in frequency of a wave due to the relative motion between the transmitter (satellite) and the receiver (ground station). When a satellite moves toward a ground station, the received frequency increases; when it moves away, the frequency decreases.
This shift can be used to determine radial velocity — the component of velocity along the line of sight. By combining Doppler measurements with position data, we can compute the full velocity vector.
(WIP)