# Does the “17” really mean anything with respect to GNSS orbits being rational factions of a sidereal day?

This answer to Why are orbital periods different for different GNSS positioning system constellations? suggests that the orbital periods of the four large GNSSS constellations are linked to the rotation period of the earth (the sidereal day) by rational numbers with 17 or 34 as the denominator in order to facilitate roughly twice-daily contact with each constellation's ground stations. It uses this answer to Why are the GPS constellation satellites in such a high orbit? to help support this.

GPS uses 1/2 of a sidereal day, 11:58:02 and an orbit height of 20192 km.

Other satellite navigation use similar orbit periods, 17 orbits per 8 to 10 sidereal days.

Glonass uses 8/17 of a sidereal day, 11:15:48 and an orbit height of 19140 km.

BeiDou uses 9/17 of a sidereal day, 12:40:16 and an orbit height of 21224 km.

Galileo uses 10/17 of a sidereal day, 14:04:45 and an orbit height of 23232 km.

The ratio of 1/2 may be also written as 17/34, the other ones as 16/34 , 18/34 and 20/34. The differences are small. Thus all satellites could be measured about twice a day from the same ground stations.

If you go to the Wikipedia page for Satellite navigation and look at the table, the 17's do in fact show up in a table there (shown below with some rows suppressed for compactness:

I've downloaded TLEs from Celestrack using these links and propagated them using Skyfield and I don't see any evidence of substantially repeating ground track orbits.

Considering that since these constellations exist in MEO specifically so that any location will see many of them constantly, is there really anything to this "17" argument forwarded by both this and this answer? Or is it just a red herring?

above: Ground tracks for 72 hours using TLE groups from Celestrak and SGP4 propagation using Skyfield. Axes are geographical longitude and latitude and the lines are the subsatellite points at 0.03 hour time steps.

Note: The Beidou system has satellites in both MEO and Geosynchronous orbits (~28,000 and ~42,000 km radii).

above: Earth-centered inertial orbits for 72 hours using TLE groups from Celestrak and SGP4 propagation using Skyfield at 0.03 hour time steps.

class Constellation(object):
def __init__(self, name):
self.name = name
self.sats = []

class Satellite(object):
def __init__(self, name):
self.name = name

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

earth   = data['earth']

print earth.at(ts.now()).position.km   # for no reason at all

fnames = ('beidou.txt', 'galileo.txt', 'glo-ops.txt',   'gps-ops.txt')
names  = ('Beidou',     'Galileo',     'Glonass (ops)', 'GPS (ops)'  )

# Build constellations and EarthSatellites
constellations = []
for fname, name in zip(fnames, names):
const = Constellation(name)
constellations.append(const)
with open(fname, 'r') as infile:
const.lines = lines
satnames, L1s, L2s = [lines[i::3] for i in range(3)]
for name, L1, L2 in zip(satnames, L1s, L2s):
if len(name)<30 and L1[0]=='1' and L2[0]=='2':
sat = Satellite(name.strip())
const.sats.append(sat)
sat.L1, sat.L2 = L1, L2
sat.satobj = EarthSatellite(L1, L2) # add the Skyfield object

for const in constellations:
print "constellation name: ", const.name
print [sat.name for sat in const.sats]
print len(const.sats), len(const.lines)/3

hours = np.arange(0, 72, 0.03)
time  = ts.utc(2018, 6, 21, hours)  # start June 21, 2018

# Propagate TLEs
for const in constellations:
for sat in const.sats:
satobj_at    = sat.satobj.at(time)
sat.pos      = satobj_at.position.km
sat.subpoint = satobj_at.subpoint()
sat.lon      = sat.subpoint.longitude.degrees
sat.lat      = sat.subpoint.latitude.degrees
breaks       = np.where(np.abs(sat.lon[1:]-sat.lon[:-1]) > 60)

sat.plot_lon         = sat.lon[:-1]
sat.plot_lat         = sat.lat[:-1]
sat.plot_lon[breaks] = np.nan    # avoid ugly wraparounds

if True:
plt.figure()
things = ('-b', '-g', '-r', '-c')
fs, lw = 16, 0.7
for i, (const, color) in enumerate(zip(constellations, things)):
plt.subplot(2, 2, i+1)
for sat in const.sats:
plt.plot(sat.plot_lon, sat.plot_lat, color, linewidth=lw)
plt.title(const.name, fontsize=fs)
plt.show()

if True:
fig = plt.figure(figsize=[9, 7])  # [12, 10]
things = ('-b', '-g', '-r', '-c')
for i, (const, color) in enumerate(zip(constellations, things)):
ax  = fig.add_subplot(2, 2, i+1, projection='3d')
for sat in const.sats:
x, y, z = sat.pos
ax.plot(x, y, z, color)
ax.set_title(const.name, fontsize=16)
plt.show()

• I think the number of revolutions per sideral day was choosen to allow satellites position measurement from the ground stations twice per day. For measurement a satellite should be visible from 3 or more ground stations simultaneously. GPS was designed that way, but I have no information about this for the other systems. May be a plot of the relation of satellites to ground stations will be helpful. – Uwe Jun 22 '18 at 10:19
• If you choose a period of 8 sideral days and close to 2 revolutions per day but not exactly 2, you may select 15 or 17 revolutions per sideral day. For a period of 9 sideral days, 17 or 19 revolutions are possible. But for a period of 10 days, 19 or 21 revolutions should be used, not 17. – Uwe Jun 22 '18 at 15:07
• @Uwe I'm still not sure the 17 in the table in Wikipedia has any specific significance, so that might be a good place to start. So far, it looks like they are not actually in orbits who's periods are exact rational fractions times the sidereal day, otherwise the ground tracks would be repeating. – uhoh Jun 22 '18 at 16:59
• To see repeating ground tracks, you should look for a interval of 8, 9 or 10 sideral days, not only 72 hours. GPS ground tracks should repeat in 1 or 2 sideral days, about, but not exactly 24 or 48 hours. All satellites of a constellation may be to many for a plot, but a single one will give a better plot. – Uwe Jun 23 '18 at 9:11
• @Uwe you've actually solved my problem! Do you think you could post your comment as a short answer? In this case the answer is very simple so really a sentence or two is all that's needed. I can accept it, then add a supplementary answer with a calculation backing that up. – uhoh Nov 6 '18 at 0:58