# What is the fastest satellite in Earth orbit?

A satellite in Earth orbit needs some 7.8 km/s as orbital velocity.

From all the satellites in Earth orbit ever launched which one has or had the highest speed?

• 11 km/s is escape velocity. Anything moving that fast above the atmosphere will not be in a closed orbit. Orbital velocity is a factor of $\sqrt{2}$ smaller, about 7.8 km/s. I would guess the answer to your question is just a bit less than escape velocity -- a moon mission, or a satellite deliberately placed in a highly elliptical orbit, or a satellite that was intended to reach escape velocity, but had a booster failure. Nov 28 '20 at 17:49
• FWIW if you're talking about velocity in (closed) orbit, I think you're looking for a satellite which has the most elliptical orbit with the lowest perigee, and the highest velocity will be at perigee. I don't know what that is unfortunately.
– user21103
Nov 28 '20 at 18:32

If we look at circular low Earth orbits only:

 height  speed     period
km     m/s   hours:min:sec
200   7789.1    1:28:21
300   7730.5    1:30:22
400   7673.2    1:32:24
500   7617.2    1:34:28
600   7562.3    1:36:32
700   7508.7    1:38:37
800   7456.1    1:40:43
900   7404.7    1:42:50
1000   7354.3    1:44:21


The lowest orbit has the fastest speed. But below 400 km orbits decay very fast, 300 km within 6 month, 200 km in about a day.

Now we look at elliptical orbits:

   min   at min    max   at max
height  speed   height  speed      period
km     m/s       km     m/s   hours:min:sec
400   7701.3     500   7589.2    1:33:26
400   7728.9     600   7507.1    1:34:28
400   7755.9     700   7426.9    1:35:30
400   7782.5     800   7348.4    1:36:32
400   7834.3    1000   7196.6    1:38:37
400   9127.0   10000   3774.9    3:26:26
400  10521.9  100000    669.8   37:11:36
400  10677.8  200000    350.3   96:10:06
400  10762.3  400000    179.3  259:31:25


So a very elliptical orbit has the fastest speed, but only when close to Earth at minimal height. But the period gets much longer and the average speed is lower.The last line is an elliptical orbit to the moon and back. This speed record is held by the Apollo missions. (For simplicity, the orbit was calculated without the influence of the Moon.)

All orbits were calculated using this webpage by Bernd Leitenberger. It is only available in German.

• Thank you for editing in the reference! Dec 1 '20 at 16:24
• @called2voyage Thank you for reminding me to include a reference.
– Uwe
Dec 1 '20 at 16:32

Computing the velocity of all space objects at perigee can provide the answer. After processing the latest public satellite catalog from Celestrak, the objects with the highest orbital speed at perigee are:

 Object Name        SSN#    Type    Country     Apogee (km)     Perigee(km) Velocity(m/s)
DELTA 2 R/B(2)      22051   R/B     US          359918.0        185.0       10929.8
PEGASUS R/B(2)      33404   R/B     US          219611.0        247.0       10818.1
FALCON HEAVY R/B    44187   R/B     US          88505.0         329.0       10542.2
FALCON 9 R/B        44050   R/B     US          66488.0         232.0       10521.5
DELTA 2 R/B(2)      30799   R/B     US          85277.0         377.0       10489.9
FALCON 9 R/B        43179   R/B     US          48084.0         237.0       10372.5
FALCON 9 R/B        40426   R/B     US          62208.0         406.0       10346.8
FALCON 9 R/B        45921   R/B     US          45359.0         239.0       10341.4
EQUATOR S           25068   PAY     GER         67160.0         470.0       10325.4


You can download the satcat as a csv from this link, and you can use this Python code snippet below to process the file and compute the speeds.

I hope this is helpful! Manny

import pandas as pd
import math

mu = 3.986004418e14
pi = math.pi

# Computes the SMA from the orbital period
def getSMAfromPeriodMinutes(periodMinutes):
# Gravitational parameter
periodSeconds = periodMinutes*60
SMA_m = (((periodSeconds**2)*mu)/(4*(pi**2)))**(1/3)
return SMA_m

