Tradução automática, não revista por um falante nativo. O inglês é a referência.

Navegação em órbita baixa da Terra (LEO)Editar no GitHubFonte: docs/LEO-NAVMSG.md

Mensagem de navegação LEO

O tipo de cenário leo-navmsg constrói a mensagem transmitida de efemérides e relógio de um satélite de posicionamento, navegação e temporização (PNT) em órbita baixa da Terra (LEO) e responde às perguntas que um projetista de mensagens faz: por quanto tempo uma mensagem pode cobrir, o que cada parâmetro extra traz, o que um usuário vê quando a mensagem muda no meio de uma passagem e quantos bits são necessários para transportá-la com precisão de centímetro.

É independente de sistema. Qualquer órbita, qualquer portadora e qualquer um dos quatro modelos de efemérides funcionam sem nenhuma predefinição; as predefinições nomeadas são dados opcionais (ver Predefinições).

Imprima um exemplo incluído com kshana example <name> (um nome por chamada) e execute-o com kshana scenarios/<name>.toml: leo-navmsg-fit-interval-trade, leo-navmsg-model-comparison, leo-navmsg-midpass-update e leo-navmsg-encode-decode. O tipo é também a etapa de mensagem do tipo leo-pnt-chain (LEO-PNT.md) e o membro da campanha leo-focus-data-services, que compõe quatro configurações de mensagem e informa o comprimento do quadro de cada uma (146, 154, 159 e 171 bytes).

Código: src/leo_navmsg/ — elements.rs (registros e algoritmo do usuário), truth.rs (órbita e relógio verdadeiros), fit.rs (ajustador), sisre.rs (erro de distância do sinal no espaço), services.rs (ionosfera e Tempo Universal Coordenado (UTC)), codec.rs (formato binário), text.rs (exportações no estilo Receiver Independent Exchange Format (RINEX) e em valores separados por vírgula (CSV)), presets/ (um arquivo por predefinição), mod.rs (o tipo).

O que uma mensagem carrega#

Parte Conteúdo
Auxiliares identificador de veículo espacial (SVID), edição dos dados (IOD), identificador de banda, estado de saúde do sinal (convenção Galileo: 0 OK, 1 fora de serviço, 2 operações estendidas, 3 em teste)
Sincronização número da semana, tempo da semana (TOW) de transmissão e um polinômio de relógio de segunda ordem af0 + af1·(t − toc) + af2·(t − toc)²
Efemérides um dos quatro modelos abaixo
Outros serviços um conjunto ionosférico transmitido de Klobuchar, coeficientes NeQuick-G do Galileo ai0, ai1, ai2 com cinco indicadores de tempestade, e parâmetros de tempo do sistema para UTC A0, A1, ΔtLS, t0t, WNot, WNLSF, DN, ΔtLSF

Modelos de efemérides#

Código Modelo Parâmetros
kepler16 o conjunto kepleriano do Documento de Controle de Interface do Sinal no Espaço do Serviço Aberto do Galileo (OS SIS ICD): √A, e, i0, Ω0, ω, M0, Δn, Ω̇, i̇, Cuc, Cus, Crc, Crs, Cic, Cis, toe 16
kepler-rac o mesmo, mais polinômios de correção ao longo da trilha, transversal e radial (RAC) a0…, c0…, r0… em τ = tk / tau_s, coeficientes em metros, tau_s a potência de dois igual ou acima da metade do intervalo de ajuste (transmitida), graus definidos por rac_degrees (padrão 7, 5, 6) 16 + 21 por padrão, mais a escala de tempo
liu22 o modelo de 22 parâmetros de Liu, Su, Xie, Zhou e Qu (2025, Remote Sensing 17(16):2894, doi 10.3390/rs17162894): os 16 mais ȧ, ṅ, Crs3, Crc3, Crs1, Crc1 22
ecef-poly o modelo de "relógio zero" do ATOMIC (Autonomous Time and Orbit Determination for Microsatellite Constellations): um polinômio centrado na Terra e fixo à Terra (ECEF) por eixo em τ = (t − t_ref) / 64 s (grau padrão 6), sem termos de relógio porque o relógio do satélite é conduzido ao tempo do sistema (InsideGNSS) 22 por padrão

