Traducción automática, no revisada por un hablante nativo. El inglés es la referencia.

Navegación en órbita terrestre baja (LEO)Editar en GitHubFuente: docs/LEO-NAVMSG.md

Mensaje de navegación en LEO

El tipo de escenario leo-navmsg construye el mensaje de efemérides y reloj de difusión de un satélite de posicionamiento, navegación y temporización (PNT) en órbita terrestre baja (LEO) y responde a las preguntas que se hace quien diseña un mensaje: cuánto tiempo puede cubrir un mensaje, qué aporta cada parámetro adicional, qué ve un usuario cuando el mensaje cambia en mitad de una pasada y cuántos bits hacen falta para transportarlo con precisión de centímetro.

Es independiente del sistema. Cualquier órbita, cualquier portadora y cualquiera de los cuatro modelos de efemérides se ejecutan sin ningún preajuste; los preajustes con nombre son datos opcionales (véase Preajustes).

Imprima un ejemplo incluido con kshana example <name> (un nombre por llamada) y ejecútelo con kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update y leo-navmsg-encode-decode. El tipo de escenario es también la etapa de mensaje del tipo de escenario leo-pnt-chain (LEO-PNT.md) y el miembro de la campaña leo-focus-data-services, que compone cuatro configuraciones de mensaje e informa de la longitud de trama de cada una (146, 154, 159 y 171 bytes).

Código: src/leo_navmsg/ — elements.rs (registros y algoritmo de usuario), truth.rs (órbita y reloj de referencia), fit.rs (ajustador), sisre.rs (error de distancia de la señal en el espacio), services.rs (ionosfera y Tiempo Universal Coordinado (UTC)), codec.rs (formato binario), text.rs (exportaciones de estilo Receiver Independent Exchange Format (RINEX) y de valores separados por comas (CSV)), presets/ (un archivo por preajuste), mod.rs (el tipo de escenario).

Qué transporta un mensaje#

Parte Contenido
Auxiliar identificador del vehículo espacial (SVID), edición de datos (IOD), identificador de banda, estado de salud de la señal (convención de Galileo: 0 correcto, 1 fuera de servicio, 2 operaciones ampliadas, 3 en prueba)
Sincronización número de semana, tiempo de semana (TOW) de transmisión y un polinomio de reloj de segundo orden af0 + af1·(t − toc) + af2·(t − toc)²
Efemérides uno de los cuatro modelos siguientes
Otros servicios un conjunto ionosférico de difusión de Klobuchar, los coeficientes de NeQuick-G de Galileo ai0, ai1, ai2 con cinco indicadores de tormenta y los parámetros de tiempo del sistema a UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

Modelos de efemérides#

Código Modelo Parámetros
kepler16 el conjunto kepleriano del Open Service Signal-in-Space Interface Control Document (OS SIS ICD) de Galileo: √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe 16
kepler-rac lo mismo, más polinomios de corrección a lo largo de la traza, transversal y radial (RAC) a0…, c0…, r0… en τ = tk / tau_s, coeficientes en metros, tau_s la potencia de dos igual o superior a la mitad del intervalo de ajuste (transmitida), grados fijados por rac_degrees (por defecto 7, 5, 6) 16 + 21 por defecto, más la escala de tiempo
liu22 el modelo de 22 parámetros de Liu, Su, Xie, Zhou y Qu (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): los 16 más ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 22
ecef-poly el modelo de «reloj cero» ATOMIC (Autonomous Time and Orbit Determination for Microsatellite Constellations): un polinomio terrestre fijo (ECEF) por eje en τ = (t − t_ref) / 64 s (grado por defecto 6), sin términos de reloj porque el reloj del satélite se gobierna al tiempo del sistema (InsideGNSS) 22 por defecto

El algoritmo de usuario (elements::sat_state) es la secuencia del ICD de Galileo (ecuación de Kepler, correcciones de segundo armónico, nodo fijo a la Tierra) seguida, para kepler-rac, de los tres polinomios a lo largo del propio marco de la órbita kepleriana: radial a lo largo de la posición evaluada, transversal a lo largo de la normal a la órbita a partir de la inclinación y el nodo corregidos, y a lo largo de la traza completando la terna. El reloj añade el término relativista del ICD F·e·√A·sin E; para ecef-poly es la forma general −2 r·v / c² a partir del polinomio y su derivada.

