I know there are a lot of geostationary satellites out there, but I'm wondering - are there any geosynchronous satellites that are not geostationary (ie - have a notable inclination to their orbit)?
-
3relevant: Why do the geosynchronous TDRS satellites have this distribution of inclinations? and also Is TDRS-M (TDRS-13) where it's supposed to be? – uhoh Jul 18 '19 at 23:02
-
2I read somewhere IRNSS use such orbits. – Manu H Jul 19 '19 at 04:56
-
@ManuH yep, they're on my list! Hopefully someone will ask *Why do some satellites use such high inclination geosynchronous orbits?" – uhoh Jul 19 '19 at 06:28
-
@uhoh I think this file answers that question in a visual way – Manu H Jul 19 '19 at 07:49
-
@ManuH that's a special case though and easy to explain. Most of these orbits are circular, so the top and bottom half of the pattern are symmetrical. QZSS is in a substantially elliptical Molniya-like orbit so that they spend most of their time in the upper half, over Japan. I'm pretty sure these three are QZSS https://i.stack.imgur.com/XyW0F.png None of the other orbits look like that, so they will need a different explanation. – uhoh Jul 19 '19 at 08:34
1 Answers
Are there any satellites in geosynchronous but not geostationary orbits?
Yep, lots!
Apparently there are various advantages to being synchronous even when oscillating wildly in position above/below the Earth's equator (up to +/- 60 degrees!)
After seeing the figures below in A New Look at the GEO and Near-GEO Regimes: Operations, Disposals,and Debris (found in this comment) I decided to go satellite hunting myself
left: "Fig. 3. The number and complexity of geosynchronous orbits for operational spacecraft increased significantly from 1999 to 2011. Only spacecraft whose orbital parameters are available at www.spacetrack.org are shown above." right: "Fig. 7. Highly-inclined geosynchronous communications and navigations systems (Sirius, Beidou, and Michibiki) have been deployed since 2000"
I went to Celestrak's NORAD Two-Line Element Sets; Current Data and downloaded https://celestrak.org/NORAD/elements/geo.txt I then propagated them all in Python using Skyfield (script below) and started plotting.
There are 513 TLEs in the list. Here are their current inclinations versus year of launch:

There are 18 satellites with an inclination greater than 19 degrees:
AMC-14 2008 20.4237
SDO 2010 29.7791
QZS-1 (MICHIBIKI-1) 2010 41.3507
BEIDOU 8 2011 58.8155
BEIDOU 9 2011 54.4339
BEIDOU 10 2011 52.1119
IRNSS-1A 2013 30.184
IRNSS-1B 2014 29.253
IRNSS-1D 2015 29.1615
BEIDOU 17 2015 53.522
BEIDOU 20 2015 53.1176
IRNSS-1E 2016 29.3272
BEIDOU IGSO-6 2016 56.5705
QZS-2 (MICHIBIKI-2) 2017 43.5483
QZS-4 (MICHIBIKI-4) 2017 40.7615
IRNSS-1I 2018 29.3069
BEIDOU IGSO-7 2018 55.0396
BEIDOU-3 IGSO-1 2019 55.0177
Here are some gratuitous 3D plots of the 18 with inclinations greater than 19 degrees:
Side view:

Top view:

"Family portrait"

