Web Simulation 

 

 

 

NTN Satellite Coverage and Handover Chain 

A non-terrestrial network cannot pick a serving satellite the way a terrestrial network picks a cell. The satellite moves, the Earth turns under it, and a satellite that is overhead now will be below the horizon in a few minutes. Deciding which satellite serves a UE is therefore a question about geometry over a time window, not a question about one instant.

This simulator takes a Walker constellation, a UE position, a gateway position and a time window, and works out which satellites can serve the UE at every instant in that window. It then builds the handover chain across the window and reports what is left over: the number of switches, the satellites involved, and any coverage gap.

Mathematical Foundation

Everything here follows from one question asked repeatedly: at time t, is the satellite high enough above the horizon at the ground point? The answer is an angle, and the angle comes from two position vectors.

sin(el) = ( d · u ) / |d|,   d = rsat − rsite,   u = rsite / |rsite|

Here d is the line-of-sight vector from the ground point to the satellite and u is the local vertical. On a spherical Earth the local vertical is simply the site position normalised, which is why the expression stays this short. The slant range is |d|, and the one-way propagation delay is |d| / c.

A link is declared usable when the elevation clears a configured mask:

el ≥ elmin

The mask is not decoration. It stands in for everything the geometry alone does not model: atmospheric loss at grazing angles, terrain and building blockage near the horizon, and the regulatory minimum elevation a system is licensed to operate at. Typical NTN values sit between 10° and 30°.

Constellation and Orbit Model

The constellation is a Walker Delta pattern, written i : T/P/F. It is described by an inclination, a number of orbital planes, a number of satellites per plane, and a phasing factor that offsets one plane from the next.

The planes are spread evenly in right ascension, and the satellites are spread evenly around each plane:

Ωp = 2π · p / P
u0,ps = 2π · s / S  +  2π · F · p / (P · S)

For a circular orbit the argument of latitude advances at the mean motion, so the position at any time follows directly:

u(t) = u0 + n · t,   n = √( μ / r3 ),   r = RE + h
x = r · ( cos u · cos Ω − sin u · cos i · sin Ω )
y = r · ( cos u · sin Ω + sin u · cos i · cos Ω )
z = r · sin u · sin i

The ground points rotate with the Earth, so their longitude advances at ωE = 7.2921 × 10-5 rad/s. Both the satellite and the ground point are expressed in the same inertial frame before the elevation is taken.

Why the phasing factor matters: two constellations with the same altitude, inclination and satellite count can have very different gap behaviour depending on F. Set the Sparse preset and sweep Phasing F from 0 upward: the coverage percentage and the longest gap both move, while nothing else changes.

Visibility and the Elevation Mask

A satellite is visible from a ground point over a circular region called the footprint. Its size is set by the altitude and the elevation mask, and it is usually quoted as an Earth-central half angle.

ρ = arcsin( RE / (RE + h) )
η = arcsin( sin ρ · cos elmin )
λ = 90° − elmin − η

The angle ρ is the angular radius of the Earth as seen from the satellite, η is the nadir angle to the edge of the coverage circle, and λ is the half angle of the footprint measured from the centre of the Earth. The simulator draws exactly this circle around the sub-satellite point of the serving satellite.

Raising the mask shrinks the footprint quickly. At 550 km, moving the mask from 10° to 30° takes λ from about 14.9° to about 7.4°, which cuts the covered area to roughly a quarter.

Pass Duration

The footprint half angle sets how long one satellite stays usable. In the time it takes the satellite to travel 2λ of arc, the ground point crosses the footprint from edge to edge.

Tpass,max ≈ ( 2λ / 360° ) · Torbit,   Torbit = 2π √( r3 / μ )

This is the best case, an overhead pass through the centre of the footprint. Any pass that clips the edge is shorter, often much shorter.

Worked Example: 550 km, 10° Mask

Quantity

Value

Orbit radius r

6 921 km

Orbital period Torbit

5 730 s (95.5 min)

Earth angular radius ρ

67.0°

Nadir angle η

65.1°

Footprint half angle λ

14.9°

Maximum pass duration

≈ 476 s (7.9 min)

This is the load-bearing number. The simulator defaults to a 1000 s window. No single satellite at 550 km can cover 1000 s, so the window forces at least one handover no matter where the UE sits. That is exactly why a coverage tool is asked for a window rather than an instant: the answer is a chain of satellites, not a satellite.