O algoritmo do usuário (elements::sat_state) é a sequência do ICD do Galileo (equação de Kepler, correções de segundo harmônico, nó fixo à Terra) seguida, para kepler-rac, pelos três polinômios ao longo do referencial próprio da órbita kepleriana: radial ao longo da posição avaliada, transversal ao longo da normal da órbita a partir da inclinação e do nó corrigidos, ao longo da trilha completando a tríade. O relógio acrescenta o termo relativístico do ICD F·e·√A·sin E; para ecef-poly é a forma geral −2 r·v / c² a partir do polinômio e de sua derivada.

Os termos de Liu et al. seguem o algoritmo do usuário do artigo (Seção 2,2, Eq. 1-7): A = A0 + ȧ·tk, n = √(μ/A0³) + Δn + ṅ·tk (versões anteriores a 0,30 usavam a convenção de navegação civil do Global Positioning System (GPS) ½·ṅ·tk, de modo que um ṅ que elas escreviam é o dobro do do artigo), e Crs1·sin Φ + Crc1·cos Φ + Crs3·sin 3Φ + Crc3·cos 3Φ somado ao raio, Φ o argumento de latitude não corrigido. A convenção de escala de ṅ é transcrita da Eq. 1 do artigo; a comparação com o artigo em órbitas reais não depende dela (um fator ½ em ṅ deixa todo valor ajustado inalterado), de modo que o significado de um valor nDot transmitido não é validado ali.

Duas leituras são do próprio Kshana e são declaradas como tal:

  • O referencial RAC e a normalização de τ = tk / tau_s. Nenhum documento público define um referencial de correção LEO para uma mensagem transmitida.
  • O relógio de uma mensagem de relógio zero é zero no total: considera-se que a malha de condução mantém o relógio aparente, incluído o termo relativístico, no tempo do sistema.

O ajustador#

truth.rs integra a órbita com um Runge–Kutta de quarta ordem de passo fixo em um referencial que se converte em eixos fixos à Terra por uma rotação, θ(t) = θ0 + Ω̇e·t, a mesma rotação única que um algoritmo de usuário de transmissão aplica. A gravidade é de dois corpos (gravity_degree = 0), os harmônicos zonais J2 a J6 (2 a 6), ou o campo do Earth Gravitational Model 2008 (EGM2008) até grau e ordem 7 a 70, cujos termos tesserais carregam a assinatura de curto período que torna difícil um ajuste LEO. O arrasto é opcional (densidade exponencial estática). O relógio é de operação livre (viés, deriva, taxa de deriva e ruído de frequência branco com um desvio de Allan declarado de um segundo, mais o termo relativístico periódico) ou conduzido (um resíduo de Gauss–Markov de primeira ordem).

fit.rs ajusta o conjunto kepleriano com Levenberg–Marquardt sobre elementos não singulares (e·cos ω, e·sin ω, λ0 = M0 + ω): uma órbita LEO é quase circular, de modo que ω e M0 isolados são quase indistinguíveis. Parte do estado osculador em toe com a taxa do nó por J2. Priors fracos centrados em zero limitam as taxas e os harmônicos que um arco curto não consegue resolver; com um peso de observação de 1 cm, eles atuam apenas nessas direções nulas. O ajuste liu22 adota, em vez disso, o início e o estimador da Seção 2,3 do artigo: parte com todo termo de correção igual a zero, não tem priors (mínimos quadrados simples) e mantém o limite de 100 iterações do artigo. Ele para pela regra própria do Kshana de convergência de parâmetros, quando todo passo de parâmetro é inferior a 1e-3 de seu desvio padrão formal; o artigo para, em vez disso, quando o RMS varia menos de 0,1 mm. Os polinômios RAC são então ajustados aos resíduos ao longo/transversal/radial por mínimos quadrados lineares, e o polinômio de relógio ao relógio verdadeiro menos o termo relativístico que o usuário somará de volta.