# p is Perigee in km, a is SMA in m
def getPerigeeSpeed(p, a):
x = mu*((2/(p*1000 + 6371000))-(1/a))
return math.sqrt(x)

def getSatcat():
"""
Gets the public satellite catalog from Celestrak
Returns a pandas dataframe of the catalog
"""
return df

if __name__ == '__main__':
df = getSatcat();
# Limit to objects that orbit the Earth only, to exclude some objects that might
# orbit about the Earth-Moon barycenter, Sun, etc...
# Read the format documentation at http://celestrak.com/satcat/satcat-format.php
df = df[df['ORBIT_CENTER']=='EA']
# drop rows with empty perigee fields
df = df.dropna(subset=['PERIGEE'])
# drops rows with objects that have decayed
df = df[df['DECAY_DATE'].isna()]
# drop rows with 0 perigee from the file (re-entered)
df = df[df['PERIGEE']>0]
# compute the SMA
df['SMA_m'] = df.apply(lambda row: getSMAfromPeriodMinutes(row['PERIOD']), axis=1)
# compute the speed at perigee
df['v_PERIGEE'] = df.apply(lambda row: getPerigeeSpeed(row['PERIGEE'], row['SMA_m']),  axis=1)
print(df[['v_PERIGEE']].idxmax())

• "SSN 43470 - QUEQIAO - 10.761 km/s - Perigee: 395 km - Apogee: 383,110 km" The speed is wrong, it is 7672.7 and 7686.2 m/s.
– Uwe
Nov 29 '20 at 22:45
• @Uwe Thank you for your attention. The code above had an error, it is corrected now. I did not pay attention to the fact that QUEQIAO, LONGJIANG 1, and LONGJIANG 2 data is provided by Celestrak with the center of the orbit as the Earth-Moon Barycenter, which makes the automation wrong. I have adjusted the results and the code to bodies obiting the Earth and not the Earth Moon Barycenter or Sun, or anything else...Thank you once again... Nov 29 '20 at 23:29
• "67160.0 470.0 10325.4" is looking good, I get 10326,2 m/s. A very small difference.
– Uwe
Nov 29 '20 at 23:46
• No package, no programming language, just this page : bernd-leitenberger.de/orbits.shtml for the checks and to get the numbers for my answer.
– Uwe
Nov 30 '20 at 0:06
• For anyone interested in using Manny's code that they have so helpfully provided here, you may be interested to know that the license used for contemporary Stack Exchange user content, like Manny's answer, is compatible with GPL v3: creativecommons.org/share-your-work/licensing-considerations/…. Make sure to credit Manny if you use their code! Dec 1 '20 at 16:27

I wrote a Python script to calculate some orbital periods and speeds. I used astropy units to calculate with distances in m or km, masses in kg and the gravitational constant in m^3 / kg s^2. The results in m/s and time units hours, minutes and seconds. If the units of the results are wrong, the numbers may be wrong too.

The results for circular orbits from 200 to 1000 km height:

  height    radius       speed             period
200 km  6567.4 km  7790.6 m / s  1 h 28 min 16.7 s
300 km  6667.4 km  7732.0 m / s  1 h 30 min 18.1 s
400 km  6767.4 km  7674.6 m / s  1 h 32 min 20.5 s
500 km  6867.4 km  7618.5 m / s  1 h 34 min 23.7 s
600 km  6967.4 km  7563.7 m / s  1 h 36 min 27.9 s
700 km  7067.4 km  7510.0 m / s  1 h 38 min 33.0 s
800 km  7167.4 km  7457.4 m / s  1 h 40 min 38.9 s
900 km  7267.4 km  7405.9 m / s  1 h 42 min 45.7 s
1000 km  7367.4 km  7355.5 m / s  1 h 44 min 53.4 s


Elliptical orbits from 500 to 400000 km maximum distance, minimum distance 400 km:

  height semi mayor axis   min speed     max speed            period