Comparison Across Altitudes

Altitude

Period

λ at 10°

Max pass

550 km

95.5 min

14.9°

≈ 476 s

780 km

100.4 min

18.0°

≈ 602 s

1 200 km

109.3 min

24.1°

≈ 876 s

8 000 km

287 min

49.0°

≈ 4 690 s

Every LEO row is below 1000 s. Handover in LEO NTN is not an edge case to be tested occasionally; it is the normal mode of operation, and a session of any useful length crosses several satellites.

Where the formula breaks: it uses the satellite's inertial angular rate and ignores Earth rotation. For LEO the satellite sweeps about 3.8° per minute against the Earth's 0.25°, so the error is a few percent. At geostationary altitude the two rates are equal, the relative motion vanishes, and the formula stops meaning anything. The MAX PASS readout is labelled as a calculated value for that reason.

A satellite being visible to the UE is not enough. In a transparent payload the satellite is a bent pipe: it repeats the signal without decoding it, so it has to see the gateway and the UE at the same moment. Two independent visibility conditions have to hold together.

usable(t) = [ elUE(t) ≥ elmin,UE ]  AND  [ elGW(t) ≥ elmin,GW ]

With a regenerative payload the satellite terminates the radio protocol on board and reaches the ground network over inter-satellite links, so only the service link condition applies. The simulator carries both modes, and switching between them on the same geometry is the fastest way to see what the feeder link costs.

Try this: untick Sync UE/GW site, leave the UE in Munich and set GW site to Madrid, then watch the visibility chart. Several satellites are drawn in a dull grey-blue: those clear the UE mask but not the gateway mask, so a transparent payload cannot use them. Switch the payload to regenerative and those same bars turn into usable colour.

Building the Handover Chain

Once the usable set is known at every sample, the serving satellite still has to be chosen. The simulator uses a simple and defensible rule: keep the current satellite while it stays usable, and when it stops being usable, take the usable satellite with the longest run of usability ahead of it.

serve(k) = serve(k−1)  if usable,  else  argmaxj remainingj(k)

That rule minimises the number of switches for a given geometry, which makes it a useful baseline. A real scheduler would also weigh elevation, load, beam layout and the timing of the conditional handover configuration it has already sent to the UE, so the chain here is a lower bound on switching rather than a prediction of it.

Three outcomes are counted separately, and the distinction matters when reading the results:

Event

Meaning

Handover

The serving satellite becomes unusable and another one is already usable. Service continues.

Re-acquisition

Service resumes after a gap. The UE had nothing to camp on in between.

Outage

No satellite satisfies the usable condition. Drawn as a red band on the serving ribbon and shaded on the elevation plot.

Rel-17 connection: the geometry timeline built here is the input a network needs to configure conditional handover for NTN, where the execution condition can be a time window or a distance from a reference location rather than a measurement report. Those conditions are only meaningful if the satellite pass times are known in advance, which is precisely what this computation produces.

Real Elements versus Synthetic

The constellation dropdown holds two kinds of entry, and they answer different questions. The synthetic Walker patterns are generated from four numbers, so every parameter is yours to move. The entries marked REAL are snapshots of published two-line elements, propagated with SGP4, so nothing is yours to move and the satellites are where they actually were.

Group

Satellites

Median altitude

Period

Completeness

Iridium NEXT

80

778 km

100.4 min

whole group

OneWeb

651

1 202 km

109.5 min

whole group

Starlink 53° shell

4 360

463 km

93.8 min

one shell of a larger fleet

Amazon Leo / Project Kuiper

391

630 km

97.3 min

available group TLEs

Guowang

181

1 149 km

108.3 min

available group TLEs

Qianfan / Thousand Sails / G60

238

1 068 km

106.6 min

available group TLEs

Globalstar

28

1 414 km

114.1 min

available group TLEs

ORBCOMM

14

697 km

98.7 min

available group TLEs

O3b / O3b mPOWER

30

8 066 km

287.9 min

O3B-named entries in SES TLEs

GPS operational

32

20 182 km

718.0 min

whole group

Galileo

32

23 222 km

844.7 min

whole group

Altitude and period are not configured anywhere. They are derived from the mean motion in the elements themselves, which is why they can be read as a check that the propagation is behaving.

Those derived numbers are worth a moment. Nothing in the simulator is told that GPS orbits at 20 200 km or that its period is half a sidereal day. Both fall out of the two-line elements, and both land on the published values. The same is true of the 100 minute Iridium period and the 1 200 km OneWeb shell.