Uma constatação que os padrões codificam: depois de um ajuste kepleriano por mínimos quadrados, o resíduo é, por construção, o que os 16 parâmetros não conseguem abranger, de modo que oscila ao longo da janela (vários cruzamentos por zero em cada componente) em vez de derivar. Um polinômio de correção só o remove quando o seu grau excede o que o conjunto kepleriano já abrange: ao longo da trilha 7, transversal 5 e radial 6 reduzem um resíduo de 15 minutos de centímetros a cerca de um milímetro, enquanto graus transversais menores quase nada removem (o resíduo transversal é ímpar em torno do centro da janela). Um sistema que obtém a sua parte kepleriana de outra maneira deixa um resíduo de formato diferente, e os graus de que precisa decorrem disso. Os graus de correção próprios da predefinição Celeste (menores do que estes; existem apenas no arquivo da predefinição, src/celeste_iod.rs) são executados aqui sobre a base de mínimos quadrados do Kshana, razão pela qual os seus termos transversais contribuem pouco neste mecanismo: uma afirmação sobre o ajustador do Kshana, não sobre qualquer sistema real. toe e toc são segundos inteiros, como o formato binário os carrega.

Cada mensagem é usada durante um período centrado em sua janela de ajuste (a primeira tabela de compromissos usa a janela inteira). O que os valores do erro de distância do sinal no espaço (SISRE) medem é o erro de representação da mensagem em relação à verdade a que foi ajustada, como raiz do valor quadrático médio (RMS) e máximo ao longo do intervalo. O erro de determinação e de predição de órbita, que um segmento real em solo ou a bordo acrescenta por cima, não é modelado.

Erro de distância do sinal no espaço#

sisre.rs usa o SISRE de média global de Montenbruck, Steigenberger e 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²) )

Os pesos são as médias sobre usuários distribuídos uniformemente sobre a calota visível da Terra de cos² η e ½ sin² η, com η o ângulo de nadir da linha de visada no satélite, calculado para o raio e a máscara de elevação da própria órbita. Com uma máscara de 0°, o cálculo reproduz a tabela do artigo para órbita média da Terra (GPS 0,98 e 1/49, GLONASS 1/45, Galileo 1/61, BeiDou 1/54) e órbita geoestacionária (0,99 e 1/126): essa é a verificação VALIDATED. Em LEO, a mesma média dá

Altitude w_R 1 / w_AC² ângulo de nadir no 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 um usuário LEO, que vê o satélite longe do nadir, sente os erros ao longo da trilha e transversais muito mais do que um usuário de órbita média.

Análises#

analysis = [...] escolhe qualquer uma das quatro (padrão: todas).

Compromisso do intervalo de ajuste#

[trade] define o intervalo, os intervalos de ajuste, os períodos de atualização e os modelos. scenarios/leo-navmsg-fit-interval-trade.toml (550 km, 97,6°, EGM2008 até grau 20 e arrasto, 30 minutos de mensagens) dá, com o período de uso igual ao intervalo de ajuste:

Modelo Intervalo de ajuste RMS de órbita do SISRE Máximo de órbita do SISRE RMS do SISRE com relógio RMS radial / ao longo da trilha / transversal
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

E com um ajuste de 300 s, variando a frequência com que uma nova mensagem assume:

Modelo Período de atualização RMS de órbita do SISRE Máximo de órbita do SISRE
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

O conjunto kepleriano de 16 parâmetros se degrada de 0,04 cm a 60 s para 9,35 cm a 900 s: um conjunto kepleriano com harmônicos de duas vezes por revolução não consegue acompanhar os termos de gravidade de frequência mais alta e o arrasto de um arco LEO por mais do que alguns minutos, e o seu resíduo de mínimos quadrados oscila ao longo da janela. Os polinômios ao longo/transversal/radial (graus 7, 5, 6) absorvem o que resta: 1,01 cm a 900 s, 0,21 cm a 600 s. Nos intervalos mais curtos os valores keplerianos são submilimétricos e já não estão estritamente ordenados (o ajuste é então limitado pelo condicionamento, não pelo modelo).

Comparação de modelos#

scenarios/leo-navmsg-model-comparison.toml executa os quatro modelos a 1, 5 e 10 minutos sobre a mesma órbita, com o número de parâmetros e os bits de efemérides e relógio na codificação do Kshana:

Modelo Intervalo de ajuste Parâmetros Bits de efemérides + relógio RMS de órbita do SISRE RMS do SISRE com relógio
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 (relógio zero) 60 s 22 750 0,000 cm 28,784 cm
ecef-poly (relógio zero) 300 s 22 750 0,005 cm 28,784 cm
ecef-poly (relógio zero) 600 s 22 750 0,561 cm 28,774 cm