Los términos de Liu et al. siguen el algoritmo de usuario del artículo (Sección 2,2, Ec. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (las versiones anteriores a la 0,30 usaban la convención de navegación civil del Global Positioning System (GPS) ½·ṅ·tk, de modo que un ṅ escrito por ellas equivale al doble del del artículo), y Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ sumado al radio, Φ el argumento de latitud sin corregir. La convención de escala de ṅ está transcrita de la Ec. 1 del artículo; la comparación con el artículo sobre órbitas reales no depende de ella (un factor ½ en ṅ deja sin cambios todas las cifras ajustadas), de modo que el significado de un valor de nDot transmitido no está validado ahí.

Dos lecturas son propias de Kshana y se declaran como tales:

  • El marco RAC y la normalización de τ = tk / tau_s. Ningún documento público define un marco de corrección LEO para un mensaje de difusión.
  • El reloj de un mensaje de reloj cero es cero en total: se da por hecho que el lazo de gobierno mantiene el reloj aparente, término relativista incluido, en el tiempo del sistema.

El ajustador#

truth.rs integra la órbita con un Runge–Kutta de cuarto orden de paso fijo en un marco que pasa a ejes fijos a la Tierra mediante una única rotación, θ(t) = θ0 + Ω̇e·t, la misma rotación única que aplica un algoritmo de usuario de difusión. La gravedad es de dos cuerpos (gravity_degree = 0), los armónicos zonales de J2 a J6 (2 a 6) o el campo del Earth Gravitational Model 2008 (EGM2008) hasta grado y orden de 7 a 70, cuyos términos teserales llevan la firma de periodo corto que hace difícil un ajuste LEO. La resistencia atmosférica es opcional (densidad exponencial estática). El reloj es de funcionamiento libre (sesgo, deriva, tasa de deriva y ruido blanco de frecuencia con una desviación de Allan declarada a un segundo, más el término relativista periódico) o gobernado (un residuo gauss-markoviano de primer orden).

fit.rs ajusta el conjunto kepleriano con Levenberg–Marquardt sobre elementos no singulares (e·cos ω, e·sin ω, λ0 = M0 + ω): una órbita LEO es casi circular, de modo que ω y M0 por separado son casi indistinguibles. Parte del estado osculador en toe con la tasa del nodo por J2. A priori débiles centrados en cero acotan las tasas y los armónicos que un arco corto no puede resolver; con un peso de observación de 1 cm solo actúan en esas direcciones nulas. El ajuste liu22 toma en cambio el inicio y el estimador de la Sección 2,3 del artículo: parte con todos los términos de corrección en cero, no tiene a priori (mínimos cuadrados simples) y conserva el tope de 100 iteraciones del artículo. Se detiene con la regla de convergencia de parámetros propia de Kshana, cuando cada paso de parámetro es inferior a 1e-3 de su desviación típica formal; el artículo se detiene en cambio cuando el RMS cambia en menos de 0,1 mm. Después se ajustan los polinomios RAC a los residuos a lo largo de la traza, transversales y radiales por mínimos cuadrados lineales, y el polinomio de reloj al reloj de referencia menos el término relativista que añadirá el usuario.

Un hallazgo que codifican los valores por defecto: tras un ajuste kepleriano por mínimos cuadrados, el residuo es por construcción lo que los 16 parámetros no pueden abarcar, de modo que oscila a lo largo de la ventana (varios cruces por cero en cada componente) en lugar de derivar. Un polinomio de corrección lo elimina solo cuando su grado supera lo que el conjunto kepleriano ya abarca: a lo largo de la traza 7, transversal 5 y radial 6 reducen un residuo de 15 minutos de centímetros a aproximadamente un milímetro, mientras que grados transversales menores no eliminan casi nada (el residuo transversal es impar respecto al centro de la ventana). Un sistema que obtiene su parte kepleriana de otro modo deja un residuo de forma distinta, y los grados que necesita se derivan de ello. Los grados de corrección propios del preajuste Celeste (inferiores a estos; solo viven en el archivo del preajuste, src/celeste_iod.rs) se ejecutan aquí sobre la base de mínimos cuadrados de Kshana, por lo que sus términos transversales aportan poco en este motor: una afirmación sobre el ajustador de Kshana, no sobre ningún sistema real. toe y toc son segundos enteros, tal como los transporta el formato binario.

Cada mensaje se usa durante un periodo centrado en su ventana de ajuste (la primera tabla de compromiso usa la ventana completa). Lo que miden las cifras del error de distancia de la señal en el espacio (SISRE) es el error de representación del mensaje frente a la referencia a la que se ajustó, como raíz cuadrática media (RMS) y como máximo sobre el intervalo. El error de determinación y de predicción de órbita, que un segmento terreno o de a bordo real añade por encima, no se modela.

Error de distancia de la señal en el espacio#

sisre.rs usa el SISRE de promedio global de Montenbruck, Steigenberger y Hauschild (2018, Advances in Space Research 61(12):3020–3038, doi 10.1016/j.asr.2018.03.041):

SISRE_orb = sqrt( w_R² R² + w_AC² (A² + C²) )
SISRE     = sqrt( (w_R R − c·dT)² + w_AC² (A² + C²) )

Los pesos son los promedios sobre usuarios distribuidos uniformemente en el casquete visible de la Tierra de cos² η y ½ sin² η, siendo η el ángulo de nadir de la línea de visión en el satélite, calculados para el radio propio de la órbita y su máscara de elevación. Con una máscara de 0° el cálculo reproduce la tabla del artículo para la órbita terrestre media (GPS 0,98 y 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) y la órbita geoestacionaria (0,99 y 1/126): esa es la comprobación VALIDATED. En LEO el mismo promedio da

Altitud w_R 1 / w_AC² ángulo de nadir del horizonte
320 km 0.384 2.35 72.2°
510 km 0.459 2.53 67.8°
550 km 0.472 2.57 67.0°
786 km 0.536 2.81 62.9°
1080 km 0.597 3.11 58.8°
1336 km 0.638 3.37 55.8°

de modo que un usuario LEO, que ve el satélite lejos del nadir, siente los errores a lo largo de la traza y transversales mucho más que un usuario de órbita media.

Análisis#

analysis = [...] elige cualquiera de los cuatro (por defecto, todos).

Compromiso del intervalo de ajuste#

[trade] fija el intervalo, los intervalos de ajuste, los periodos de actualización y los modelos. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 hasta grado 20 y resistencia atmosférica, 30 minutos de mensajes) da, con el periodo de uso igual al intervalo de ajuste:

Modelo Intervalo de ajuste SISRE de órbita, RMS SISRE de órbita, máx. SISRE con reloj, RMS radial / a lo largo de la traza / transversal, RMS
kepler16 60 s 0,041 cm 0,179 cm 0,069 cm 0,09 / 0,01 / 0,00 cm
kepler16 120 s 0,032 cm 0,160 cm 0,079 cm 0,06 / 0,01 / 0,01 cm
kepler16 180 s 0,093 cm 0,540 cm 0,134 cm 0,18 / 0,06 / 0,00 cm
kepler16 300 s 0,310 cm 1,033 cm 0,329 cm 0,09 / 0,49 / 0,02 cm
kepler16 450 s 1,690 cm 7,542 cm 1,696 cm 0,72 / 2,65 / 0,04 cm
kepler16 600 s 2,875 cm 10,219 cm 2,866 cm 1,72 / 4,42 / 0,26 cm
kepler16 900 s 9,345 cm 34,032 cm 9,349 cm 6,46 / 14,14 / 0,91 cm
kepler-rac 60 s 0,000 cm 0,000 cm 0,057 cm 0,00 / 0,00 / 0,00 cm
kepler-rac 120 s 0,000 cm 0,000 cm 0,074 cm 0,00 / 0,00 / 0,00 cm
kepler-rac 180 s 0,000 cm 0,001 cm 0,090 cm 0,00 / 0,00 / 0,00 cm
kepler-rac 300 s 0,004 cm 0,014 cm 0,106 cm 0,00 / 0,00 / 0,01 cm
kepler-rac 450 s 0,037 cm 0,176 cm 0,127 cm 0,05 / 0,01 / 0,04 cm
kepler-rac 600 s 0,214 cm 0,643 cm 0,229 cm 0,28 / 0,09 / 0,26 cm
kepler-rac 900 s 1,015 cm 3,695 cm 1,062 cm 1,52 / 0,70 / 0,91 cm

Y con un ajuste de 300 s, variando la frecuencia con que un nuevo mensaje toma el relevo:

Modelo Periodo de actualización SISRE de órbita, RMS SISRE de órbita, máx.
kepler16 30 s 0,314 cm 0,850 cm
kepler16 60 s 0,288 cm 0,859 cm
kepler16 150 s 0,219 cm 0,830 cm
kepler16 300 s 0,310 cm 1,033 cm
kepler-rac 30 s 0,004 cm 0,009 cm
kepler-rac 60 s 0,004 cm 0,009 cm
kepler-rac 150 s 0,004 cm 0,010 cm
kepler-rac 300 s 0,004 cm 0,014 cm