What a real snapshot buys, and what it does not: it gives true inclinations, true plane spacing, true phasing and a true epoch, so the pass times are the pass times that actually occurred. It does not stay true. A two-line element set is accurate to roughly a kilometre near its epoch and degrades by a kilometre or more per day, and satellites manoeuvre, launch and deorbit continuously. The EPOCH cell in the readout shows the snapshot date so the age is always visible.

Refreshing the Elements

The files that ship with the page are a frozen download. The Update TLE button replaces them at runtime with the current set, so the ageing problem above can be removed whenever it matters.

The request goes straight from the browser to Celestrak. That works because their server answers a cross-origin request with Access-Control-Allow-Origin: *, so no proxy sits in the path and nothing has to be configured on the ShareTechnote side. Two consequences follow. The download depends on Celestrak being reachable from wherever the page is open, and it is a courtesy to press the button when the data actually matters rather than on every visit.

A failed download changes nothing. The vendored snapshot stays loaded and the analysis keeps running on it. The status line beside the button reports what happened and which elements are still in use, and the SOURCE cell distinguishes (live) from (snapshot) at all times.

Two presets filter the downloaded catalogue. Starlink keeps only the 53° shell between 430 and 500 km, matching the vendored file. O3b / O3b mPOWER keeps satellites whose names begin with O3B from the SES group, excluding unrelated SES satellites. The status line shows the retained and downloaded counts when filtering removes entries.

The dropdown also includes Amazon Leo (formerly Project Kuiper), Guowang, Qianfan (Thousand Sails / G60), Globalstar and ORBCOMM. Together with O3b / O3b mPOWER, these presets use bundled snapshots retrieved on 24 October 2026 from CelesTrak. Amazon Leo uses its kuiper group and Guowang uses hulianwang. Each preset supports the same coverage analysis, live TLE refresh and TLE downloads as the existing real presets.

These are the satellites available in each source's TLE set, not a model of the planned fleet or a count of satellites offering service. CelesTrak reports that newly catalogued objects with six-digit IDs cannot be supplied in TLE format. Those objects are absent from these presets and from their TLE refreshes, so deployment coverage can be understated. The loaded count and epoch are shown in the simulator.

Two more differences are worth knowing before comparing a real group against a synthetic one.

Aspect

Synthetic Walker

Real elements

Propagator

Closed-form circular Kepler

SGP4, including drag and J2

Earth model for elevation

Sphere, 6 371 km

WGS84 ellipsoid

Epoch

Arbitrary, starts at zero

The snapshot date

Orbits

Exactly circular, one altitude

Slightly eccentric, spread in altitude

Sliders

All active

Constellation sliders disabled

Try this: select REAL: Iridium NEXT, untick Sync UE/GW site, and put the UE in Munich with the gateway in Madrid. Coverage is well under 100 %, because a 66 satellite constellation at a 10° mask cannot keep one satellite in view of two separated ground points continuously. Now switch the payload to regenerative. The gaps shrink sharply, which is the geometric reason Iridium was built with inter-satellite links in the first place.

Why the large groups take longer

Testing 4 360 satellites at every sample would mean propagating over eight hundred thousand positions for one window. Almost all of that work is wasted, because only a few hundred satellites ever rise above the horizon.

The simulator therefore screens first. It sweeps the window at a coarse step and keeps any satellite whose sub-satellite point comes within the footprint, widened by the angle a satellite can travel between two coarse samples:

λscreen = λ(h, elmin)  +  ( 2π / Torbit + ωE ) · Δtcoarse  +  1°

The margin is what makes the shortcut safe. A satellite cannot cross the footprint between two coarse samples without being caught, because the test already allows for the furthest it could have moved. Only the survivors are propagated at full resolution.

Verified rather than assumed: the candidate count changes with the coarse step, from 422 satellites at a 30 s step to 799 at 300 s, and the number of satellites actually found visible stays at 354 throughout. Coverage, handover count and the chain are identical in every case. The screening changes how much work is done and not what the answer is.

Two further shortcuts are worth knowing, because both are things you can feel while using the controls.

The first is that the candidate set is cached. It depends on the constellation, the UE position, the UE mask and the time window, and on nothing else. Moving the gateway, changing the feeder mask or switching the payload mode therefore reuses it and only the cheap pass runs again. On the largest shell that is the difference between roughly 150 ms and roughly 65 ms per change. Moving the UE or resizing the window invalidates the cache, so those two controls are the slow ones.