A linha de relógio zero é avaliada contra um relógio conduzido com um resíduo de 0,24 m (o valor do ATOMIC), as demais contra o relógio de operação livre a que se ajustam.

Liu et al. 2025, SISRE em função da altitude (MODELLED). O mesmo cenário ajusta o modelo de 22 parâmetros do Kshana em arcos de 20 minutos nas cinco altitudes do artigo, na inclinação de cada satélite:

Satélite Altitude Inclinação Liu et al. 2025 Kshana (RMS apenas de órbita) razão
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

Isto não é uma validação. O artigo ajustou órbitas científicas precisas reais dos satélites citados (com todo o seu histórico de gravidade, arrasto e forças não gravitacionais); o Kshana ajusta a sua própria órbita integrada, avalia os seis parâmetros acrescentados como descrito acima e usa os seus próprios pesos de SISRE. A comparação mostra a tendência e a ordem de grandeza. A comparação nas mesmas órbitas reais que o artigo ajustou é tests/leo_navmsg_fit_real_orbit_oracle.rs (desde 0,30 o ajuste de 22 parâmetros concorda ali dentro do fator pré-registrado 1,5, nos dias do artigo e em oito dias reservados).

Atualização no meio da passagem#

[midpass] posiciona um usuário (padrão 45° N, 10° E), encontra a passagem mais alta acima da máscara dentro de search_s e programa mensagens a cada update_period_s. Em cada troca dentro da passagem informa o salto de posição, o salto de relógio, o salto de pseudodistância do usuário (nova mensagem menos a antiga), o maior salto que qualquer usuário visível poderia ver (forma fechada sobre o cone de nadir), o erro de distância antes e depois, e PASS ou FAIL contra threshold_m. scenarios/leo-navmsg-midpass-update.toml (ajustes de 300 s atualizados a cada 150 s):

A passagem mais alta em um dia chega a 43,7° e dura 455 s. Suas trocas:

Troca Elevação Salto de posição Salto de relógio Salto de distância do usuário Salto na pior geometria
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

Maior salto de distância do usuário de 0,35 mm contra um limiar de 5 cm: PASS.

Codificação e decodificação#

scenarios/leo-navmsg-encode-decode.toml codifica a primeira de três mensagens, decodifica-a, verifica o CRC e rejeita uma cópia corrompida, imprime o orçamento de quantização e grava e relê o bloco em estilo RINEX e a tabela CSV:

  • quadro: 171 bytes (1310 bits de carga útil, dos quais 1045 são efemérides e relógio), verificação de redundância cíclica de 24 bits (CRC-24Q) 0x19105F;
  • maior efeito de meio passo de qualquer campo isolado: af0, 0,545 mm;
  • mensagem inteira após a quantização: posição a até 1,126 mm e relógio a até 0,185 mm da mensagem exata; SISRE de 0,113 cm exato, 0,129 cm decodificado;
  • um quadro com um bit invertido é rejeitado: verdadeiro;
  • ida e volta em estilo RINEX dentro de 5.0e-06 m, ida e volta em CSV dentro de 0.0e+00 m.

Independência de plataforma#

Um quadro é transmitido como inteiros, de modo que precisa ser formado pelos mesmos inteiros onde e como quer que o cenário seja executado: o binário nativo em qualquer sistema operacional, uma compilação de depuração ou de release e a compilação WebAssembly (WASM) em um navegador. Três coisas atrapalhavam. O seno, o cosseno, o arco tangente e a exponencial da biblioteca matemática de um hospedeiro não precisam ser arredondados corretamente e diferem entre hospedeiros na última casa. Uma compilação otimizada no macOS obtém o seno e o cosseno de um mesmo argumento da rotina combinada do sistema, que nem sempre devolve o valor do seno isolado, de modo que uma compilação de depuração e uma de release também diferiam. E o amostrador normal usual chama a exponencial e o logaritmo do hospedeiro em seus ramos raros. O ajuste transforma uma diferença tão pequena em campos quantizados diferentes. O tipo de cenário inteiro (órbita e relógio verdadeiros, ajuste, algoritmo do usuário, erro de distância no sinal no espaço (SISRE), codec) calcula, portanto, toda função desse tipo com a crate libm em Rust puro por meio de src/portable_math.rs, potências inteiras como produtos explícitos e desvios normais pelo método polar sobre a saída bruta do gerador. leo_navmsg::tests::the_encoded_frame_is_the_same_bytes_on_every_platform fixa o quadro de 171 bytes do cenário de codificação e decodificação abaixo e um valor de verificação por modelo de efemérides; uma compilação de depuração, uma de release e a compilação WASM produzem documentos de resultado idênticos byte a byte para os cinco cenários leo-navmsg incluídos.