El conjunto kepleriano de 16 parámetros se degrada de 0,04 cm a 60 s a 9,35 cm a 900 s: un conjunto kepleriano con armónicos de dos veces por revolución no puede seguir durante más de unos minutos los términos de gravedad de mayor frecuencia ni la resistencia atmosférica de un arco LEO, y su residuo de mínimos cuadrados oscila a lo largo de la ventana. Los polinomios a lo largo de la traza, transversal y radial (grados 7, 5, 6) absorben lo que queda: 1,01 cm a 900 s, 0,21 cm a 600 s. En los intervalos más cortos las cifras keplerianas son submilimétricas y ya no están estrictamente ordenadas (el ajuste queda entonces limitado por el condicionamiento, no por el modelo).

Comparación de modelos#

scenarios/leo-navmsg-model-comparison.toml ejecuta los cuatro modelos a 1, 5 y 10 minutos sobre la misma órbita, con el número de parámetros y los bits de efemérides y reloj en la codificación de Kshana:

Modelo Intervalo de ajuste Parámetros Bits de efemérides + reloj SISRE de órbita, RMS SISRE con reloj, RMS
kepler16 60 s 16 570 0,022 cm 0,049 cm
kepler16 300 s 16 570 0,230 cm 0,260 cm
kepler16 600 s 16 570 3,061 cm 3,071 cm
kepler-rac 60 s 37 1045 0,000 cm 0,044 cm
kepler-rac 300 s 37 1045 0,005 cm 0,120 cm
kepler-rac 600 s 37 1045 0,160 cm 0,208 cm
liu22 60 s 22 730 0,014 cm 0,046 cm
liu22 300 s 22 730 0,074 cm 0,142 cm
liu22 600 s 22 730 0,258 cm 0,290 cm
ecef-poly (reloj cero) 60 s 22 750 0,000 cm 28,784 cm
ecef-poly (reloj cero) 300 s 22 750 0,005 cm 28,784 cm
ecef-poly (reloj cero) 600 s 22 750 0,561 cm 28,774 cm

La fila de reloj cero se puntúa frente a un reloj gobernado con un residuo de 0,24 m (la cifra de ATOMIC); las demás, frente al reloj de funcionamiento libre al que se ajustan.

Liu et al. 2025, SISRE frente a la altitud (MODELLED). El mismo escenario ajusta el modelo de 22 parámetros de Kshana sobre arcos de 20 minutos a las cinco altitudes del artículo, con la inclinación de cada satélite:

Satélite Altitud Inclinación Liu et al. 2025 Kshana (RMS solo de órbita) razón
GRACE-A 320 km 89.00° 8,88 cm 4,25 cm 0.48
GRACE-C 475 km 89.00° 6,21 cm 2,87 cm 0.46
Sentinel-2A 786 km 98.57° 2,87 cm 2,20 cm 0.77
HY-2A 966 km 99.34° 2,11 cm 1,25 cm 0.59
Sentinel-6A 1336 km 66.04° 0,75 cm 0,51 cm 0.67

Esto no es una validación. El artículo ajustó órbitas científicas precisas reales de los satélites nombrados (con su historial completo de gravedad, resistencia atmosférica y fuerzas no gravitatorias); Kshana ajusta su propia órbita integrada, evalúa los seis parámetros añadidos como se ha descrito más arriba y usa sus propios pesos de SISRE. La comparación muestra la tendencia y el orden de magnitud. La comparación sobre las mismas órbitas reales que ajustó el artículo es tests/leo_navmsg_fit_real_orbit_oracle.rs (desde la 0,30 el ajuste de 22 parámetros concuerda ahí dentro del factor preregistrado 1,5, en los días del artículo y en ocho días reservados).

Actualización a mitad de pasada#

[midpass] sitúa a un usuario (por defecto 45° N, 10° E), busca la pasada más alta sobre la máscara dentro de search_s y programa mensajes cada update_period_s. En cada cambio dentro de la pasada informa del salto de posición, del salto de reloj, del salto de pseudodistancia del usuario (mensaje nuevo menos antiguo), del mayor salto que podría ver cualquier usuario visible (forma cerrada sobre el cono de nadir), del error de distancia antes y después, y de PASS o FAIL frente a threshold_m. scenarios/leo-navmsg-midpass-update.toml (ajustes de 300 s actualizados cada 150 s):

La pasada más alta del día alcanza 43,7° y dura 455 s. Sus cambios:

Cambio Elevación Salto de posición Salto de reloj Salto de distancia del usuario Salto en la peor geometría
IOD 270 → 271 12.7° 0,07 mm 0,19 mm -0.17 mm 0,27 mm
IOD 271 → 272 37.4° 0,14 mm 0,14 mm -0.24 mm 0,27 mm
IOD 272 → 273 28.2° 0,27 mm -0.22 mm 0,35 mm 0,48 mm