500 km    6817.4 km   7590.5 m / s   7702.7 m / s    1 h 33 min 22.0 s
600 km    6867.4 km   7508.4 m / s   7730.3 m / s    1 h 34 min 23.7 s
700 km    6917.4 km   7428.1 m / s   7757.4 m / s    1 h 35 min 25.7 s
800 km    6967.4 km   7349.6 m / s   7784.0 m / s    1 h 36 min 27.9 s
900 km    7017.4 km   7272.8 m / s   7810.1 m / s    1 h 37 min 30.3 s
1000 km    7067.4 km   7197.7 m / s   7835.8 m / s    1 h 38 min 33.0 s
5000 km    9067.4 km   5115.7 m / s   8593.0 m / s    2 h 23 min 12.9 s
10000 km   11567.4 km   3774.6 m / s   9129.1 m / s    3 h 26 min 21.3 s
50000 km   31567.4 km   1231.3 m / s  10255.4 m / s   15 h 30 min 17.5 s
100000 km   56567.4 km    669.6 m / s  10523.9 m / s   37 h 11 min 33.9 s
200000 km  106567.4 km    350.2 m / s  10679.8 m / s   96 h 10 min 16.5 s
400000 km  206567.4 km    179.3 m / s  10764.3 m / s  259 h 32 min 17.6 s


The Python script

import numpy as np
import matplotlib.pyplot as plt
from astropy import units as u
from astropy import constants as c

def secToHMS(timePeriod) :  # converting seconds to hours, minutes and seconds
tP2 = timePeriod.to(u.s).value  # integer division // does not work with units
rest = tP2 // 60
secs = (tP2 % 60) * u.s      #setting the proper unit
hours = (rest // 60) * u.h
mins = (rest % 60) * u.min
return (hours, mins, secs)

# orbital period of circular and elliptical orbits
def orbitalPeriod(semi_mayor_axis, GMbody) :
result = np.sqrt(semi_mayor_axis**3 / GMbody) * 2.0 * np.pi
return result

def orbitalspeed(radius, GMbody) :  # only for circular orbits
return result

sma = semi_mayor_axis.to(u.m)   # semi_mayor_axis from km to m
result = np.sqrt(GMbody * (2.0 / rad_m - 1.0 / sma))
return result

dia_earth_a = 12756.27 * u.km   # equatorial Earth diameter
dia_earth_p = 12713.5 * u.km    # polar Earth diameter

m_earth = 5.97e24 * u.kg        # mass of Earth
m_e = c.M_earth

G = c.G            # gravitaional constant
GMe = c.GM_earth   # product of G with the mass of Earth

print(m_earth, m_e, G, GMe)
print()

# circular orbits from 200 up to 1000 km, steps 100 km
for i in range(200, 1001, 100) :
h = i * u.km  # converting integer height to float with unit km
a = h + rad_earth_ap # distance to earth center
t4 = orbitalPeriod(a, GMe)
t5 = secToHMS(t4)
v = orbitalspeed(a, GMe)
print(format(h, "5.0f"), format(a, "7.1f"), format(v, "7.1f"),
format(t5[0], "2.0f"), format(t5[1], "2.0f"),
format(t5[2], "4.1f"))
print()
print("  height semi mayor axis   min speed     max speed            period")

for i in (500, 600, 700, 800, 900, 1000, 5000, 10000, 50000, 100000, 200000, 400000) :
h = i * u.km  # converting integer height to float with unit km
d_max = h + rad_earth_ap            # maximum distance to earth center
d_min = 400 * u.km + rad_earth_ap   # minimum distance to earth center
a = (d_max + d_min) * 0.5           # semi mayor axis
t4 = orbitalPeriod(a, GMe)
t5 = secToHMS(t4)
v_min = VisVivaSpeed(d_max, a, GMe) # minimal speed at maximal distance
v_max = VisVivaSpeed(d_min, a, GMe) # maximal speed at minimal distance
print(format(h, "6.0f"), format(a, "9.1f"), format(v_min, "8.1f"),
format(v_max, "8.1f"), format(t5[0], "4.0f"), format(t5[1], "2.0f"),
format(t5[2], "4.1f"))