Formato binário#

Esta é a codificação documentada do próprio Kshana. Ela transporta os componentes que as descrições publicadas de mensagens de navegação LEO citam, modelada sobre o conjunto de campos do ICD do Galileo. Não é o layout de bits do Celeste nem de qualquer outro sistema: nenhum é público.

Quadro: preâmbulo 0xA7 (8 bits), versão 1 (4), modelo (4: 1 kepler16, 2 kepler-rac, 3 liu22, 4 ecef-poly), comprimento da carga útil em bytes (12), carga útil preenchida com zeros até um byte, CRC-24Q (uma verificação de redundância cíclica de 24 bits, 24 bits) sobre todos os bytes anteriores. O CRC-24Q é a verificação do padrão RTCM 10403 da Radio Technical Commission for Maritime Services e do ICD do Galileo (polinômio 0x1864CFB, valor inicial 0); o código reproduz o valor de verificação de catálogo 0xCDE703 para 123456789 e os bytes de verificação do quadro de exemplo da mensagem do tipo 1005 do RTCM 10403 (VALIDATED).

Os passos do ICD do Galileo foram escolhidos para órbita terrestre média e são grosseiros demais para uma mensagem LEO de nível centimétrico: Crs em passos de 2⁻⁵ m (3,1 cm), Cuc 2⁻²⁹ rad (1,3 cm no raio LEO), os ângulos 2⁻³¹ semicírculos (1,0 cm) e af0 2⁻³⁴ s (1,7 cm). O Kshana mantém as unidades do ICD e a convenção de semicírculos, refina os passos de modo que o erro de meio passo de cada campo fique abaixo de 1 mm de posição ou de distância em uma janela de 15 minutos, e amplia os campos para manter as faixas de que um ajuste LEO precisa:

Bloco Campo Bits Passo Unidade
auxiliar e de sincronização SVID 8 1 -
auxiliar e de sincronização IOD 10 1 -
auxiliar e de sincronização Band 4 1 -
auxiliar e de sincronização Health 2 1 -
auxiliar e de sincronização WeekNumber 13 1 semana
auxiliar e de sincronização ToW 20 1 s
auxiliar e de sincronização Flags 4 1 -
relógio (bit indicador 0) toc 20 1 s
relógio (bit indicador 0) af0 34 2^-38 s
relógio (bit indicador 0) af1 28 2^-50 s/s
relógio (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
correções ao longo da trajetória/transversais/radiais (modelo 2) degA 3 1 -
correções ao longo da trajetória/transversais/radiais (modelo 2) degC 3 1 -
correções ao longo da trajetória/transversais/radiais (modelo 2) degR 3 1 -
correções ao longo da trajetória/transversais/radiais (modelo 2) racTauExp 4 1 log2(s)
correções ao longo da trajetória/transversais/radiais (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 semicírculo/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
polinômio ECEF (modelo 4) tref 20 1 s
polinômio ECEF (modelo 4) degP 4 1 -
polinômio ECEF (modelo 4) x0, y0, z0 38 2^-11 m
polinômio 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/semicírculo^2
Klobuchar (bit indicador 1) alpha3 8 2^-24 s/semicírculo^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/semicírculo^2
Klobuchar (bit indicador 1) beta3 8 2^16 s/semicírculo^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/grau^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 dia
UTC (bit indicador 3) dtLSF 8 1 s

Um valor fora da faixa de seu campo é recusado, não envolvido por ciclo. As faixas foram verificadas codificando ajustes a 300 a 2000 km, inclinações de 0° a 140° e intervalos de ajuste de até 20 minutos: deltaN e OmegaDot são largos porque, em uma órbita quase equatorial, o nodo é mal definido e o ajuste reparte entre eles a deriva J2 do argumento de latitude, e aDot e nDot porque o ajuste de 22 parâmetros ao longo de 20 minutos absorve parte da oscilação de curto período do semieixo maior. Desde 0,30, o ajuste de 22 parâmetros é o de mínimos quadrados simples do artigo, sem priores, e um ajuste equatorial a 800 km passa a precisar de nDot de cerca de 6.3e-10 semicírculo/s^2, de modo que sua escala passou de 2^-60 para 2^-58. As correções ao longo da trajetória de grau 7 de kepler-rac cabem na faixa de coeficientes de 22 bits até 15 minutos; um ajuste mais longo pode excedê-la e é então recusado. quantisation_budget informa, para cada campo de efemérides e de relógio, a maior variação de posição e de distância que uma mudança de meio passo provoca ao longo do período de uso, e a variação da mensagem inteira após a quantização.

Exportações de texto#

O RINEX 4,02 não define registros de navegação LEO (suas letras de sistema são G, R, E, J, C, I e S; RINEX 4,02 do International Global Navigation Satellite System (GNSS) Service (IGS)). O bloco que text.rs grava toma emprestado o formato do RINEX 4 — um cabeçalho de registro > EPH, uma linha de satélite e época com três termos de relógio, linhas de órbita de transmissão de quatro campos D19.12 — e é uma extensão documentada do Kshana: letra de sistema L, tipos de registro KP16, KRAC, LU22, APOL e três comentários de cabeçalho que o declaram. Trabalho anterior sobre órbitas LEO em registros de navegação em 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

A tabela CSV transporta mensagens kepler16 e kepler-rac, uma por linha. As colunas padrão usam os nomes do ICD do 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 seleciona, em vez disso, a grafia de uma predefinição. Os dois formatos podem ser relidos.

Ionosfera e UTC#

  • Klobuchar: o modelo L1 do mecanismo (gnss_sim::klobuchar_delay_m, verificado contra o RTKLIB) escalado para a portadora pela lei de primeira ordem (f_L1 / f)².
  • NeQuick-G: os coeficientes viajam na mensagem e effective_ionisation_level devolve Az = ai0 + ai1·μ + ai2·μ² para uma latitude de inclinação modificada μ, com as regras do algoritmo (coeficientes todos nulos dão 63,7 unidades de fluxo solar, sfu; o resultado é limitado a [0, 400] sfu). O modelo de densidade eletrônica do NeQuick e sua integração oblíqua, que transformam Az em um atraso, não estão implementados.
  • Um satélite a algumas centenas de quilômetros voa dentro da ionosfera. Nenhum dos modelos de transmissão leva em conta o conteúdo eletrônico acima do satélite, e nenhuma correção para ele é aplicada.
  • UTC: system_to_utc aplica os três casos do ICD do Galileo §5.1.7 (antes de, em até seis horas de e depois de um evento de segundo intercalar); um segundo inserido lê 86400.

Predefinições#

As predefinições são dados, um arquivo cada em src/leo_navmsg/presets/, com suas fontes. O mecanismo e todo cenário incluído, exceto o do Celeste, funcionam sem elas.

Chave Fonte Órbita Portadora Modelo de mensagem
xona-pulsar PUBLIC, arXiv 2509,19551 1080 km, 53° X1 1593,3225 MHz não publicado
xona-pulsar-0 PUBLIC, arXiv 2509,19551 520 km, 97° X1 não publicado
iridium PUBLIC, relatório da RNTF, descrição da constelação 781 km, 86,4° 1621 MHz (banda de 1616–1626 MHz) nenhuma transmitida
starlink PUBLIC, NAVIGATION 72(1), descrição da constelação 550 km, 53° banda Ku, valor do meio da banda (representativo) nenhuma (sinais de oportunidade)
centispace PUBLIC, Sensors 2023, Satellite Navigation 2026 700 km, 55° próximo de B1 (mascarado na fonte; L1 como substituto) não publicado
cband-generic REPRESENTATIVE 600 km, 97,8° 5020 MHz (centro da banda C do RNSS) não publicado
atomic PUBLIC, InsideGNSS 500 km (representativo) L1 (representativo) ecef-poly, grau 6, 60 s, renovado a cada 30 s, relógio nulo, resíduo de direcionamento de 0,24 m
celeste-iod WORKSHOP e PUBLIC 510 km, 97,4° 1191,795 MHz kepler-rac, graus e espaçamento de registros no arquivo da predefinição

RNSS é o serviço de satélites de radionavegação; RNTF, a Resilient Navigation and Timing Foundation.

Celeste IOD. A predefinição da demonstração em órbita (IOD) Celeste da Agência Espacial Europeia (ESA) é a única que usa material apresentado no workshop LEO-PNT do Programa de Inovação e Apoio à Navegação (NAVISP) da ESA, 2026: a estrutura da mensagem (conjunto kepleriano do Galileo mais polinômios de correção ao longo da trajetória/transversais/radiais, polinômio de relógio, SVID, integridade do satélite, IOD, parâmetros ionosféricos e de UTC), o espaçamento de registros e os nomes das colunas CSV. A órbita (510 km, quase polar heliossíncrona) e a portadora vêm de fontes públicas citadas no arquivo. O layout de bits do Celeste não é público e não é reproduzido; fases posteriores do Celeste e o sistema LEO-PNT da União Europeia (UE) podem diferir. Todo valor derivado do workshop fica no módulo navmsg de src/celeste_iod.rs, usado por scenarios/leo-navmsg-celeste-iod.toml. Como a predefinição é retida: todo número derivado do workshop no mecanismo fica em um único arquivo, src/celeste_iod.rs, que build.rs compila somente quando ele existe, e nos cenários exclusivos do repositório scenarios/*celeste-iod*.toml. Excluir esse arquivo e esses cenários retém a predefinição sem edição de código-fonte; todos os outros testes, referências independentes e cenários funcionam sem ela, e a contagem de arquivos de cenário do README ainda conta os arquivos retidos.

Verificação#

Linha Rótulo Referência independente
Pesos do SISRE VALIDATED tabela de Montenbruck et al. 2018 (GPS, GLONASS, Galileo, BeiDou, geoestacionários)
Algoritmo do usuário do ICD do Galileo VALIDATED eph2pos do RTKLIB em quatro efemérides de transmissão reais do Galileo, 1 mm por eixo (tests/leo_navmsg_reference.rs)
CRC-24Q VALIDATED valor de verificação de catálogo 0xCDE703; quadro de exemplo 1005 do RTCM 10403
Ajustador e compromisso do SISRE MODELLED verdade de dois corpos recuperada a 1 mm; ajuste J2–J6 corrigido a 1 mm; crescimento monotônico com o intervalo
Continuidade no meio da passagem MODELLED identidade do salto; limite de cone em forma fechada contra amostragem
Formato binário e orçamento MODELLED idas e voltas; meio passo de cada campo abaixo de 1 mm
Estilo RINEX e CSV MODELLED idas e voltas
Modelo de 22 parâmetros e ajuste de Liu et al. 2025 VALIDATED órbitas precisas ITSG da TU Graz de quatro satélites contra as Tabelas 4, 5, 6 e 8 do artigo: razões ao longo da trajetória, transversal, radial e do SISRE de 0,755 a 1,138 nos dias do artigo e de 0,683 a 1,186 em oito dias reservados, dentro de 1,5x (tests/leo_navmsg_fit_real_orbit_oracle.rs)
Polinômio de relógio nulo do ATOMIC e a tabela de cinco altitudes MODELLED fatos do ATOMIC extraídos da InsideGNSS; a tabela de Liu publicada impressa ao lado do ajuste de órbita integrada do Kshana, não fixada
Ionosfera e UTC MODELLED formas fechadas do ICD; o modelo de Klobuchar verificado contra o RTKLIB

Limitações#

  • O SISRE é apenas erro de representação: sem erro de determinação de órbita nem de predição.
  • A verdade é uma integração do Kshana (sem terceiro corpo, pressão de radiação solar nem marés), não a órbita precisa de um satélite real.
  • O formato binário e o bloco em estilo RINEX são do próprio Kshana.
  • O NeQuick-G é transportado, não integrado em um atraso; sem correção para um satélite dentro da ionosfera.
  • A comparação com Liu et al. difere em órbitas, leitura de parâmetros e pesos.