El mayor salto de distancia del usuario es de 0,35 mm frente a un umbral de 5 cm: PASS.

Codificación y decodificación#

scenarios/leo-navmsg-encode-decode.toml codifica el primero de tres mensajes, lo decodifica, comprueba el CRC y rechaza una copia corrupta, imprime el presupuesto de cuantización y escribe y vuelve a leer el bloque de estilo RINEX y la tabla CSV:

  • trama: 171 bytes (1310 bits de carga útil, de los cuales 1045 son de efemérides y reloj), comprobación de redundancia cíclica de 24 bits (CRC-24Q) 0x19105F;
  • mayor efecto de medio paso de un solo campo: af0, 0,545 mm;
  • mensaje completo tras la cuantización: posición a menos de 1,126 mm y reloj a menos de 0,185 mm del mensaje exacto; SISRE 0,113 cm exacto, 0,129 cm decodificado;
  • una trama con un bit invertido es rechazada: true;
  • ida y vuelta RINEX-style dentro de 5.0e-06 m, ida y vuelta CSV dentro de 0.0e+00 m.

Independencia de la plataforma#

Una trama se transmite como enteros, así que han de ser los mismos enteros dondequiera y comoquiera que se ejecute el escenario: el binario nativo en cualquier sistema operativo, una compilación de depuración o de publicación y la compilación WebAssembly (WASM) en un navegador. Tres cosas lo impedían. El seno, el coseno, la arcotangente y la exponencial de la biblioteca matemática de un anfitrión no tienen por qué estar correctamente redondeados y difieren entre anfitriones en la última cifra. Una compilación optimizada en macOS toma el seno y el coseno de un mismo argumento de la rutina combinada del sistema, que no siempre devuelve el valor del seno aislado, de modo que también diferían una compilación de depuración y una de publicación. Y el muestreador normal habitual llama a la exponencial y al logaritmo del anfitrión en sus ramas poco frecuentes. El ajuste convierte una diferencia tan pequeña en campos cuantizados distintos. Por ello todo el tipo de escenario (órbita y reloj de referencia, ajuste, algoritmo de usuario, error de distancia de la señal en el espacio (SISRE), códec) calcula cada una de esas funciones con la biblioteca libm de Rust puro mediante src/portable_math.rs, las potencias enteras como productos explícitos y las desviaciones normales por el método polar sobre la salida bruta del generador. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform fija la trama de 171 bytes del escenario de codificación y decodificación que sigue y un valor de comprobación por modelo de efemérides; una compilación de depuración, una de publicación y la compilación WASM dan documentos de resultados idénticos byte a byte para los cinco escenarios leo-navmsg incluidos.

Formato binario#

Esta es la codificación documentada propia de Kshana. Transporta los componentes que nombran las descripciones publicadas de los mensajes de navegación LEO, modelada sobre el conjunto de campos del ICD de Galileo. No es la disposición de bits de Celeste ni de ningún otro sistema: ninguna es pública.

Trama: preámbulo 0xA7 (8 bits), versión 1 (4), modelo (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), longitud de la carga útil en bytes (12), carga útil rellenada con ceros hasta un byte, CRC-24Q (una comprobación de redundancia cíclica de 24 bits, 24 bits) sobre todos los bytes precedentes. CRC-24Q es la comprobación del estándar RTCM 10403 de la Radio Technical Commission for Maritime Services y del ICD de Galileo (polinomio 0x1864CFB, valor inicial 0); el código reproduce el valor de comprobación de catálogo 0xCDE703 para 123456789 y los bytes de comprobación de la trama de ejemplo del mensaje de tipo 1005 de RTCM 10403 (VALIDATED).

Los pasos del ICD de Galileo se eligieron para la órbita terrestre media y son demasiado gruesos para un mensaje LEO de nivel centimétrico: Crs en pasos de 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm al radio de LEO), los ángulos 2⁻³¹ semicírculos (1,0 cm) y af0 2⁻³⁴ s (1,7 cm). Kshana conserva las unidades del ICD y la convención del semicírculo, afina los pasos para que el error de medio paso de cada campo se mantenga por debajo de 1 mm de posición o de distancia en una ventana de 15 minutos, y ensancha los campos para conservar los rangos que necesita un ajuste LEO:

Bloque Campo Bits Paso Unidad
auxiliar y sincronización SVID 8 1 -
auxiliar y sincronización IOD 10 1 -
auxiliar y sincronización Band 4 1 -
auxiliar y sincronización Health 2 1 -
auxiliar y sincronización WeekNumber 13 1 semana
auxiliar y sincronización ToW 20 1 s
auxiliar y sincronización Flags 4 1 -
reloj (bit indicador 0) toc 20 1 s
reloj (bit indicador 0) af0 34 2^-38 s
reloj (bit indicador 0) af1 28 2^-50 s/s
reloj (bit indicador 0) af2 20 2^-62 s/s^2
kepleriano (modelos 1-3) toe 20 1 s
kepleriano (modelos 1-3) M0 36 2^-35 semicírculo
kepleriano (modelos 1-3) e 32 2^-33 -
kepleriano (modelos 1-3) sqrtA 36 2^-23 m^0,5
kepleriano (modelos 1-3) Omega0 36 2^-35 semicírculo
kepleriano (modelos 1-3) i0 36 2^-35 semicírculo
kepleriano (modelos 1-3) omega 36 2^-35 semicírculo
kepleriano (modelos 1-3) deltaN 29 2^-43 semicircle/s
kepleriano (modelos 1-3) OmegaDot 29 2^-43 semicircle/s
kepleriano (modelos 1-3) iDot 22 2^-43 semicircle/s
kepleriano (modelos 1-3) Cuc 26 2^-34 rad
kepleriano (modelos 1-3) Cus 26 2^-34 rad
kepleriano (modelos 1-3) Crc 26 2^-10 m
kepleriano (modelos 1-3) Crs 26 2^-10 m
kepleriano (modelos 1-3) Cic 26 2^-34 rad
kepleriano (modelos 1-3) Cis 26 2^-34 rad
correcciones a lo largo de la traza/transversal/radial (modelo 2) degA 3 1 -
correcciones a lo largo de la traza/transversal/radial (modelo 2) degC 3 1 -
correcciones a lo largo de la traza/transversal/radial (modelo 2) degR 3 1 -
correcciones a lo largo de la traza/transversal/radial (modelo 2) racTauExp 4 1 log2(s)
correcciones a lo largo de la traza/transversal/radial (modelo 2) a_k, c_k, r_k 22 2^-14 m
extras de Liu et al. 2025 (modelo 3) aDot 26 2^-20 m/s
extras de Liu et al. 2025 (modelo 3) nDot 30 2^-58 semicircle/s^2
extras de Liu et al. 2025 (modelo 3) Crs3 26 2^-10 m
extras de Liu et al. 2025 (modelo 3) Crc3 26 2^-10 m
extras de Liu et al. 2025 (modelo 3) Crs1 26 2^-10 m
extras de Liu et al. 2025 (modelo 3) Crc1 26 2^-10 m
polinomio ECEF (modelo 4) tref 20 1 s
polinomio ECEF (modelo 4) degP 4 1 -
polinomio ECEF (modelo 4) x0, y0, z0 38 2^-11 m
polinomio ECEF (modelo 4) x_k, y_k, z_k (k >= 1) 34 2^-12 m
Klobuchar (bit indicador 1) alpha0 8 2^-30 s
Klobuchar (bit indicador 1) alpha1 8 2^-27 s/semicircle
Klobuchar (bit indicador 1) alpha2 8 2^-24 s/semicircle^2
Klobuchar (bit indicador 1) alpha3 8 2^-24 s/semicircle^3
Klobuchar (bit indicador 1) beta0 8 2^11 s
Klobuchar (bit indicador 1) beta1 8 2^14 s/semicircle
Klobuchar (bit indicador 1) beta2 8 2^16 s/semicircle^2
Klobuchar (bit indicador 1) beta3 8 2^16 s/semicircle^3
NeQuick-G (bit indicador 2) ai0 11 2^-2 sfu
NeQuick-G (bit indicador 2) ai1 11 2^-8 sfu/deg
NeQuick-G (bit indicador 2) ai2 14 2^-15 sfu/deg^2
NeQuick-G (bit indicador 2) SF1-5 5 1 -
UTC (bit indicador 3) A0 32 2^-30 s
UTC (bit indicador 3) A1 24 2^-50 s/s
UTC (bit indicador 3) dtLS 8 1 s
UTC (bit indicador 3) t0t 8 3600 s
UTC (bit indicador 3) WNot 8 1 semana
UTC (bit indicador 3) WNLSF 8 1 semana
UTC (bit indicador 3) DN 3 1 día
UTC (bit indicador 3) dtLSF 8 1 s