The second is that dragging a slider does not recompute on every pixel. The analysis is deferred by a few tens of milliseconds after the last movement, while the value labels keep updating immediately. A slow drag therefore feels continuous, and a fast drag across the full range costs one analysis rather than several hundred.

What is TLE ?

To calculate a coverage window, we need to know where each satellite will be as time advances. A Two-Line Element set, or TLE, provides a compact description of an orbit at a reference time. A propagator uses those elements to calculate satellite position and velocity at other times.

The two data lines each contain 69 characters. Their column positions are fixed, so spaces are part of the format. A file often includes a satellite-name line before the two data lines. That is why a downloaded record can occupy three lines even though it is called a two-line element set. The name helps the reader identify the satellite; the orbital calculation uses the numbered lines.

Line 1 holds the satellite identity, epoch, drag-related fields and bookkeeping information. Line 2 holds the orbital elements. The following table groups the fields by their role in the calculation. The exact column layout is given in the CelesTrak TLE format reference.

Field

Meaning

Satellite number

Identity repeated on both lines. The two values must match.

Epoch

Reference year and day of year, including a fractional day.

Inclination, i

Orbital-plane tilt relative to the equator, in degrees.

RAAN, Ω

Direction of the ascending node, in degrees. It sets the orbital plane's orientation around the Earth.

Eccentricity, e

Orbit shape, written with an implied decimal point.

Argument of perigee, ω

Direction of perigee within the orbital plane, in degrees.

Mean anomaly, M

Orbital phase at the epoch, in degrees.

Mean motion, n

Orbital rate in revolutions per day.

B*

Drag parameter used by SGP4.

Checksum

Final digit on each data line, used to detect some text errors.

For example, an epoch of 26296.50000000 means day 296 of 2026 at 12:00 UTC. An eccentricity field of 0002400 means 0.0002400. A compact exponent field such as 12345-4 represents 0.12345 × 10-4. These fields need a TLE-aware parser; splitting the line at spaces is not enough.

The checksum adds the digits in the first 68 columns, counts each minus sign as one, and takes the result modulo 10. Other characters contribute zero. A correct checksum confirms this simple text check only. It says nothing about whether the orbit matches a real satellite. The legacy two-digit epoch year also has a convention: 57–99 means 1957–1999, and 00–56 means 2000–2056. See the TLE format FAQ for the encoding rules.

Why does the propagation model matter ?

The orbital angles look like ordinary Keplerian elements, but a published TLE contains mean elements associated with SGP4. The model and the parameters belong together. Substituting those numbers into a different propagator can change the resulting trajectory.

SGP4 reconstructs orbital motion from these mean elements with its perturbation model. An instantaneous position and velocity instead describe an osculating state: the local orbit that matches that instant. Copying its Keplerian elements directly into a TLE does not perform the averaging and fitting needed by SGP4. CelesTrak explains this relationship in its SGP4 software tutorial.

In this simulator, a REAL preset propagates the loaded TLEs with SGP4. Its download preserves the source lines. A synthetic preset calculates a circular Walker constellation and generates approximate TLEs from that geometry. The generated name begins with SYNTHETIC, and its catalog number is a placeholder. A valid file format does not turn that fictional satellite into a catalogued object.

The export scope also matters. Download Serving TLE includes the distinct satellites chosen by the handover chain. Download Constellation TLE includes the whole selected constellation or shell. Neither file records the UE position, elevation mask, gateway constraint or handover schedule. Those conditions belong to the coverage calculation, so keep them with the results when reproducing an analysis.

How to Convert Ephmeris into TLE ?

The conversion depends on what the input contains and what accuracy we need. For a designed circular constellation, we can generate approximate elements from the orbit parameters. For an ephemeris containing positions and velocities over time, we should fit an SGP4 trajectory to those samples.

Generating a TLE from the selected Walker parameters

The synthetic mode already knows the orbital radius, inclination, plane orientation and phase of every satellite. It can therefore construct an approximate TLE without importing position samples. This is the direct element-export approach also used in the Ephemeris simulator.

For altitude h, the circular model uses the following relationships. Here RE is 6 371 km and μ is 398 600.4418 km3/s2, matching this simulator. Keep the units consistent: nrad is in radians per second, while the TLE field uses revolutions per day.

