use super::{LeoPreset, PresetShell, PresetSignal, PresetSource, SourceKind};
pub(super) const PRESET: LeoPreset = LeoPreset {
id: "starlink-sop",
name: "Starlink signals of opportunity",
summary: "Doppler-only positioning from the Ku-band OFDM beacon of a 1584-satellite shell at 550 km",
sources: &[
PresetSource {
kind: SourceKind::Public,
citation: "Kozhaya, Saroufim and Kassas, NAVIGATION 72(1) 2025: carrier, beacon, C/N0, Doppler error",
url: Some("https://navi.ion.org/content/72/1/navi.685"),
},
PresetSource {
kind: SourceKind::Public,
citation: "FCC 21-48: first shell of 1584 satellites, 72 planes of 22, 550 km, 53 deg",
url: Some("https://docs.fcc.gov/public/attachments/FCC-21-48A1.pdf"),
},
],
representative: &[
"Walker phasing",
"C/N0 of 45 dB-Hz at the horizon",
"ephemeris range-rate error folded into the 30 Hz Doppler sigma",
],
shells: &[PresetShell { pattern: "delta", total: 1584, planes: 72, phasing: 17, altitude_km: 550.0, inclination_deg: 53.0 }],
signals: &[PresetSignal {
name: "Ku-beacon",
carrier_hz: 11.325e9,
modulation: "OFDM beacon, 240 MHz, 4/3 ms frame",
chip_rate_hz: None,
bandwidth_hz: 240.0e6,
rx_power_dbw: None,
cn0_dbhz: Some((45.0, 57.07)),
}],
doppler_only: true,
sigma_doppler_hz: Some(30.0),
sisre_m: 1000.0,
ephemeris_model: "none broadcast; public two-line elements with SGP4",
clock_model: "none broadcast; the satellite oscillator offset is absorbed in the Doppler error",
};