Un valor fuera del rango de su campo se rechaza, no se envuelve. Los rangos se comprobaron codificando ajustes a 300 hasta 2000 km, inclinaciones de 0° a 140° e intervalos de ajuste de hasta 20 minutos: deltaN y OmegaDot son amplios porque en una órbita casi ecuatorial el nodo está mal definido y el ajuste reparte entre ambos la deriva por J2 del argumento de latitud, y aDot y nDot porque el ajuste de 22 parámetros sobre 20 minutos absorbe parte de la oscilación de periodo corto del semieje mayor. Desde la 0,30 el ajuste de 22 parámetros es el de mínimos cuadrados simples del artículo, sin a priori, y un ajuste ecuatorial a 800 km necesita entonces nDot de unos 6.3e-10 semicírculos/s^2, por lo que su escala pasó de 2^-60 a 2^-58. Las correcciones a lo largo de la traza de grado 7 de kepler-rac caben en el rango de coeficientes de 22 bits hasta 15 minutos; un ajuste más largo puede superarlo y entonces se rechaza. quantisation_budget informa, para cada campo de efemérides y reloj, del mayor cambio de posición y de distancia que produce un cambio de medio paso a lo largo del periodo de uso, y del cambio del mensaje completo tras la cuantización.

Exportaciones de texto#

RINEX 4,02 no define registros de navegación LEO (sus letras de sistema son G, R, E, J, C, I y S; International Global Navigation Satellite System (GNSS) Service (IGS) RINEX 4,02). El bloque que escribe text.rs toma prestada la forma de RINEX 4 —una cabecera de registro > EPH, una línea de satélite y época con tres términos de reloj, líneas de órbita de difusión de cuatro campos D19.12— y es una extensión documentada de Kshana: letra de sistema L, tipos de registro KP16, KRAC, LU22, APOL y tres comentarios de cabecera que lo indican. Antecedentes de órbitas LEO en registros de navegación de estilo RINEX-4: arXiv 2401,17767.

> EPH L04 KRAC
L04 yyyy mm dd hh mm ss  af0 af1 af2
     IOD      Crs      deltaN   M0
     Cuc      e        Cus      sqrtA
     toe      Cic      Omega0   Cis
     i0       Crc      omega    OmegaDot
     IDOT     Band     Week     Health
     txTOW    clock    degA     degC
     degR     tau_s    a0       a1         then the rest of a_k, c_k and r_k, four per line

La tabla CSV lleva los mensajes kepler16 y kepler-rac, uno por fila. Las columnas por defecto usan los nombres del ICD de Galileo (SVID, IOD, Band, WeekNumber, ToW, Health, toc, af0, af1, af2, toe, M0, sqrtA, e, deltaN, Omega0, OmegaDot, iDot, i0, omega, Crc, Crs, Cic, Cis, Cuc, Cus, a0…, c0…, r0…, racTau); csv_schema selecciona en su lugar la grafía de un preajuste. Ambos formatos se pueden volver a leer.

Ionosfera y UTC#

  • Klobuchar: el modelo L1 del motor (gnss_sim::klobuchar_delay_m, comprobado frente a RTKLIB) escalado a la portadora por la ley de primer orden (f_L1 / f)².
  • NeQuick-G: los coeficientes viajan en el mensaje y effective_ionisation_level devuelve Az = ai0 + ai1·μ + ai2·μ² para una latitud de inclinación modificada μ, con las reglas del algoritmo (unos coeficientes todos nulos dan 63,7 unidades de flujo solar, sfu; el resultado se acota a [0, 400] sfu). El modelo de densidad electrónica NeQuick y su integración oblicua, que convierten Az en un retardo, no están implementados.
  • Un satélite a unos cientos de kilómetros vuela dentro de la ionosfera. Ninguno de los modelos de difusión tiene en cuenta el contenido de electrones por encima del satélite, y no se aplica ninguna corrección por él.
  • UTC: system_to_utc aplica los tres casos del §5.1.7 del ICD de Galileo (antes de un evento de segundo intercalar, a menos de seis horas de él y después); un segundo insertado se lee 86400.

Preajustes#

Los preajustes son datos, un archivo cada uno en src/leo_navmsg/presets/, con sus fuentes. El motor y todos los escenarios incluidos, salvo el de Celeste, se ejecutan sin ellos.