a = RE + h
nrad = √(μ / a3)
nTLE = nrad · 86400 / (2π)

Let p be the plane index and s the satellite index within the plane, both starting at zero. For P planes, S satellites per plane and phasing factor F, the model assigns:

Ωp = 2πp / P
up,s(0) = 2πs / S + 2πFp / (PS)
M(tstart) = up,s(0) + nradtstart   (mod 2π)

The exporter sets e = 0 and ω = 0, so M carries the circular orbit's phase. Perigee has no unique direction for a circle; choosing zero is a convention. Inclination comes from the control panel. The exporter also sets B* and the mean-motion derivative fields to zero, uses placeholder identities, and calculates the two checksums.

For the default 550 km altitude, a is 6 921 km. The two-body equations give a period of approximately 5 730 seconds and a mean motion of approximately 15.078 revolutions per day. These are useful checks on the generated line 2. A value near one revolution per day would describe a very different orbit.

The UTC reference needs another step. The Walker model starts with an arbitrary Earth angle and rotates the Earth by ωEt. The export assigns page-load UTC as its time origin and places the TLE epoch at the window start. It then rotates the plane orientation to account for Greenwich sidereal time, GST, at that epoch:

Ωexport = Ωp + GST(tepoch) − ωEtstart   (mod 2π)

This adjustment aligns the idealized ground longitude at the export epoch. It does not fit SGP4 mean elements or reproduce every SGP4 perturbation. Changing the file epoch alone would be incorrect because the orbital phase and Earth orientation must remain consistent with the chosen time.

Fitting a TLE to an ephemeris

An ephemeris normally supplies a sequence of time-tagged states. A useful conversion must make the propagated TLE follow that sequence over the interval of interest, rather than merely resemble one state at the starting instant.

Begin with the timestamps, units and reference frame. SGP4 returns states in TEME, so transform the reference states consistently before comparing them. An Earth-fixed velocity also needs the rotational contribution when transformed; rotating the position and velocity by the same matrix alone is insufficient. An implementation example is documented in SatelliteToolboxPropagators SGP4 fitting.

A practical fitting sequence is:

  1. Choose a fitting interval and an epoch within it. Collect reference positions and, when available, velocities across that interval.
  2. Build an initial element estimate. For a bound two-body state, the energy relation gives a starting semi-major axis: 1/a = 2/|r| − |v|2/μ. Treat the resulting osculating elements as an initial guess.
  3. Propagate the candidate mean elements with SGP4 at every reference timestamp.
  4. Adjust the elements to reduce the state residuals. Estimate B* only when the fitting arc contains enough information to constrain it; a single state cannot determine drag reliably.
  5. Format the fitted elements as a TLE, parse the rounded text again, and validate the propagated result at additional times.

One possible weighted least-squares objective is shown below. The vector q contains the fitted parameters, and σr and σv set the position and velocity scales. They prevent quantities with different units from being added without normalization. A position-only fit omits the velocity term.

J(q) = Σk [ |rSGP4(tk; q) − rref(tk)|2 / σr2
+ |vSGP4(tk; q) − vref(tk)|2 / σv2 ]

For coverage work, validate elevation and handover timing as well as position error. A small position change near the elevation mask can change when a satellite becomes usable. Propagate the exported file over the requested interval, reapply the UE and gateway conditions, and check transitions with finer time steps. Report the fitting interval and residuals with the file.

What this page implements: synthetic export uses the direct Walker-parameter conversion above. It does not run an ephemeris fitting solver. The downloaded synthetic TLEs therefore need a new SGP4 coverage check before their serving times can be compared with the circular-model results.

Simulation

The interactive simulator is below. Pick a constellation, then a place for the UE and a place for the gateway, then run the animation and watch the serving ribbon on the visibility chart. The controls underneath let you change the constellation, move either ground point, raise or lower each elevation mask, and stretch the window.

SCENARIO
on
528 sats
equirect.
synthetic, nothing to download
CONSTELLATION (synthetic Walker only)
550 km
53
24
22
1
GROUND POINTS
48.0
11.5
40.5
-3.5
10
10
TIME WINDOW
1000 s
0 min

For REAL constellations, an optional UTC date/time overrides the Start time offset. Clear it to use the epoch offset.

5 s
60x

Ground tracks, footprint of the serving satellite, UE and gateway

