""" GEO / MEO / LEO Orbits — Interactive Animation ================================================ Animated comparison of satellite orbit types with key trade-offs. """ import streamlit as st import streamlit.components.v1 as components _ORBITS_HTML = """

🛰️ Orbit Comparison

Hover over a satellite to see its details.

SlowFast

📐 Orbit Types

LEO 160 – 2 000 km
MEO 2 000 – 35 786 km
GEO 35 786 km (fixed)
""" def render(): """Render the GEO/MEO/LEO orbit comparison animation.""" st.markdown("## 🌍 Satellite Orbits — GEO vs MEO vs LEO") st.markdown( "Compare the three main satellite orbit types. " "Hover over satellites or legend items to explore their characteristics." ) st.divider() components.html(_ORBITS_HTML, height=680, scrolling=False) # ── Educational content below ── st.divider() st.markdown("### 📊 Orbit Comparison at a Glance") col1, col2, col3 = st.columns(3) with col1: st.markdown(""" #### 🟢 LEO — Low Earth Orbit **160 – 2 000 km** - ⚡ Latency: **4 – 20 ms** (RTT) - 📉 FSPL: ~155 dB (Ku-band) - 🔄 Period: ~90 – 120 min - 📡 Small footprint → **large constellations** needed (hundreds to thousands) - 🤝 Requires **handover** between satellites - 🛰️ *Starlink (550 km), OneWeb (1 200 km), Iridium (780 km)* """) with col2: st.markdown(""" #### 🟡 MEO — Medium Earth Orbit **2 000 – 35 786 km** - ⚡ Latency: **40 – 80 ms** (RTT) - 📉 FSPL: ~186 dB (Ku-band) - 🔄 Period: ~2 – 12 h - 📡 Medium footprint → **medium constellations** (20 – 50 sats) - 🌍 Good balance between coverage and latency - 🛰️ *GPS (20 200 km), Galileo, O3b/SES (8 000 km)* """) with col3: st.markdown(""" #### 🔴 GEO — Geostationary Orbit **35 786 km (fixed)** - ⚡ Latency: **240 – 280 ms** (RTT) - 📉 FSPL: ~205 dB (Ku-band) - 🔄 Period: 23 h 56 min (= 1 sidereal day) - 📡 Huge footprint → **3 sats = global** coverage - 📌 **Fixed position** in the sky — no tracking needed - 🛰️ *Intelsat, SES, Eutelsat, ViaSat* """) with st.expander("🔬 Key Trade-offs in Detail"): st.markdown(r""" | Parameter | LEO | MEO | GEO | |:---|:---:|:---:|:---:| | **Altitude** | 160 – 2 000 km | 2 000 – 35 786 km | 35 786 km | | **Round-trip latency** | 4 – 20 ms | 40 – 80 ms | 240 – 280 ms | | **Free-Space Path Loss** | ~155 dB | ~186 dB | ~205 dB | | **Orbital period** | 90 – 120 min | 2 – 12 h | 23h 56m | | **Coverage per sat** | ~1 000 km | ~12 000 km | ~15 000 km | | **Constellation size** | Hundreds – thousands | 20 – 50 | 3 | | **Antenna tracking** | Required (fast) | Required (slow) | Fixed dish | | **Doppler shift** | High | Moderate | Negligible | | **Launch cost/sat** | Lower | Medium | Higher | | **Orbital lifetime** | 5 – 7 years | 10 – 15 years | 15+ years | **FSPL formula:** $\text{FSPL (dB)} = 20 \log_{10}(d) + 20 \log_{10}(f) + 32.44$ Where $d$ is distance in km and $f$ is frequency in MHz. **Why it matters for Shannon:** The higher the orbit, the greater the FSPL, the lower the received C/N. Since $C = B \log_2(1 + C/N)$, a higher orbit means lower achievable bit rate for the same bandwidth and transmit power. LEO compensates with lower FSPL but requires more satellites and complex handover. """) with st.expander("🛰️ Notable Constellations"): st.markdown(""" | Constellation | Orbit | Altitude | # Satellites | Use Case | |:---|:---:|:---:|:---:|:---| | **Starlink** | LEO | 550 km | ~6 000+ | Broadband Internet | | **OneWeb** | LEO | 1 200 km | ~650 | Enterprise connectivity | | **Iridium NEXT** | LEO | 780 km | 66 + spares | Global voice/data | | **O3b mPOWER** | MEO | 8 000 km | 11+ | Managed connectivity | | **GPS** | MEO | 20 200 km | 31 | Navigation | | **Galileo** | MEO | 23 222 km | 30 | Navigation | | **Intelsat** | GEO | 35 786 km | 50+ | Video & enterprise | | **SES** | GEO + MEO | Mixed | 70+ | Video & data | | **Eutelsat** | GEO | 35 786 km | 35+ | Video broadcasting | """)