Clave Fuente Órbita Portadora Modelo de mensaje
xona-pulsar PUBLIC, arXiv 2509,19551 1080 km, 53° X1 1593,3225 MHz no publicado
xona-pulsar-0 PUBLIC, arXiv 2509,19551 520 km, 97° X1 no publicado
iridium PUBLIC, informe de RNTF, descripción de la constelación 781 km, 86,4° 1621 MHz (1616–1626 MHz band) ninguno difundido
starlink PUBLIC, NAVIGATION 72(1), descripción de la constelación 550 km, 53° banda Ku, valor de banda media (representativo) ninguno (señales de oportunidad)
centispace PUBLIC, Sensors 2023, Satellite Navigation 2026 700 km, 55° cerca de B1 (enmascarada en la fuente; L1 como sustituto) no publicado
cband-generic REPRESENTATIVE 600 km, 97,8° 5020 MHz (centro de la banda C de RNSS) no publicado
atomic PUBLIC, InsideGNSS 500 km (representativo) L1 (representativo) ecef-poly, grado 6, 60 s, renovado cada 30 s, reloj cero, residuo de gobierno de 0,24 m
celeste-iod WORKSHOP y PUBLIC 510 km, 97,4° 1191,795 MHz kepler-rac, grados y espaciado de registros en el archivo del preajuste

RNSS es el servicio de radionavegación por satélite; RNTF es la Resilient Navigation and Timing Foundation.

Celeste IOD. El preajuste de la demostración en órbita (IOD) Celeste de la Agencia Espacial Europea (ESA) es el único que usa material presentado en el taller LEO-PNT del Navigation Innovation and Support Programme (NAVISP) de la ESA, 2026: la estructura del mensaje (conjunto kepleriano de Galileo más polinomios de corrección a lo largo de la traza/transversal/radial, polinomio de reloj, SVID, salud, IOD, parámetros ionosféricos y de UTC), el espaciado de registros y los nombres de las columnas CSV. La órbita (510 km, heliosíncrona casi polar) y la portadora proceden de fuentes públicas citadas en el archivo. La disposición de bits de Celeste no es pública y no se reproduce; las fases posteriores de Celeste y el sistema LEO-PNT de la Unión Europea (UE) pueden diferir. Cada valor derivado del taller se encuentra en el módulo navmsg de src/celeste_iod.rs, usado por scenarios/leo-navmsg-celeste-iod.toml. Cómo se retiene el preajuste: todo número del motor derivado del taller vive en un único archivo, src/celeste_iod.rs, que build.rs compila solo cuando existe, y en los escenarios exclusivos del repositorio scenarios/*celeste-iod*.toml. Eliminar ese archivo y esos escenarios retiene el preajuste sin editar ninguna fuente; el resto de pruebas, referencias independientes y escenarios se ejecutan sin él, y el recuento de archivos de escenario del README sigue contando los archivos retenidos.

Verificación#

Fila Etiqueta Referencia independiente
Pesos de SISRE VALIDATED tabla de Montenbruck et al. 2018 (GPS, GLONASS, Galileo, BeiDou, geoestacionaria)
algoritmo de usuario del ICD de Galileo VALIDATED RTKLIB eph2pos sobre cuatro efemérides de difusión reales de Galileo, 1 mm por eje (tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED valor de comprobación de catálogo 0xCDE703; trama de ejemplo RTCM 10403 1005
Ajustador y compromiso de SISRE MODELLED referencia de dos cuerpos recuperada a 1 mm; ajuste J2–J6 corregido a 1 mm; crecimiento monótono con el intervalo
Continuidad a mitad de pasada MODELLED identidad del salto; cota de cono en forma cerrada frente a muestreo
Formato binario y presupuesto MODELLED ida y vuelta; el medio paso de cada campo por debajo de 1 mm
RINEX-style y CSV MODELLED ida y vuelta
modelo y ajuste de 22 parámetros de Liu et al. 2025 VALIDATED órbitas precisas ITSG de TU Graz de cuatro satélites frente a las Tablas 4, 5, 6 y 8 del artículo: razones a lo largo de la traza, transversal, radial y SISRE de 0,755 a 1,138 en los días del artículo y de 0,683 a 1,186 en ocho días reservados, dentro de 1.5x (tests/leo_navmsg_fit_real_orbit_oracle.rs)
polinomio de reloj cero de ATOMIC y la tabla de cinco altitudes MODELLED hechos de ATOMIC según InsideGNSS; la tabla publicada de Liu impresa junto al ajuste de órbita integrada de Kshana, no fijada
Ionosfera y UTC MODELLED formas cerradas del ICD; el modelo de Klobuchar comprobado con RTKLIB

Limitaciones#

  • SISRE es solo error de representación: sin error de determinación ni de predicción de órbita.
  • La referencia es una integración de Kshana (sin tercer cuerpo, presión de radiación solar ni mareas), no la órbita precisa de un satélite real.
  • El formato binario y el bloque de estilo RINEX son propios de Kshana.
  • NeQuick-G se transporta, no se integra en un retardo; no hay corrección para un satélite dentro de la ionosfera.
  • La comparación con Liu et al. difiere en órbitas, lectura de parámetros y pesos.