Equirectangular projection, so longitude and latitude map straight onto x and y. Bright dots are satellites that reach the UE at some point in the window; dim dots are the rest of the constellation. The green ring is the serving footprint at the current instant, drawn as an ellipse because the projection stretches east-west away from the equator. Green dashes are the service link, amber dashes the feeder link. Coastline: Natural Earth 1:110m, public domain.

Current values and window summary

Visibility windows and the serving chain

One row per satellite that reaches the UE. Coloured bars are usable; grey-blue bars clear the UE mask but fail the gateway mask. The strip at the bottom is the serving chain, with a white tick at every handover and red where no satellite is usable.

Elevation at the UE

Faint curves are all candidate satellites. The heavy curve follows the serving chain and changes colour at each handover. The dashed line is the UE elevation mask.

Handover chain

    TLEs for all satellites in the serving chain

    Serving TLE includes the satellites in the serving chain; Constellation TLE includes every satellite in the selected constellation or shell. Check Consolidated File for one .tle file, or uncheck it for separate files named after each satellite. Your browser may ask you to allow multiple downloads.

    SatelliteServing samples
    (from window start)
    TLE lines (source / generated)

    Every distinct satellite used by the handover chain is listed once, including satellites used before or after a gap. The download contains each satellite name and its two element lines. REAL presets retain the original source lines; synthetic presets generate approximate TLEs from the selected altitude, inclination, plane spacing and phasing, with zero eccentricity and drag. Synthetic catalog IDs are placeholders, and their epoch is page-load UTC plus the Start time offset. Serving ranges show the first and last sampled instants, not exact rise/set times. Sampled geometric visibility is not a guarantee of continuous coverage or operational service; gaps between samples, element age, manoeuvres and unmodelled link constraints can affect coverage.

     

    Usage

    To export a real coverage set, select a REAL constellation such as OneWeb, choose the UE and gateway locations, set Start UTC and the Window duration in seconds, then inspect the final TLE panel. Use Update TLE for fresh elements. The download includes all distinct serving satellites, even when the result has gaps, so check the coverage status before using it. A blank UTC field uses the existing epoch offset. Synthetic presets also support TLE export, using generated approximate elements as in the Ephemeris simulator. Their SGP4 trajectories can differ from the circular Walker model used for the coverage results.

    1. Start with the defaults. A dense 550 km shell, both ground points in Munich, a 1000 s window. Sync UE/GW site is on, so the gateway sits with the UE and the feeder link costs nothing. Read the HANDOVERS cell: it will not be zero, and the pass-duration table above explains why.
    2. Separate the two ends. Untick Sync UE/GW site and move GW site to Madrid, then to Seoul. The first move barely changes anything; the second collapses coverage, because no satellite can see Munich and Seoul at the same moment.
    3. Run the animation. Run / Stop toggles it. Step Fwd and Step Bwd stop the animation first and then move by one time step, so you can walk through a handover instant by instant.
    4. Watch the serving ribbon. On the visibility chart the bottom strip shows which satellite is serving. Every white tick is a handover. Every red band is an outage.
    5. Break the coverage. Switch the constellation preset to Sparse LEO. The coverage percentage drops below 100, red bands appear, and the LONGEST GAP cell turns red.
    6. Isolate the feeder link. Keep the sparse constellation and switch the payload to regenerative. Coverage improves immediately, because the gateway condition is dropped. Switch back and the gaps return.
    7. Raise the mask. Push Mask UE from 10° to 30°. The bars on the visibility chart shorten from both ends, handovers become more frequent, and the elevation curves are clipped higher up.
    8. Move the UE north. Drag UE lat towards 70° with the 53° inclined shell selected. Coverage collapses, because an inclined constellation never puts a satellite overhead at high latitude. Switch to the polar preset and it recovers.
    9. Change the epoch. Start time slides the window through the constellation cycle. The same geometry can give a very different handover count at a different start time, which is why a single window is a sample and not a guarantee.
    10. Switch to real elements. Pick any entry marked REAL in the constellation dropdown. The elements are fetched on demand, the constellation sliders grey out, and the SOURCE and EPOCH cells change to show that SGP4 is now driving the positions.
    11. Refresh the elements. Press Update TLE to download the current set from Celestrak. The status line beside the button reports the epoch and the satellite count, and turns green once the data is live rather than the vendored snapshot. Nothing is lost if the download fails.
    12. Compare a real group against its synthetic twin. REAL: OneWeb against the synthetic LEO 1200 km preset is the cleanest pair. The pass durations agree closely, which is the check that the synthetic model is sound; the handover instants do not, because the real planes are not evenly spaced and the real epoch is a real moment.

    Reading the Panels

    The summary panel carries fifteen cells. Five of them describe the instant the cursor is on and change as the animation runs; the rest describe the window as a whole and only change when a control does.

    At the current instant

    Cell

    Meaning

    TIME IN WINDOW

    Seconds from the start of the window. This is the position of the white cursor on both the visibility chart and the elevation plot.

    SERVING SAT

    The satellite currently carrying the link, or NONE during an outage.

    UE ELEVATION

    Elevation of that satellite above the UE horizon. It can never be below the UE mask, or the satellite would not be serving.

    GW ELEVATION

    The same angle at the gateway. Shows n/a in regenerative mode, where the feeder link is not part of the condition.

    SLANT RANGE

    Straight-line distance from UE to serving satellite. It varies by a factor of two or more across a single LEO pass, which is why NTN timing advance has to track it continuously.

    ONE WAY DELAY

    Slant range divided by the speed of light. Propagation only, with no processing or scheduling delay. Double it for a round trip.

    Across the whole window

    Cell

    Meaning

    COVERAGE

    Fraction of samples with at least one usable satellite. Green at 100 %, amber above 95 %, red below.

    HANDOVERS

    Switches from one usable satellite to another. Service continues across each one.

    RE-ACQUISITIONS

    Locks that follow an outage rather than another satellite. The very first lock of the window counts as neither this nor a handover.

    SATS USED

    Distinct satellites in the chain, against the number that rose above the UE mask at any point. 4 of 48 vis means 48 were available and the chain needed 4.

    LONGEST GAP

    Longest continuous outage in the window, or none.

    MAX PASS (calc)

    Best-case pass duration from the closed form in Pass Duration. It is calculated, not measured, and it ignores Earth rotation.

    SOURCE

    Walker (synthetic), or TLE / SGP4 marked (snapshot) or (live) depending on whether Update TLE has been pressed.

    SCANNED

    Satellites propagated at full resolution, against the size of the constellation. For a small group these are equal; for a large shell the first number is much smaller, and the difference is the screening described above.

    EPOCH

    Date the elements refer to. arbitrary for the synthetic presets, whose time origin has no meaning.

    The visibility chart is capped at 14 rows. A dense shell can put several hundred satellites above the UE mask in one window, far more than will fit. The rows shown are the ones that become usable earliest, and a line underneath reports how many were left out. The SATS USED and SCANNED cells always count the full set, so the cap never hides anything from the numbers.

    Parameters

    The controls below define the scenario used to calculate visibility and the serving chain. Location, orbit and timing choices affect the result; animation speed and the basemap only affect how that result is displayed.

    Control

    Range

    Effect

    Constellation

    6 synthetic + 11 real

    A synthetic entry sets altitude, inclination, planes, satellites per plane and phasing together. A REAL entry loads two-line elements instead and disables those sliders.

    UE site

    57 places

    Moves the UE latitude and longitude to a named place. Dragging either UE slider afterwards switches the box to (custom); moving the gateway or anything else leaves it alone.

    GW site

    57 places

    The same list, applied to the gateway. The list is grouped by region and spans 78°N to 78°S, which is wide enough to drive a constellation past its inclination limit.

    Sync UE/GW site

    on / off, default on

    While ticked, the two ground points are held at the same place: changing either dropdown moves both, and dragging either latitude or longitude slider moves both. Untick it to separate them, which is what makes the feeder link constraint visible.

    Payload

    transparent / regenerative

    Transparent requires the feeder link as well as the service link. Regenerative requires only the service link.

    Update TLE

    button

    Re-downloads the selected real constellation from Celestrak and re-runs the analysis. Disabled for the synthetic presets. If the download fails, the vendored snapshot already in memory is kept and the status line says so.

    Basemap

    coastline / grid

    Draws the Natural Earth land outline behind the tracks, or leaves a plain graticule. Display only; it does not affect any computed value.

    Altitude

    300 – 36 000 km

    Sets the orbital period and the footprint size, so it drives pass duration directly.

    Inclination

    0 – 90°

    Highest latitude the ground track reaches. A UE above this latitude sees satellites only at low elevation.

    Planes P

    1 – 24

    Number of orbital planes spread evenly in right ascension.

    Sats / plane

    1 – 40

    Satellites spread evenly around each plane. Total size is P × this.

    Phasing F

    0 – 23

    Walker phasing factor. Offsets the satellites of one plane relative to the next.

    UE lat / lon

    ±85° / ±180°, 0.1° step

    Service link ground point. Moving either one sets UE site to (custom).

    GW lat / lon

    ±85° / ±180°, 0.1° step

    Feeder link ground point, ignored in regenerative mode. Moving either one sets GW site to (custom).

    Mask UE / GW

    0 – 40°

    Minimum elevation for each link. Raising it shrinks the footprint and shortens every pass.

    Window

    300 – 7 200 s

    Length of the analysis window. All metrics are computed over this span.

    Start time

    0 – 180 min

    Offset of the window from the constellation epoch.

    Time step

    2 – 60 s

    Sampling interval. Finer steps resolve short passes and brief gaps more accurately at some computation cost.

    Run speed

    10 – 600×

    Simulated seconds per real second during animation.

    Key Concepts

    The coverage result follows from several geometric constraints acting together. Keep the window length, elevation masks and payload mode in view when comparing presets, because a larger satellite count alone does not explain every change.

    • Coverage is a window question. Asking which satellite serves a UE at one instant is close to meaningless in LEO. The useful answer is an ordered chain with switch times.
    • A transparent payload needs two visibilities at once. The satellite count that matters is not how many see the UE, but how many see the UE and the gateway together.
    • Pass duration falls out of geometry alone. Altitude and elevation mask fix it. No amount of extra satellites makes an individual pass longer.
    • More satellites reduce gaps, not switches. A denser shell removes outages, but each satellite still sets on schedule, so the handover rate stays roughly constant.
    • Inclination caps useful latitude. The highest latitude a shell can reach is i + λ. A 53° shell at 550 km with a 10° mask stops at about 68°, so a UE at 70°N sees nothing at all however many satellites are launched.

    Limitations

    The simulator checks a simplified set of conditions to make constellation behavior visible. Use the following assumptions when interpreting a coverage percentage or an exported TLE set, especially when comparing synthetic results with an external propagator.

    • The synthetic mode uses circular Keplerian orbits only. No J2 nodal regression, no drag, no eccentricity, no manoeuvres. Over a window of an hour or two the error is small; over days the plane geometry would drift noticeably. The real-element mode does not share this limitation, because SGP4 carries drag and the dominant J2 terms.
    • Real elements start as a frozen snapshot. The vendored files were downloaded once, and their accuracy is roughly a kilometre near the epoch, degrading with age. Update TLE replaces them with the current set, but only while the page is open: the download is never written back to the server, so a reload returns to the snapshot.
    • Only one Starlink shell is included. The published catalogue runs to more than ten thousand satellites across several shells. The 53° shell between 430 and 500 km is vendored complete; the 43°, 70° and 97° shells are not present, so coverage from this preset is lower than the real fleet would give.
    • Spherical Earth in the synthetic mode. Radius 6 371 km, so geodetic and geocentric latitude are treated as the same, and elevation angles differ from the true ones by up to about 0.2°. The real-element mode resolves look angles against the WGS84 ellipsoid instead.
    • Geometric visibility only. The elevation mask is the entire propagation model. There is no link budget, no antenna pattern, no rain fade, no terrain, no atmospheric refraction, and no interference.
    • No beam structure. A real satellite serves through many spot beams, and beam-to-beam handover happens far more often than satellite-to-satellite handover. Only the latter is modelled here.
    • Idealised Walker pattern. Real constellations use several shells with different altitudes and inclinations, and their true positions come from TLE or ephemeris data rather than from a closed-form pattern.
    • The switching rule is a baseline. Longest-remaining-usability minimises switches for the given geometry. A real scheduler weighs load, beam layout, elevation margin and the conditional handover configuration already sent to the UE.
    • The map is equirectangular, not a globe. Coastlines come from the Natural Earth 1:110m land vector, simplified to about 3 500 points. The projection stretches distance east-west with latitude, so a circular footprint is drawn as an ellipse and a great-circle ground track appears as a sine-like curve. Neither is a modelling error, only a projection artefact.
    • MAX PASS is an inertial-frame estimate. It ignores Earth rotation, so it is a few percent optimistic in LEO and not meaningful at geostationary altitude.