Python 3 script:
class Object(object):
def __init__(self, name, L1, L2):
self.name = name.strip()
self.L1 = L1
self.L2 = L2
year = int(L1[9:11]) + 1900
if year < 1957:
year += 100
self.year = year
self.inc = float(L2[8:16])
import numpy as np
import matplotlib.pyplot as plt
from skyfield.api import Topos, Loader, EarthSatellite
from mpl_toolkits.mplot3d import Axes3D
fname = 'Celestrak satellites in GEO.txt' # https://celestrak.org/NORAD/elements/geo.txt
with open(fname, 'r') as infile:
lines = infile.readlines()
TLEs = zip(*[[line for line in lines[n::3]] for n in range(3)])
load = Loader('~/Documents/fishing/SkyData') # single instance for big files
ts = load.timescale()
de421 = load('de421.bsp')
earth = de421['earth']
zero = Topos(0.0, 0.0)
minutes = np.arange(0, 24*60, 4) # last one is 23h 56m
times = ts.utc(2019, 7, 19, 0, minutes)
Doing a quick ugly de-rotate to imitate earth-fixed coordinates.
zeropos = zero.at(times).position.km
theta = np.arctan2(zeropos[1], zeropos[0])
cth, sth, zth, oth = [f(-theta) for f in (np.cos, np.sin, np.zeros_like, np.ones_like)]
R = np.array([[cth, -sth, zth], [sth, cth, zth], [zth, zth, oth]])
objects = []
for i, (name, L1, L2) in enumerate(TLEs):
o = Object(name, L1, L2)
objects.append(o)
o.orbit = EarthSatellite(L1, L2).at(times).position.km
if not i%20:
print (i,)
data = [(o.year, o.inc) for o in objects]
plt.figure()
year, inc = zip(*data)
plt.plot(year, inc, '.k', markersize=8)
plt.xlabel('launch year', fontsize=16)
plt.ylabel('current inclination (degs)', fontsize=16)
plt.title('Geosynchronous TLEs from Celestrak', fontsize=16)
plt.show()
high_incs = [o for o in objects if o.inc > 19]
fig = plt.figure(figsize=[10, 8]) # [12, 10]
ax = fig.add_subplot(1, 1, 1, projection='3d')
for o in high_incs:
orbit = (R * o.orbit).sum(axis=1)
x, y, z = orbit
ax.plot(x, y, z)
ax.plot(x[:1], y[:1], z[:1], 'ok')
ax.set_xlim(-40000, 40000)
ax.set_ylim(-40000, 40000)
ax.set_zlim(-40000, 40000)
plt.show()
fig = plt.figure(figsize=[10, 8]) # [12, 10]
ax = fig.add_subplot(1, 1, 1, projection='3d')
for o in objects:
orbit = (R * o.orbit).sum(axis=1)
x, y, z = orbit
ax.plot(x, y, z)
# ax.plot(x[:1], y[:1], z[:1], 'ok')
ax.set_xlim(-40000, 40000)
ax.set_ylim(-40000, 40000)
ax.set_zlim(-40000, 40000)
plt.show()
for o in high_incs:
print(o.name, o.year, o.inc)
-
14
-
24@ThePiachu thanks! As usual, I'll go to any length to avoid doing what I should have been doing today ;-) https://www.bbc.co.uk/programmes/w3csy9k0 – uhoh Jul 19 '19 at 08:34
-
2Are they all navigation satellites? I can see how it makes sense for regional satellite navigation. IRNSS (Indian), BEIDOU (Chinese) and QZS (Japanese) are, at least. – gerrit Jul 19 '19 at 08:53
-
1@gerrit hey I guess you are right, except for the first two in the list (AMC-14 and SDO) which have interesting situations of their own – uhoh Jul 19 '19 at 09:01
-
3Re You can still communicate with them continuously using a single ground station, if it is somewhat near the equator. The highly inclined (63.4°) and somewhat elliptical (0.2 to 0.3) geosynchronous satellites follow Tundra orbits. Such orbits aren't of much use at equatorial sites because tracking antennae are needed to communicate with such satellites and the satellites are rarely in view at a given equatorial site. Where they are of use is the extreme latitudes, typically 60+°N, where the satellites appear to dwell at apogee. – David Hammen Jul 19 '19 at 09:13
-
1
-
9@gerrit, the second on that list, SDO, is a solar observatory. It produces images at a very high cadence, so rather than using the DSN where it would saturate the bandwidth, it has a dedicated ground station, thus the need for being geosynchronous. It can't be geostationary because that would mean having the earth occult the sun once every day, where the inclined orbit means the earth only occults the sun once a day for a week every 6 months.. – Ghedipunk Jul 19 '19 at 16:08
-
Please bear with me, if this is a stupid question, as I humbly acknowledge that I am no coder, but why did you use 'if True:' in your code? – Matthew Christopher Bartsh May 06 '21 at 21:23
-
1@MatthewChristopherBartsh oh that serves no specific function when running. It's a leftover from the way I work and I didn't clean it up. I often have scripts that take a while to run, and when I'm optimizing the layout of the plot I don't want to re-run the whole thing. I run them from a command line using
python -i myscript.pyso when it's finished the namespace and results are preserved. If I want to simply replot, I just copy/paste a section that beginsif True:at the python prompt in the command window to run it. – uhoh May 06 '21 at 21:28 -
1@MatthewChristopherBartsh Sometimes I want to debug the calculation itself and don't want to generate a dozen plots if one is all I need to see the results for debugging purposes, so I toggle them all to False, or change them all (except one) to
if verbose:and setverbose = False. I don't think it's an ideal workflow but it works for me. – uhoh May 06 '21 at 21:31 -
1@MatthewChristopherBartsh please feel free to edit and delete them here, they serve no useful purpose in this context whatsoever! Stack Exchange is a collaborative effort and helpful edits to other people's posts are generally encouraged. Thanks! – uhoh May 06 '21 at 21:33
-
1My editing out of the useless 'if True:' statements was accepted. Hooray! It's the first time I've improved someone else's code. I can sort of see how it could help with debugging. Unfortunately the details you provided are way above my head, at this stage. – Matthew Christopher Bartsh May 06 '21 at 23:49
-
2@MatthewChristopherBartsh Python is so friendly and flexible, it makes doing all kinds of things so much easier. I found learning Python to be really liberating. Have fun! – uhoh May 07 '21 at 00:12
-
I know some people frown on 'if True' statements, but it just occurred to me to ask whether there is a case for leaving them in, as you did, on the grounds that they make the code easier to modify, and possibly easier to read? I mean, if you found them useful when testing the code, would not someone else when modifying the code? – Matthew Christopher Bartsh May 08 '21 at 16:12
-
@MatthewChristopherBartsh Python is one of the most widely used programming languages in the world for serious programming; writing packages for example that will be widely distributed as open source and constantly edited and modified by many other programmers. Sticking to certain style standards and maintaining best readability is critical in those cases, so anything that makes someone stop and ask "Hey why is it like this?" is considered bad. I agree with all that 110%. But I just write short, disposable scripts to do specific jobs or communicate a certain point. – uhoh May 08 '21 at 23:39
-
@MatthewChristopherBartsh I sometimes refer to my scrips as "scrappy" to let people know that they are not carefully written, well-organized nor well-commented. You may enjoy reviewing the PEPs especially PEP8. Also see the answers to some of my questions in Code Review SE 1, 2, 3, 4 – uhoh May 08 '21 at 23:50
-
@MatthewChristopherBartsh Both Python and Python programmers are generally very forgiving, you don't need to learn any of this right away, but once one starts using it regularly the wisdom behind the PEP8 guidelines becomes more apparent and it makes more and more sense to follow them. Enjoy! – uhoh May 08 '21 at 23:53
-
Okay, but is it believable that sometimes a coder who is modifying or reusing your code and testing the code at some point would be glad that you left the 'if True' statements in because it makes testing the code easier? – Matthew Christopher Bartsh May 09 '21 at 17:44
-
@MatthewChristopherBartsh No. If 1) they understood what it was for, and 2) needed it, then they would just add it back, which would take about 700 milliseconds to type. – uhoh May 09 '21 at 18:01
-
- Is using verbose = False like that your own idea? I could only find stuff about logging output when I searched for it. 2. What do you mean here by 'toggle'? 3. Your last diagram has some small flaws and I wonder what caused them: a) Some barely noticeable gaps in the paths of a few of the satellites. b) Some of the paths are in front of other paths that they should be behind c) The paths are all the same thickness regardless of whether in the foreground or the background and so it's not always immediately clear whether it is convex towards us or away from us, compounding problem 'b'.
– Matthew Christopher Bartsh Jun 15 '21 at 13:00

