48

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)?

ThePiachu
  • 623
  • 5
  • 8

1 Answers1

97

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

enter image description here enter image description here

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:

Geosynchronous satellites inclination 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:

Geosynchronous satellites with inclination > 19 degrees

Top view:

Geosynchronous satellites with inclination > 19 degrees

"Family portrait"

Geosynchronous satellites

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)

uhoh
  • 148,791
  • 53
  • 476
  • 1,473
  • 14
    OUTSTANDING work! :D – ThePiachu Jul 19 '19 at 07:21
  • 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
  • 2
    Are 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
  • 3
    Re 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
    @DavidHammen I've pulled that sentence out completely, thanks! – uhoh Jul 19 '19 at 09:24
  • 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.py so when it's finished the namespace and results are preserved. If I want to simply replot, I just copy/paste a section that begins if 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 set verbose = 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
  • 1
    My 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