Kshana · क्षण · o instante preciso
Um simulador de código aberto para a resiliência de PNT (posicionamento, navegação e temporização).
Estado da integração contínua em main
Cobertura de linhas próxima de 95 % de src/, medida em docs/COVERAGE.md e com limiar mínimo de 85 % na integração contínua
176 de 401 capacidades VALIDATED face a uma referência independente externa, a partir da matriz de verificação
Estado do portão de qualidade do SonarQube Cloud
Versão v0.40.0
Licença: AGPL-3.0-only
DOI 10.5281/zenodo.20528627, o registo conceptual do Zenodo de cada versão
Está disponível uma licença comercial da Ashforde® OÜ, ver Edições
kshana em crates.io, a versão publicada atual
kshana em PyPI, a versão publicada atual
kshana em npm, a versão publicada atual
Abrir o Kshana Studio · Instalar · Capacidades · Evidências · Investigação · Documentação · Citar
Conteúdo
- Ensaiar o minuto em que o GNSS fica às escuras
- Novidades da 0,40, Novidades da 0,39, Novidades da 0,38 e a 0,38 em detalhe: pontuação do jammertest, os próprios indicadores do recetor, entradas de máquina, temporização e holdover, pacotes de normas, LunaNet AFS, o ciclo de ida e volta no laboratório, kshana-bench, o observatório, exportadores, ótica, navegação de utilizadores no espaço e infraestrutura lunar
- Kshana Studio e todas as páginas do Studio
- Capacidades: a tabela de áreas, todos os tipos de cenário por família, todos os comandos, todas as superfícies
- Como funciona uma execução, Missões
- Evidências: o registo, domínios de capacidade
- Instalar, Arquitetura (e os diagramas), assistente de IA
- Edições, Investigação, Citar, Licença
- Referência: utilização, formato de cenário, saída, estrutura do repositório, perguntas frequentes, resolução de problemas, versionamento, roteiro, contribuir, documentação
Ensaiar o minuto em que o GNSS fica às escuras#
O Kshana reproduz jamming, spoofing e holdover do relógio quando os sinais GNSS (Global Navigation Satellite System) falham, e diz quanto tempo um sistema mantém a hora e a posição dentro do seu orçamento, e que relógio ou sensor dá mais margem. É um só motor em Rust. Funciona num terminal, num bloco de notas interativo, num IDE (ambiente de desenvolvimento integrado), num assistente de IA (inteligência artificial) ou no seu navegador.
Cada execução é reprodutível bit a bit a partir do cenário, da semente e da versão do motor. Cada capacidade tem uma de três etiquetas num registo verificado por máquina: VALIDATED (uma referência independente externa concorda), MODELLED (internamente consistente, e dito em voz alta) ou PARTNER (um parceiro de hardware é o responsável).
Estado: v0.40.0. Um substrato de simulação validado e reprodutível para a resiliência PNT. A temporização e o holdover vêm primeiro, porque esse domínio é o mais bem validado. O Kshana é um instrumento de estudo e de compromissos: não é hardware gerador de sinais de radiofrequência (RF) (não aciona nenhum rádio e não transmite nada; a sua saída ao nível do sinal são ficheiros de amostras IQ em banda base para recetores de software), não é um recetor GNSS de hardware nem certificado (o seu recetor de software é uma ferramenta de análise) e não é um produto de voo. É novo na área? Comece pelo manual introdutório em linguagem simples e pelo glossário.
Novidades da 0,40#
A 0,40 acrescenta um orçamento de erro em nível de missão, etiqueta cada figura e tabela com o seu nível de evidência, lê registos de relógio medidos, verifica envios de parceiros de dados, estima onde pode estar um emissor de interferência e está disponível em dezassete idiomas além do inglês. O registo agora tem 401 linhas: 176 VALIDATED, 221 MODELLED, 4 PARTNER. Nenhuma linha foi promovida a VALIDATED, e toda falha abaixo está fixada por um teste.
- Cadeia da missão. O tipo de cenário
mission-threadencadeia fases do lançamento à reentrada (launch-ascent,leo-rendezvous,tli-and-cruise,entrye quatro tipos lunares) com regras de transferência declaradas, uma margem face aos requisitos declarados e o elo mais fraco; um exemplo de ponta a ponta de classe Artemis em 11 fases (segmentos terrestre e lunar), 92 tipos de cenário no total. Todo número é MODELLED. A propagação cislunar face à trajetória pública da Artemis I não atinge o seu limiar fixado antecipadamente (45,3 km e 0,25 m/s contra 5 km e 0,05 m/s; a causa são pequenas manobras que o modelo não inclui), e o propagador lunar face à órbita do CAPSTONE não atinge (136,8 km contra 25 km ao fim de uma revolução); a comparação com o LRO é atingida. As linhas permanecem MODELLED (Cadeia da missão, segmento lunar). No Studio, a cadeia lê-se em/studio/mission-thread/. - Etiquetas de evidência. Cada figura e tabela que uma execução escreve traz o nível e os ids das linhas do registo em que assenta, lidos da matriz.
- Relógios medidos. Oito formatos de registo de relógio são lidos (
docs/CLOCK-LOG-FORMATS.md) e uma série ajustada pode conduzir o holdover. Face a limiares fixados antecipadamente, o ajuste não atinge F1(a) em cinco de seis registos e F2 num; ambos permanecem MODELLED (Registo de alterações). - Parceiros de dados.
kshana partner checkverifica o formato de um envio e não pontua nada (docs/PARTNER-DATA.md). - Região do emissor.
kshana interference-map locatefornece uma região e uma elipse, nunca um ponto isolado, a partir de relatos ADS-B ou AIS. Comparado uma vez com os locais de emissores do Jammertest 2025, o resultado é NOT ASSESSABLE para as duas fontes (poucas sessões programadas nos dados abertos), portanto a linha permanece MODELLED (Mapa de interferência). - Benchmark. A nova campanha da 0,40 atinge A3, D3 (ambos EXPLORATORY), R3 e R4; A2, D1 e R1 permanecem NOT MET (Bench).
- Idiomas. nl, pl, pt-BR, pt-PT, fi, sv, da, nb, cs, uk, ru, de, fr, es, et, ja e zh-Hans, como traduções automáticas que nenhum falante nativo revisou; o inglês é a referência, e as execuções noutros idiomas levam cerca do dobro do tempo (
docs/i18n.md).
Novidades na 0,39#
A 0,39 não acrescenta nenhuma funcionalidade e não altera nenhum resultado; a saída do motor é a saída da 0,38. Corrige uma coisa na linha de comandos, atualiza dependências das ferramentas de validação cruzada e enuncia por inteiro os veredictos do benchmark.
- Linha de comandos.
kshana kinds | head(qualquer saída padrão fechada) já não entra em pânico: o programa termina em silêncio com o estado 141, como fazem outras ferramentas perante um pipe fechado. Os outros erros de escrita continuam a comunicar-se. - Dependencies.
memmap20.9.11 nos dois ficheiros de bloqueio de verificação cruzada ANISE epillow13.0.0 ecertifi2026.10.19 nas fixações do ambiente de referência independente, tudo emxval/: nada do que é distribuído foi alterado. - kshana-bench, todos os veredictos. Face aos limiares pré-registados, três são NOT MET, cada um fixado por um teste: A2 (
agc_k_sigmaAUC 0,766 face a pelo menos 0,80), D1 (maior diferença 0,0301) e a tarefa (b) R1 (transportado, não reexecutado). Nenhum limiar foi relaxado (Bench).
Novidades na 0,38#
A 0,38 torna mensurável o árbitro neutro: avalia registos de recetores face a um calendário de testes publicado, lê mais recetores e sensores, testa sistemas de temporização e inclui um benchmark e um observatório de interferência. Continua a ser de caráter consultivo: nada aqui é certificado, nenhum resultado é uma homologação e nada transmite. Cada linha indica o que o registo contém para ela (como se obtém uma etiqueta); um estado nomeia apenas o que foi verificado, e a linha do registo e a página ligada dizem o que não foi.
| Novo na 0,38 | O que faz, e porquê | Estado no registo | Lido |
|---|---|---|---|
| Avaliação do jammertest | kshana jammertest import lê o catálogo de testes e o plano de transmissão publicados da NPRA como verdade de referência agendada; jammertest score avalia um registo de recetor por teste (latência de deteção, alarmes em falta, falsos alarmes, tempo de recuperação), como um pacote de evidências assinado se for dada uma chave |
MODELLED: uma linha do registo. Os limiares foram pré-registados antes de qualquer execução avaliada; nos dados do JammerTest 2024 a regra de dados mínimos falhou nas duas execuções (4 e 7 janelas avaliáveis face a 10 exigidas), pelo que nenhum limiar é avaliável e nada é afirmado | Jammertest |
| Os indicadores do próprio recetor | UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG e NovAtel RXSTATUS lidos para um self_report por época e comparados com os alarmes do Kshana (ambos, só o recetor, só o Kshana, nenhum); um leitor Septentrio SBF e uma entrada --serial só de leitura |
MODELLED; a concordância entre o detetor de um recetor e o do Kshana não é validação | Confiança do recetor |
| Mais recetores e sensores | RTKLIB .pos, NovAtel OEM7, C/N0 de RTCM 3 MSM4/MSM7 (a partir das tabelas pyrtcm com licença BSD, não do texto RTCM), fluxos de monitorização do GNSS-SDR, um registo de IMU como segundo sensor, um pacote ROS 2, uma ponte gnss_lib_py e imu-fit para parâmetros de sensores híbridos |
MODELLED: seis linhas do registo; apenas ensaios escritos por nós, não foi lida nenhuma captura de um recetor real, de uma IMU, de uma execução do GNSS-SDR ou de um grafo ROS | Entradas de máquina |
| Testes de temporização e de holdover | o tipo holdover-test avalia um teste de holdover (GNSS removido pelo operador, holdover, recuperação) a partir de um registo de erro de tempo medido face a máscaras da ITU-T, "medido face à máscara"; leitores de registos do linuxptp e do chrony; as fases de hardware e o campo lab-attestation |
MODELLED: duas linhas do registo; os tempos são a declaração do operador, não verificados | HIL de temporização, Segurança do hardware |
| Pacotes de normas, LunaNet AFS, ciclo completo de laboratório | pacotes avaliados para DHS RPCF, IMO MSC.1/Circ.1575 e ICAO Doc 9849 Apêndice F face a limiares enunciados antes da execução, "fornece elementos de prova em apoio de"; uma tabela de correspondência NIST IR 8323r1; um gerador e verificador de códigos LunaNet AFS; um pacote assinado que liga o cenário, as condições de teste, o registo do recetor e a pontuação de uma execução de laboratório | MODELLED para os pacotes e o ciclo completo; a verificação do código AFS é VALIDATED face às suas colunas de verificação impressas (ver as linhas do registo) | Normas, LunaNet AFS |
| kshana-bench e o observatório | tarefas, partições e métricas fixas para deteção de interferência, deteção por IQ, previsão de holdover e a diferença de otimismo, com um conjunto reservado selado e uma tabela de classificação estática; um produto diário reprodutível de interferência com um atraso de 24 h, células grosseiras e sem atribuição de causa | sem linha própria no registo: avalia submissões, e as suas linhas de base são etiquetadas MODELLED nos ficheiros de resultados; face aos limiares pré-registados, o avaliador, C1 a C3 e D2 são atingidos e três limiares são NOT MET (fixados por testes): A2 (agc_k_sigma AUC 0,766 face a pelo menos 0,80 na partição de teste), D1 (maior diferença 0,0301) e a tarefa (b) R1 (transportado, não reexecutado); ver xval/bench/RESULTS-v2.md |
Bench, Observatório |
| Exportadores | telemetria de confiança como mensagens de descoberta e de estado MQTT do Home Assistant (apenas publicação, sem credenciais), a par de Prometheus, CEF, LEEF e OTLP | MODELLED: uma linha do registo | Telemetria de confiança |
| Margem da ligação ótica ao longo do tempo | o tipo optical-atmosphere pode escrever uma realização com semente da meteorologia de um local como uma série de margem de ligação |
MODELLED: uma linha do registo; uma amostra do modelo, não o clima | Atmosfera ótica |
Destaques da 0,37: registo de alterações. A lista completa da 0,38 está no registo de alterações.
A 0,38 em profundidade#
Cada capacidade da tabela acima, em poucas linhas: o que faz, um comando para a executar, uma imagem desenhada a partir de uma execução real do motor, e o que o registo contém para ela. As imagens são escritas por tools/gen_figures_038.py para docs/figures/0.38/ (nunca desenhadas à mão): python3 tools/gen_figures_038.py reescreve-as a partir de um motor compilado, e --check falha se alguma estiver desatualizada ou se a sua legenda aqui diferir. Quando uma entrada é um registo, é um registo fictício que o script escreve, porque os registos reais de terceiros nunca são incorporados, e a legenda di-lo. Tudo o que se segue é de caráter consultivo: não certificado, não uma homologação, e nada transmite. Um estado nomeia o que foi verificado e nada mais; como se obtém uma etiqueta.
Avaliação do jammertest#
kshana jammertest import transforma o catálogo de testes e o plano de transmissão publicados da NPRA em verdade de referência agendada, e kshana jammertest score avalia um registo de recetor face a ela: para cada teste agendado, se foi detetado, com que atraso, e quanto tempo o recetor demorou a recuperar, além dos falsos alarmes fora de todos os intervalos. O catálogo é obtido, nunca incorporado.
xval/jammertest-plan/fetch.sh ../jammertest-plan
kshana jammertest score session.toml --catalog ../jammertest-plan/testcatalog2025.json \
--plan ../jammertest-plan/plan-tuesday-2025-09-16.json --location 1 --json
Estado no registo: MODELLED. Os limiares foram fixados antes de qualquer execução avaliada; nos dados do JammerTest 2024 a regra de dados mínimos falhou nas duas execuções, pelo que nenhum limiar é avaliável e nada é afirmado. Jammertest.
Os indicadores do próprio recetor#
UBX-NAV-STATUS spoofDetState, UBX-SEC-SIG e NovAtel RXSTATUS são lidos para um self_report por época e postos ao lado dos alarmes do Kshana: ambos, só o recetor, só o Kshana, ou nenhum. Um leitor Septentrio SBF e uma entrada --serial só de leitura alimentam a mesma comparação. Nenhum dos lados é verdade de referência.
kshana receiver-trust session.toml # [log] format = "ubx", path = "receiver.ubx"
Estado no registo: MODELLED. A concordância entre o detetor de um recetor e o do Kshana não é validação. Confiança do recetor.
Mais recetores e sensores#
RTKLIB .pos, NovAtel OEM7, C/N0 de RTCM 3 MSM4/MSM7, fluxos de monitorização do GNSS-SDR, um registo de IMU como segundo sensor, um pacote ROS 2 e uma ponte gnss_lib_py terminam todos na mesma cronologia de receiver-trust. imu-fit lê, a partir de um registo de IMU estacionária, os parâmetros de sensor de que os cenários híbridos e de fusão precisam, de modo que um cenário possa ser executado com o sensor que realmente se tem.
kshana imu-fit still.csv --format csv --axis x --expected-mean 0 --id bench-imu
Estado no registo: MODELLED. Apenas ensaios escritos por nós; não foi lida nenhuma captura de um recetor real, de uma IMU, de uma execução do GNSS-SDR ou de um grafo ROS. Entradas de máquina.
Testes de temporização e de holdover#
O tipo holdover-test avalia um teste de holdover (GNSS removido pelo operador, holdover, recuperação) a partir de um registo de erro de tempo medido face a máscaras da ITU-T, e di-lo com essas palavras: medido face à máscara. Leitores de registos do linuxptp e do chrony alimentam-no; as fases de hardware e o campo lab-attestation dizem quem declarou o quê.
kshana scenarios/holdover-test-example.toml
Estado no registo: MODELLED. Os momentos em que o GNSS foi removido e restaurado são a declaração do operador, não verificados. HIL de temporização, Segurança do hardware.
Pacotes de normas#
Pacotes avaliados para os perfis de teste DHS Resilient PNT, IMO MSC.1/Circ.1575 e ICAO Doc 9849 Apêndice F, mais uma tabela de correspondência NIST IR 8323r1 em compliance-report. Cada teste executa um cenário incluído e compara um campo de resultado com um limiar enunciado antes da execução; um teste que precisa de um registo de recetor é listado como precisando de uma entrada, não avaliado. A formulação é "fornece elementos de prova em apoio de".
kshana standards-pack list
kshana standards-pack run imo-circ-1575
Estado no registo: MODELLED. Um limiar atingido diz que um cenário modelado atingiu um limiar indicado, nada sobre um produto; cada falha é mantida e fixada por um teste. Normas.
LunaNet AFS#
O gerador de códigos do Sinal Direto Aumentado LunaNet (códigos Gold, Weil e terciários, a trama da mensagem e a sua codificação de erros) e um verificador para um fluxo de símbolos gravado ou gerado, fixado a uma edição da especificação.
kshana lunanet-afs-check spec
kshana lunanet-afs-check generate --frames 2 --out afs.sym
kshana lunanet-afs-check symbols afs.sym
Estado no registo: VALIDATED para as verificações de códigos e de sincronização, face aos valores que a especificação imprime (e que marca como TBC); uma verificação é NOT MET, mantida e fixada (uma coluna impressa de código terciário difere: o documento imprime o mesmo valor para dois PRN). As palavras LDPC e CRC das subtramas 2 a 4 não são verificadas. As linhas do registo dizem exatamente quais. LunaNet AFS.
Ciclo completo de laboratório#
kshana.test-conditions/1 é uma descrição publicada do que um laboratório fez (eventos, momentos, potências). kshana evidence round-trip liga o hash do cenário, o hash das condições, o hash do registo do recetor e a pontuação num único pacote assinado, e recusa um pacote cujas condições e cenário de avaliação discordem quanto aos eventos. O Kshana nunca produz nem reproduz um sinal: a forma como um cenário chegou a um recetor é da responsabilidade do operador.
kshana evidence --help
A imagem é a estrutura de um pacote. Estado no registo: MODELLED. Condições de teste, Test bench.
kshana-bench#
Tarefas, partições e métricas fixas para deteção de interferência, deteção por IQ, previsão de holdover e a diferença de otimismo, com um conjunto reservado selado e uma tabela de classificação estática. Avalia submissões; não é uma classificação de recetores.
kshana bench baseline --task d --split test --out results/
Estado no registo: sem linha própria no registo; as linhas de base são etiquetadas MODELLED nos ficheiros de resultados. Face aos limiares pré-registados, o avaliador, C1 a C3 e D2 são atingidos e três limiares são NOT MET, cada um fixado por um teste: A2 (agc_k_sigma AUC 0,766 face a pelo menos 0,80 na partição de teste), D1 (maior diferença 0,0301) e a tarefa (b) R1 (transportado da campanha anterior, não reexecutado). Os valores estão em xval/bench/RESULTS-v2.md. Bench.
Observatório de interferência#
Um produto por dia UTC e região, a partir de um arquivo aberto de posições de aeronaves, numa grelha grosseira fixa: cada célula é degradada, não degradada ou não observada (o que não é "livre"). Publicado não antes de 24 h após o fim do dia, com as células pequenas suprimidas e sem atribuição de causa.
kshana interference-map daily /path/to/extracted/2026-09-15 \
--dataset adsb-lol --day 2026-09-15 --bbox 53.5,9.0,66.0,31.0 --out products/
A imagem são os dias de amostra registados no repositório, não um produto do observatório. Estado no registo: MODELLED: sem referência independente externa, sem verdade de referência e sem atribuição de causa; uma célula que não é observada não foi avaliada, o que não é o mesmo que estar livre. Método do observatório.
Exportadores#
Telemetria de confiança como texto Prometheus, CEF, LEEF, OTLP e mensagens de descoberta e de estado MQTT do Home Assistant. O comando publica apenas para um destino que lhe seja dado e não guarda credenciais.
kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format cef
Estado no registo: MODELLED. Telemetria de confiança.
Margem da ligação ótica ao longo do tempo#
O tipo optical-atmosphere pode escrever uma realização com semente da meteorologia de um local como uma série de margem de ligação: episódios de nuvens, uma coluna de água líquida para cada um, uma amostra de cintilação por passo. A página PNT ótico do Studio abre os cenários optical-atmosphere.
kshana scenarios/optical-atmosphere-network.toml
Estado no registo: MODELLED. Uma amostra do modelo, não o clima. Atmosfera ótica.
Novas vistas do Studio#
kshana.dev/studio ganha uma repetição de ponte (duas execuções lado a lado num só relógio de missão, em /studio/replay/), uma página de PNT ótico (/studio/optical/), uma página de teste de holdover (/studio/holdover/) e um visualizador do observatório (/studio/observatory/). Executam o mesmo motor no navegador, nada é carregado e apresentam a mesma declaração consultiva. As imagens acima são desenhadas a partir da saída do próprio motor por um script; não são capturas de ecrã destas páginas.
Navegação de utilizadores espaciais (gnss-ssv)#
Para uma nave espacial acima, em torno ou muito para além das órbitas GNSS: quantos sinais GNSS pode utilizar, com que intensidade, que qualidade tem a geometria e o que um filtro de bordo pode fazer com eles. Um tipo, quatro modos, escolhidos pelas tabelas do cenário: uma casca de utilizadores (a proporção do tempo com um e com quatro sinais, por constelação), uma trajetória (sinais, C/N0, diluição da precisão e o meio do raio rasante ao longo de uma órbita), uma execução de navegação (um filtro de nove estados sobre pseudodistâncias, até à Lua) e uma formação (navegação relativa de adjuntos em torno de um principal). A fonte pública para a comparação de disponibilidade é o livrete interoperável do Volume de Serviço Espacial GNSS (UN OOSA ST/SPACE/75, do Comité Internacional sobre GNSS), que é ele próprio uma simulação; é obtido, nunca incorporado. Página completa: docs/SSV.md.
kshana scenarios/gnss-ssv-shell.toml # shell: the upper space service volume, reduced size
kshana scenarios/gnss-ssv-heo.toml # trajectory: a high Earth orbit, limb medium
kshana scenarios/gnss-ssv-nav-lunar.toml # navigation: an onboard filter toward the Moon
kshana scenarios/gnss-ssv-formation-heo.toml # formation: relative navigation
Estado no registo: MODELLED, e a comparação com o livrete falha na sua maior parte. Os limiares foram fixados antes da execução. De oito, apenas S0 (o balanço de ligação inverso, 13 de 13 valores) e S6 (a missão lunar) são atingidos. S1 a S5 e S7 são NOT MET: a geometria do volume de serviço superior e inferior (43 de 52 e 48 de 52 células), o volume de serviço superior a 15/20/25 dB-Hz, as seis missões GEO, a missão HEO e o diagrama paramétrico de lóbulos laterais face a diagramas medidos de painéis GPS. Quase todas as falhas em S1 a S5 envolvem o GLONASS, e o livrete imprime dois ângulos de referência diferentes para ele; uma variante de diagnóstico que usa o outro par leva S1, S2 e S4 a todas as células, mas não substitui a execução de referência e nenhuma linha é VALIDATED. O filtro absoluto da execução de formação também é demasiado confiante (erro normalizado ao quadrado médio muito acima do valor de cerca de 3 que um filtro consistente dá).
Navegação de utilizadores espaciais, o que a comparação mostra.
Infraestrutura lunar (lunar-infrastructure)#
A órbita e a superfície da Lua como infraestrutura de navegação e geodésica, em cinco estudos escolhidos por study: od-consistency (uma determinação de órbita a bordo com GNSS terrestre numa órbita em halo face a uma independente em terra), carrier-phase (fixação da ambiguidade inteira entre estações de superfície e um orbitador), frame-coestimation (o datum lunar a partir de medições de distância de estações terrestres com e sem ligações de orbitador), space-tie (desvios de laser, VLBI e GNSS numa só nave espacial face ao erro de ligação local) e geodesy-sensitivity (que família de observáveis vê os números de Love h2, k2 e l2). O modelo é um modelo restrito de três corpos com simplificações indicadas e entradas ilustrativas. Página completa: docs/LUNAR-INFRASTRUCTURE.md.
kshana scenarios/lunar-infrastructure-od-consistency.toml
kshana scenarios/lunar-infrastructure-carrier-phase.toml # quick; the scored run takes about eight minutes
kshana scenarios/lunar-infrastructure-frame-coestimation.toml
kshana scenarios/lunar-infrastructure-space-tie.toml
kshana scenarios/lunar-infrastructure-geodesy-sensitivity.toml
Estado no registo: MODELLED, e três limiares são NOT MET. A numérica é verificada face a programas independentes em numpy e scipy; nada é comparado com uma medição de uma grandeza lunar, e nada é VALIDATED. Atingido: as duas soluções de órbita são consistentes (q médio 5,81 face a 6 esperado), e as ligações de orbitador elevam cerca de 111 vezes o menor valor próprio do datum, assumindo uma órbita conhecida. Não atingido: o erro de modelo injetado de 3e-10 m/s2 não é detetado (C3: a solução a bordo é conhecida com cerca de 350 m, pelo que cerca de dez metros se escondem na sua covariância); a fixação inteira não é conseguida (1 a 3 % de sucesso a 25 dBi, e a 12 dBi registados o problema não pode ser formulado); e a metade do traço de G3 para a adição de uma família de observáveis (o traço subiu em 12 de 28 adições, de cada vez porque a família elevou a característica). Cada falha é fixada por um teste. Infraestrutura lunar.
Kshana Studio#
Abra kshana.dev/studio e todo o motor corre no seu navegador, compilado para WebAssembly. Nada a instalar, e nada é carregado. O Studio tem duas vistas do mesmo motor, e um comutador no cabeçalho alterna entre elas, mantendo o cenário, a vista e as definições que tenha alterado.
A vista Simples é aquela em que o Studio abre. Parte de perguntas (quantos satélites consigo ver, posso confiar na minha solução de posição, quanto tempo pode um relógio manter a hora, o que faz um jammer ao meu recetor) e de um mapa de tudo o que o motor pode fazer, com cada área acompanhada da sua proporção de métodos validados. Abra um cenário e a resposta vem primeiro: uma frase simples, escrita para o que esse cenário mede, depois os seus valores principais e um gráfico. No máximo cinco definições ficam à vista, as que mais alteram a resposta; as restantes aguardam em Definições avançadas. Como isto é calculado explica o método, e Para investigadores dá os valores do próprio motor, o ficheiro do cenário, o código para o executar a partir de Python e a citação.

A vista Avançada é o painel completo: a biblioteca de cenários, cinco passos numerados (Escolher, Definir, Executar, Ler resultados, Partilhar ou exportar), os valores principais com selos PASS e FAIL onde a execução indica um limiar, e todos os painéis: resumo, gráficos, mapas, repetição, o relatório do motor e exportações. Uma caixa de pesquisa chega a cenários, domínios e aos campos que contêm, e é possível fixar até quatro execuções e compará-las lado a lado.
O ecrã inicial da vista Simples, e a vista Avançada após uma execução


O código-fonte do Studio e as suas notas de compilação estão em web/README.md.
O sítio#
O resto de kshana.dev é construído a partir dos ficheiros próprios deste repositório e de execuções do motor: missões, capacidades, o registo de evidências, a investigação publicada e as edições.

Capacidades#
Um único motor cobre toda a cadeia de falhas, do primeiro satélite sob interferência ao último nanossegundo de holdover do relógio. O motor tem 92 tipos de cenário; kshana kinds os lista e docs/SCENARIOS.md documenta cada campo.
| Capacidade | A que responde |
|---|---|
| Espetro | como um jammer toma a banda L do GNSS, banda a banda, segundo a segundo |
| Relógios e temporização | quanto tempo cada relógio mantém a hora depois de o GNSS se perder |
| Constelações em torno de qualquer corpo | cobertura, diluição da precisão e disponibilidade em torno da Terra, da Lua ou de Marte |
| Sistema solar | onde está cada planeta, e o tempo de luz de qualquer ligação |
| Navegação em órbita terrestre baixa | uma passagem, uma ligação, uma mensagem de navegação e uma solução de posição fundida, fase a fase |
| Campanhas | uma missão encadeada, uma varredura ou um conjunto de Monte Carlo num só cenário |
| Animação | a série temporal de uma execução como desenho animado, um leitor ou fotogramas |
| Relatórios | cada valor com a sua unidade e a sua etiqueta, em HTML (HyperText Markup Language) e JSON (JavaScript Object Notation) |
| Exportações de interoperabilidade | órbitas e geometria para outras ferramentas: SP3, CCSDS OMM e OEM, CZML, KML, GeoJSON, STK e SigMF |
| Confiança marítima | pode a ponte confiar nesta solução de posição: uma pontuação de 0-100 e motivos para o NMEA de uma embarcação, em direto ou a partir de um registo (consultivo, não um equipamento de navegação homologado) |
| Fluxos NMEA de formação | NMEA de ponte sintético com jamming e spoofing encenados e um registo de instrutor, para formação de tripulações (apenas texto; nunca para os sistemas de navegação em direto de uma embarcação; consultivo, não um equipamento de navegação homologado) |
| Mapa de interferência | onde aeronaves e navios comunicaram dados de navegação degradados, e quanto de um percurso isso afeta |
| Região do emissor | onde, sob hipóteses declaradas, pode estar uma fonte de relatos de posição degradados: regiões com confiança declarada, um centroide com a respetiva elipse, nunca um ponto (MODELLED; kshana interference-map locate) |
| Pacotes de evidências | um registo técnico assinado e verificável offline da janela de registo de uma embarcação e do que o motor calculou a partir dela, para um relatório de incidente (consultivo, não um equipamento de navegação homologado) |
| Telemetria de confiança | o fluxo de confiança como métricas Prometheus, eventos SIEM e OpenTelemetry opcional, com um painel Grafana de exemplo (deploy/grafana/kshana-gnss-trust.json) |
| Signal K e OpenCPN | a pontuação de confiança no servidor Signal K de um barco e no OpenCPN, com uma compilação de referência para um pequeno computador junto ao recetor (consultivo, não um equipamento de navegação homologado) |
| Exportação para test bench | kshana bench-export: o movimento do veículo e os eventos de um cenário para um simulador GNSS de laboratório (nenhum sinal é escrito), e como avaliar depois o registo do recetor |
| Mapeamento de compliance e relatório | kshana compliance-report: para que linhas de referenciais públicos de resiliência um conjunto de execuções fornece elementos de prova em apoio de, e a lacuna que fica |
| Cadernos interativos | tutoriais executáveis: fluxos de confiança e de formação de embarcações, uma exposição de percurso no mapa de interferência, mapeamento de compliance e o test bench, quântico contra GDOP clássico |
| Verificador de Galileo OSNMA | de que satélites um recetor pode autenticar criptograficamente os dados de navegação, e porque falha uma verificação; o Kshana não concede quaisquer direitos ao abrigo dos ICD IPRs da OSNMA da UE (ver o AVISO na página) |
Os formatos de exportação por extenso: SP3 é Standard Product 3; CCSDS OMM e OEM são as Orbit Mean-elements e Orbit Ephemeris Messages do Consultative Committee for Space Data Systems; CZML e KML são as Cesium e Keyhole Markup Languages; STK é Systems Tool Kit; SigMF é o Signal Metadata Format.
Cada capacidade, desenhada a partir de uma execução real: a cascata da banda L, o mapa de cobertura, o sistema solar e uma passagem em órbita terrestre baixa
Execute qualquer um deles com kshana example <scenario> > s.toml && kshana s.toml: os cenários são l-band-waterfall-jamming, constellation-multi-gnss-coverage, solar-system-tour e leo-pass-iridium.
As capacidades marítimas e de interferência, desenhadas a partir de entradas sintéticas registadas no repositório: uma pontuação de confiança, um mapa de interferência com exposição de percurso, um fluxo de formação e um pacote de evidências
Os quatro são dados fictícios e de caráter consultivo: mostram o formato e o comportamento do software, não o desempenho de qualquer recetor ou sistema face a interferência. Execute o primeiro com kshana receiver-trust examples/maritime-trust/session.toml, o segundo com kshana route-exposure sobre as amostras em examples/interference-map/, o terceiro com kshana nmea-scenario scenarios/training/coastal-drag-off.toml --out drag.nmea (apenas para formação: nunca o alimentar a equipamento de navegação em direto) e o quarto como em docs/EVIDENCE-PACKS.md.
A tabela completa de capacidades, domínio a domínio
Segue-se o pormenor completo domínio a domínio; para um registo de maturidade por capacidade, ver docs/CAPABILITY.md e docs/VALIDATION.md.
| Domínio | Capacidade |
|---|---|
| Órbita e geometria | Propagação SGP4/SDP4 (validada até 4,12 mm face a todos os 666 vetores AIAA 2006-6753); elementos de duas linhas reais (um instantâneo gps-ops do Celestrak, registado no repositório e datado) ou constelações Walker-delta sintéticas cujos elementos médios realizam a fórmula i:T/P/F a menos de 1 km ao longo de uma propagação de 24 h; visibilidade multiconstelação, diluição da precisão — geométrica, de posição, horizontal, vertical e de tempo (GDOP/PDOP/HDOP/VDOP/TDOP), validada até 1e-6 face ao gnss_lib_py 1.0.4, Stanford NAV Lab (Navigation and Autonomous Vehicles Laboratory), e disponibilidade GNSS; um otimizador de projeto de constelações sem gradiente, o dimensionamento de número mínimo de satélites por ruas de cobertura, uma ferramenta de comparação multiconstelação e uma varredura de projetos Walker que tabula cobertura / PDOP / tempo de revisita sobre uma grelha de planos × satélites e indica os projetos ótimos de Pareto. |
| Propagador numérico | Um propagador numérico de Cowell (src/propagator.rs) que complementa o caminho analítico SGP4/SDP4, com um modelo de forças hierárquico de sete perturbações (src/forces.rs): dois corpos + o campo zonal J2–J6 completo (os coeficientes harmónicos zonais de achatamento da Terra J2 a J6; o gradiente analítico exato do seu potencial perturbador), um geopotencial harmónico esférico tesseral EGM2008 até grau/ordem 70 opcional (Earth Gravitational Model 2008; src/gravity_sh.rs; coeficientes reais da NGA — US (United States) National Geospatial-Intelligence Agency —, recorrência de Legendre normalizada de Holmes–Featherstone, verificada face às funções de Legendre em forma fechada e à identidade analítica de ∇V), gravidade de terceiro corpo do Sol e da Lua conduzida pela época (uma efeméride integrada de baixa precisão, sem kernel DE/SPK — Development Ephemeris / SPICE Spacecraft and Planet Kernel), pressão de radiação solar (modelo de bala de canhão com sombra cónica de umbra + penumbra), resistência atmosférica (densidade exponencial por troços de Vallado, atmosfera em co-rotação), a correção relativista pós-newtoniana de Schwarzschild e o termo de arrastamento de referencial de Lense–Thirring (IERS — International Earth Rotation and Reference Systems Service — Conventions 2010 §10, linear no momento angular da Terra, ~1–2 ordens abaixo de Schwarzschild) — acionado por uma escolha de dois integradores adaptativos (RK4 — Runge–Kutta de quarta ordem — com duplicação de passo ou o par embutido Dormand–Prince RK5(4)). Validado face ao Orekit 12,2 (CS GROUP, Apache-2.0) NumericalPropagator/DormandPrince853 — 278 épocas em LEO (órbita terrestre baixa) + GTO (órbita de transferência geoestacionária), com os níveis de forças conservativas a concordar até um pior caso de |Δr| 0,08 m ao longo de 24 h (tests/numerical_cowell_propagator_reference.rs); o nível de resistência atmosférica é caracterizado em separado (≈ 333 m / 24 h) e as entradas absolutas de efemérides do Sol/Lua e de densidade continuam, com honestidade, modeladas. Evidência interna adicional (não validação externa): a órbita não perturbada é verificada face à solução de Kepler exata em variáveis universais até abaixo do metro ao longo de 24 h, a energia e o momento angular conservam-se até ~1e-9, e cada perturbação corresponde a uma assinatura em forma fechada deduzida à mão. |
| Manobras e projeto de trajetórias | Nós de ΔV impulsivo com propagação de covariância 6×6 (referenciais de erro de execução ECI — inercial centrado na Terra — / LVLH — vertical local, horizontal local), integração de queima finita verificada face à equação do foguetão de Tsiolkovsky em forma fechada até < 0,01 %, um solucionador de Lambert de uma só revolução de Izzo-2015, um propagador de Kepler exato em variáveis universais, e uma varredura porkchop (lançamento × chegada) de C3 (energia de lançamento) / V∞ de chegada emitida como uma grelha de contornos JSON — a camada de simulação de desempenho acima do GMAT/Orekit, com cada saída de Lambert verificada em ida e volta face à verdade de referência de dois corpos e o mínimo do porkchop verificado face ao piso analítico de Hohmann. |
| Sistemas de tempo e referenciais | Escalas UTC / TAI / TT / UT1 com segundos intercalares do IERS (Tempo Universal Coordenado, Tempo Atómico Internacional, Tempo Terrestre e o tempo de rotação da Terra Tempo Universal 1), uma API (interface de programação de aplicações) de data juliana, o Ângulo de Rotação da Terra (ERA) IAU-2000 (União Astronómica Internacional), TEME ↔ ECEF baseado em GMST (Greenwich Mean Sidereal Time) (equador verdadeiro, equinócio médio ↔ centrado na Terra e fixo à Terra) com referenciais geodésicos WGS-84 (World Geodetic System 1984), precessão IAU 2006 (Fukushima–Williams), nutação IAU 2000A/2000B completa, movimento polar do IERS, e a redução GCRS↔ITRS IAU 2006/2000A baseada no CIO sem equinócio (CIO = Celestial Intermediate Origin) — tudo validado bit a bit face aos vetores SOFA/ERFA, e verificado de forma independente face ao ANISE (a reimplementação NAIF/SPICE em Rust puro; NAIF = a Navigation and Ancillary Information Facility da NASA, a Administração Nacional da Aeronáutica e do Espaço dos EUA): o GCRS→ITRS do kshana face ao ITRF93 do ANISE (International Terrestrial Reference Frame 1993) a partir de earth_latest_high_prec.bpc do JPL, com os mesmos parâmetros de orientação da Terra do IERS fornecidos a ambos, concordam até ≤ 0,86 m no solo / ≤ 3,6 m na órbita GNSS (máx. 0,028″) em oito épocas 2020–2023. |
| Inercial | INS strapdown de três eixos — atitude por quaterniões, mecanização WGS-84 NED (norte-este-baixo), compensação de coning/sculling, e um modelo determinista de erros de IMU (fator de escala, desalinhamento, sensibilidade à gravidade, quantização, deriva); um acelerómetro de interferómetro de átomos frios a partir de primeiros princípios (fase de Mach–Zehnder, ruído de projeção quântica, decaimento de contraste, acoplamento de vibração) que deriva o coeficiente de passeio aleatório da velocidade; e um filtro de partículas de reamostragem por importância sequencial para navegação auxiliada por mapas (referenciada a terreno/gravidade) sem GPS. |
| PNT alternativo (sem GPS) | Um modelo de medição de gravímetro de átomos frios cujo piso de ruído branco (σ = ASD/√τ, ASD = densidade espetral de amplitude) é derivado da física do acelerómetro CAI; um campo de anomalia gravítica em harmónicos esféricos de grau baixo e totalmente normalizado (verificado face às funções de Legendre em forma fechada e a uma anomalia de um só termo deduzida à mão) mais mascons sintéticos; o núcleo de síntese do funcional gravítico (gravity_sh::gravity_magnitude / gravity_disturbance_mgal) — o "leitor de mapas" com que um navegador auxiliado pela gravidade faz a correspondência — é validado face ao padrão de gravidade normal GRS80 (Geodetic Reference System 1980), reproduzindo a gravidade normal de Somigliana em forma fechada e os γ_e / γ_p publicados até 3.5e-12 e produzindo um mapa de perturbação fisicamente limitado a partir do campo EGM2008 real do ICGEM (International Centre for Global Earth Models) (RMS — raiz do valor quadrático médio — ≈ 26 mGal, máx. ≈ 89 mGal a g/o 70; tests/icgem_gravity_reference.rs); e um filtro de partículas de correspondência de mapas gravíticos que recupera uma trajetória sem GPS a partir da sequência de anomalias que sobrevoa. Estende-se à navegação referenciada ao terreno (TERCOM/SITAN — terrain contour matching / Sandia Inertial Terrain-Aided Navigation — face a um DEM (modelo digital de elevação) SRTM (Shuttle Radar Topography Mission) .hgt, src/altpnt/terrain.rs), a um campo magnético principal geomagnético IGRF-14 (14.ª geração do International Geomagnetic Reference Field) até grau/ordem 13 (src/igrf.rs, verificado face à forma fechada do dipolo inclinado e a diferenças finitas de ∇V), e a um navegador combinado de gravidade + magnetismo + terreno que funde os três canais escalares num único filtro de partículas (a informação é aditiva — nenhum canal piora a solução de posição). Um teste de referência de 60 minutos sem GPS (uma interrupção de ~700 km / uma hora em que a solução inercial deriva até ~70 km) é recuperado até ~145 m (< 500 m) por um correlacionador hierárquico de grosseiro a fino — o alvo Quantum Wayfarer do NAVISP (Navigation Innovation and Support Programme) da ESA. |
| Fusão | EKF (filtro de Kalman estendido) de estados de erro GNSS/INS de acoplamento fraco com 15 estados e realimentação em malha fechada (o pacote gnss-ins); uma atualização de pseudodistância de acoplamento forte que continua a corrigir com menos de quatro satélites; um filtro acoplado de relógio + posição; um estimador geral de Kalman unscented (de pontos sigma) para medições fortemente não lineares; um navegador UKF GNSS/INS de acoplamento forte (pseudodistância + Doppler) cuja deriva orbital com modelo de forças é verificada quanto à autoconsistência até 0,77 m RMS numa passagem LEO curva de 30 minutos que inclui uma interrupção GNSS de 120 segundos (um valor de consistência do filtro, não uma validação por referência independente externa — este navegador continua MODELLED); e um UKF GNSS/INS de acoplamento forte com 17 estados completo (posição, velocidade, erro de atitude, enviesamentos do acelerómetro e do giroscópio, enviesamento e deriva do relógio) cujo cálculo por estima quântico-CAI percorre uma interrupção de 120 segundos com o passeio aleatório de velocidade derivado do acelerómetro de átomos frios. |
| Determinação de órbita | Recuperação de um estado orbital [r, v] a partir do seguimento de distância de estações terrestres, compondo o modelo de forças de dois corpos + J2 e o integrador RK4 com um corretor de lote de Gauss–Newton (determine_orbit_batch, abaixo do metro / mm·s⁻¹ a partir de distâncias sem ruído, ~2 m com um piso de ruído de 5 m) e uma variante de filtro unscented sequencial (determine_orbit_sequential). |
| Teoria da observabilidade e da estimação | Uma camada geral e reutilizável de informação de Fisher / Cramér–Rao (src/fim.rs): a matriz de informação M = HᵀWH, o limite inferior de Cramér–Rao, a característica de observabilidade e o espaço nulo do defeito de datum (pseudoinversa de Moore–Penrose), e escalares de projeto de experiências ótimos D/A/E/T a partir de um solucionador próprio de Jacobi simétrico. Validado — valores próprios face a numpy.linalg.eigh, a covariância do CRLB face a σ²(XᵀX)⁻¹ através de numpy.linalg.inv, e o DOP GNSS a partir da matriz de informação, todos coincidentes até 1e-9 (tests/fim_observability_reference.rs), e adicionalmente verificado face aos limites em forma fechada de Kay (1993) com atingimento do CRLB por Monte Carlo. Sustenta o motor de DOP, o CRLB de geolocalização passiva e o teorema de observabilidade de estações absolutas lunares (abaixo). |
| Lunar e cislunar | Um propagador do problema restrito circular de três corpos (CR3BP) Terra–Lua no referencial rotativo — constante de Jacobi conservada e os cinco pontos de Lagrange (src/cr3bp.rs) — agora com uma matriz de transição de estado (STM) 6×6 e um corretor diferencial de tiro único (cr3bp_jacobian, propagate_state_stm, differential_correct_halo) que produz órbitas halo / NRHO (órbita halo quase retilínea) genuinamente periódicas: a STM é validada face a diferenças finitas, as órbitas corrigidas fecham-se até à precisão da máquina, e semear o estado de apolune publicado reproduz a NRHO L2 sul 9:2 (L2 = o segundo ponto de Lagrange Terra–Lua; a órbita do Gateway) com período ≈ 6,57 d / perilune ≈ 3 250 km, consistente com os ≈ 6,56 d / ≈ 3 370 km publicados (uma solução CR3BP — circular, sem Sol —, não validada face a uma efeméride real de LANS (Lunar Augmented Navigation Service)/Gateway; a transformação selenocêntrica MCI/MCMF (inercial centrado na Lua / centrado na Lua e fixo à Lua) da órbita corrigida é um passo seguinte); mais a geometria PNT cislunar LunaNet / LNIS (LunaNet Interoperability Specification) (redução MCI↔MCMF, coordenadas selenográficas) com uma passagem ARAIM do polo sul lunar que expõe com honestidade a lacuna de integridade: um σ_URE (erro de distância do utilizador) de ~30 m leva o nível de proteção muito acima de um limite de alerta de 50 m (src/lunar.rs, scenarios/lunanet-araim.toml); e uma aumentação de DOP por balizas de superfície (src/lunar_beacon.rs) que mostra como algumas balizas de medição de distância de superfície, com posição levantada, fornecem as linhas de visada de baixa elevação e grande azimute que um conjunto só em órbita, todo na vertical, não tem — colapsando o GDOP polar sul mal condicionado e, através de um orçamento de erro pela raiz da soma dos quadrados, a exatidão de posição obtida em metros (reutilizando o núcleo de DOP validado com o gnss_lib_py e a forma fechada de visibilidade com horizonte sem atmosfera; a análise da diluição da precisão está descrita em arXiv:2607,06212). |
| Conjunto PNT lunar | Um conjunto de navegação lunar/cislunar construído sobre o núcleo CR3BP, cada elemento um kind executável: Tempo Coordenado Lunar (lunar-time-offset, src/lunar_time.rs — a taxa secular LTC/TCL − TT (LTC = Lunar Coordinate Time; TCL = a sua forma francesa, Temps-Coordonnée Lunaire) a partir da diferença de autopotencial + termo cinético, indicada com a banda publicada de 56–59 µs/dia); um observável de atraso de VLBI lunar (interferometria de linha de base muito longa) geodésico (lunar-vlbi, src/lunar_vlbi.rs — um atraso + taxa de diferença de duas distâncias em campo próximo com linha de base na Terra, verificado face ao Δ-DOR (delta differential one-way ranging) de onda plana do mesmo código no limite de campo distante, com derivadas parciais verificadas por diferenças finitas); um estimador em lote de OD + relógio multitécnica conjunto (lunar-joint-od-clock, src/lunar_combination.rs — um ajuste de Gauss–Newton que funde VLBI + distâncias locais lunares + distâncias entre satélites) que traz um resultado de observabilidade por informação de Fisher: a medição de distâncias interna, por si só, deixa um defeito de datum de corpo rígido com seis graus de liberdade, pelo que a posição absoluta de uma estação de superfície é inobservável até ser acrescentada uma ligação ao referencial da Terra — um atraso de VLBI com linha de base na Terra restaura a observabilidade para uma constelação esparsa e afina o limite de Cramér–Rao para uma rica, fechando-se o datum absoluto com três estações terrestres não colineares (o resultado de observabilidade está descrito em arXiv:2607,02566); realização de referencial (lunar-frame-realisation, src/lunar_frame_realise.rs — um ajuste de datum de Helmert de 7 parâmetros + ligação de orientação WGCCRE IAU 2015 — WGCCRE = o Grupo de Trabalho da IAU sobre Coordenadas Cartográficas e Elementos de Rotação); uma análise de volume de serviço de classe Moonlight/LCNS (LCNS = Lunar Communications and Navigation Services; moonlight-service-volume, src/lunar_service.rs — DOP / cobertura / disponibilidade + uma envolvente HPL/VPL (nível de proteção horizontal/vertical) de ARAIM lunar generalizado, reutilizando o núcleo de DOP validado com o gnss_lib_py e a maquinaria de σ_URE≈30 m da LunaNet); PNT diferencial lunar (lunar-differential-pnt, src/lunar_dpnt.rs — um análogo lunar de GNSS diferencial / sistema de aumentação baseado em satélites (SBAS): cancelamento exato do relógio em modo comum + descorrelação espacial de primeira ordem face à linha de base, reutilizando o nível de proteção SBAS da DO-229E — sendo a DO-229E a norma de desempenho operacional mínimo da RTCA (antes Radio Technical Commission for Aeronautics) para recetores SBAS); e uma exportação de interoperabilidade alinhada com LunaNet/IOAG (IOAG = Interagency Operations Advisory Group; lunar-interop-export, src/lunar_interop.rs — CCSDS-OEM (Orbit Ephemeris Message) + ida e volta de escala de tempo lunar no referencial de corpo lunar IAU 2015, envolvida no envelope KIF). Os níveis de evidência de cada peça estão na matriz de verificação: o Tempo Coordenado Lunar, o estimador de OD + relógio conjunto, a realização de referencial e a geometria do volume de serviço são VALIDATED (cada um face à referência independente que a sua linha nomeia, tal como o caminho do núcleo do atraso de VLBI); o observável de VLBI, o resultado de observabilidade do defeito de datum, o PNT diferencial e a exportação de interoperabilidade são MODELLED. Os parâmetros são valores ilustrativos de fontes públicas — não validados face a seguimento real de VLBI/Gateway, não afiliados nem apoiados por nenhuma agência, sem qualquer afirmação de TRL (nível de maturidade tecnológica) / herança. |
| PNT do espaço profundo e de Marte | Um motor de navegação radiométrica aberto: tempo de luz iterativo + atraso relativista de Shapiro, Doppler e distância de duas/uma/três vias (dois troços de Moyer), razões de retorno coerentes de transponder, medição de distância regenerativa/PN (ruído pseudoaleatório) (CCSDS 414, a norma de medição de distância por ruído pseudoaleatório), e Δ-DOR no plano do céu (CCSDS 506, a norma Delta-DOR), com meios de plasma solar/tropo/iono; análise e emissão de mensagens de dados de seguimento CCSDS-TDM (503); um Filtro de Informação de Raiz Quadrada de dinâmica reduzida (acelerações empíricas RTN — radial, transversal, normal — + um relógio de bordo de 3 estados + resistência atmosférica de Marte) que faz determinação de órbita em LMO de Marte até ≈ 0,2 m num ciclo fechado sintético; um estimador de fusão de uma via + duas vias conjunto; um núcleo de dinâmica multicorpo (Body{μ, re, zonals, gravity, IAU-pole}, gravidade GMM-3 de Marte (Goddard Mars Model 3), um referencial fixo ao corpo IAU de Marte, uma interface EphemerisProvider substituível, datas julianas em duas partes + TT↔TDB (Barycentric Dynamical Time)); e o cenário de PNT por retransmissão mars-pnt (uma constelação de retransmissão areoestacionária MARCONI) com um simulador de desempenho GSE de ponta a ponta (GSE = equipamento de apoio em terra) (geometria → balanço de ligação → observáveis → SRIF → covariância). Validado por simulação (valores de mérito de covariância / ciclo fechado); a dinâmica de Marte com o Sol como centro é verificada face ao DE440 do JPL (137 m @ arco de 1 dia, xval/anise-mars-od). A validação com dados reais de seguimento DSN/ESTRACK consta do roteiro. |
| Sistema solar e PNT em qualquer corpo | Uma efeméride de todo o sistema solar sem kernel (src/ephem.rs, src/ephem_provider.rs): todos os planetas a partir dos elementos keplerianos de Standish do JPL (Tabela 1, 1800–2050 AD; Tabelas 2a/2b, 3000 BC–3000 AD) com o erro nominal publicado de cada planeta, a Terra e a Lua separadas pela série lunar, e Fobos, Deimos, Io, Europa, Ganimedes, Calisto e Titã a partir de elementos médios do JPL e do modelo de rotação da IAU (União Astronómica Internacional); qualquer corpo relativamente a qualquer outro no ICRF (International Celestial Reference Frame). Body passa a incluir GM (parâmetro gravitacional), raios, J2 (o segundo harmónico zonal) onde publicado e o polo e o meridiano de origem da IAU para dezoito corpos. O tipo solar-system indica posições, velocidades, constantes, tempo de luz e distância de uma/duas vias entre quaisquer dois corpos (o solucionador radiométrico de tempo de luz existente, com o atraso de Shapiro solar) e uma trajetória orbital por corpo — o suficiente para desenhar um sistema solar interativo; o tipo body-pnt posiciona um orbitador ou um módulo de aterragem em torno de qualquer corpo (scenarios/mars-orbit-pnt.toml, scenarios/europa-surface-pnt.toml) com uma constelação Walker local, a maquinaria de diluição da precisão e de Gauss–Newton, e uma distância no espaço profundo desde a Terra. Validado face ao JPL Horizons (DE441, JPL Development Ephemeris 441): Mercúrio–Saturno e a Terra a partir da Tabela 1 dentro de duas vezes o erro nominal (pior 1,87×), todos os oito planetas a partir das Tabelas 2a/2b (pior 1,71×), e o tempo de luz Terra–Marte/Júpiter. Modelado: Úrano e Neptuno a partir da Tabela 1 (2,0× e 5,2× o erro indicado face ao DE441), Plutão, as luas e os resultados de navegação de body-pnt. |
| PNT fundido MEO + LEO | src/leo_fusion/: posicionamento, navegação e temporização LEO agnósticos quanto ao sistema, sobre qualquer constelação (cascas Walker, conjuntos de elementos, predefinições GNSS) e qualquer sinal (portadora, taxa de chips, envolvente de C/N0, erro de distância do sinal no espaço), com predefinições opcionais de um só ficheiro que trazem as suas fontes (Xona Pulsar X1/X5, Iridium STL, sinais de oportunidade da Starlink, CentiSpace, um sistema representativo em banda C, o modelo de efemérides de relógio zero ATOMIC). leo-pvt: posicionamento por Doppler em lote a partir da taxa de variação da distância (um e vários satélites, estados de deriva do relógio e de velocidade, geometria de passagem única ao longo/através da trajetória e a solução espelhada), mínimos quadrados ponderados conjuntos GNSS + LEO com enviesamentos entre sistemas por sistema e sigmas por sinal fornecidos pelo chamador, o DOP face ao número de satélites LEO, cobertura polar e do Ártico, e transferência de tempo LEO para UTC face ao C/N0 e ao oscilador. leo-ppp: um EKF (filtro de Kalman estendido) de PPP (posicionamento preciso de pontos) com ambiguidades reais apenas com GNSS e com LEO, o seu tempo de convergência e um teste de consistência NEES de qui-quadrado. ntn-positioning: posicionamento 5G em redes não terrestres a partir do limite de Cramér-Rao da largura de banda. Validado: a envolvente de Doppler LEO face aos valores publicados da Iridium e da Xona. Modelado: o restante, com a tendência do PPP comparada com Li et al. (2019) — ver docs/LEO-PNT-FUSION.md. |
| Integridade | RAIM (monitorização autónoma da integridade do recetor) de instantâneo e de separação de soluções (ao estilo ARAIM), com níveis de proteção horizontal/vertical (HPL/VPL), deteção e exclusão de falhas, e diagramas de integridade de Stanford; um nível de proteção de separação de soluções de múltiplas hipóteses (MHSS) com orçamento explícito de risco de integridade, incluindo o modo de falha de toda a constelação em dupla/multiconstelação (ARAIM da UE (União Europeia) / DO-316, a norma de desempenho da RTCA para equipamento GPS de bordo com aumentação baseada na aeronave), exercitado sobre um instantâneo real de GPS + Galileo (scenarios/araim-gps-galileo.toml). O nível de proteção aplica a projeção unilateral de enviesamento nominal b_k = Σ_i|s_i|·b_nom por modo de falha e o sigma de integridade σ_URA (exatidão de distância do utilizador; distinto do sigma de exatidão σ_URE, erro de distância do utilizador) da Integrity Support Message — ver docs/ARAIM_REFERENCE.md. O núcleo de deteção (os limiares de χ²/χ² não central/normal e os multiplicadores K) é validado externamente face ao SciPy em 171 casos (tests/raim_reference.rs); a geometria reutiliza o núcleo de DOP validado com o gnss_lib_py. A própria atribuição do orçamento de risco de integridade do ARAIM MHSS não tem nenhuma referência numérica independente publicada e continua, com honestidade, modelada. |
| Aumento (SBAS) | Níveis de proteção SBAS / WAAS (WAAS = o Wide Area Augmentation System) na forma de mínimos quadrados ponderados da DO-229E (fatores K de aproximação de precisão e em rota) e a combinação L1/L5 de dupla frequência sem ionosfera (L1 e L5 sendo duas bandas de sinal civil do GPS; IS-GPS-705, a especificação de interface do GPS para o sinal L5, γ₁₅ ≈ 1,793) que sustenta a DO-316 — src/sbas.rs. O algoritmo do nível de proteção é validado externamente face ao fork SBAS-PL do RTKLIB (RTKLIB = a biblioteca aberta de posicionamento cinemático em tempo real; PL = nível de proteção) (zsiki/rtklib_ws waasprotlevels(), Siki & Takács 2017, DO-229D — a revisão anterior da DO-229 — App. J) executado sobre dados EGNOS reais (European Geostationary Navigation Overlay Service), reproduzindo o seu HPL a < 2e-3 m (tests/sbas_reference.rs); o gLAB (o conjunto de ferramentas GNSS Laboratory) v6.0.0 confirmou a convenção idêntica. |
| Relógio e temporização | Holdover com filtro de Kalman de dois estados (covariância na forma de Joseph, saúde de consistência NIS/NEES — inovação normalizada ao quadrado / erro de estimação normalizado ao quadrado); estabilidade da família Allan (ADEV / MDEV / TDEV / HDEV / MTIE — desvio de Allan, de Allan modificado, de tempo e de Hadamard, e erro máximo de intervalo de tempo) com intervalos de confiança específicos de cada tipo de ruído e um ajuste completo de lei de potência de cinco coeficientes da IEEE-1139 (IEEE Std 1139, as definições de metrologia de frequência e tempo do Institute of Electrical and Electronics Engineers) — os estimadores são validados em hardware real face ao Stable32: um padrão primário real de césio 5071A face a um maser de hidrogénio (556 990 amostras de fase, 16 fatores de média, OADEV/OHDEV — desvio de Allan/Hadamard sobreposto — até 1e-3; tests/cs5071a_reference.rs) e a série de regressão canónica PHASE.DAT do Stable32 (139 fatores de média, OADEV/MDEV/TDEV até 1e-3; tests/phasedat_reference.rs); os estimadores ADEV/MDEV/TDEV e a métrica de wander de telecomunicações MTIE são ainda verificados face à biblioteca independente allantools 2024,06 até < 1e-9 na série NIST SP 1065 (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs); correções geométricas (Sagnac, vista comum GNSS); e os métodos operacionais de transferência — TWSTFT (transferência de tempo e frequência por satélite em duas vias) com a forma fechada de Sagnac do BIPM (Bureau Internacional de Pesos e Medidas), vista comum GNSS, transferência de tempo PPP (posicionamento preciso de pontos) sem ionosfera, uma ligação ótica em espaço livre com cintilação por turbulência, e uma escala de tempo de conjunto de relógios (de papel) por variância inversa abaixo do melhor relógio contribuinte. Uma calculadora de holdover de relógio sem GNSS (src/holdover.rs) expõe o crescimento em forma fechada do erro de deriva de van Loan como uma inversão de holdover até ao limiar — quanto tempo um relógio funciona livremente antes de o seu erro de temporização exceder o orçamento — em classes representativas de relógios clássicos e quânticos; modelado (verificado face à recursão de covariância de vários passos de clock_state), e honesto quanto ao facto de, para um relógio muito estável, o holdover até um limiar apertado ser determinado pelo piso de ruído de tau longo assumido, e não pelo ADEV citado. Um Nível de Proteção de Temporização condicional (src/tpl.rs) estende o holdover ao spoofing: um limite do erro de tempo não detetado, dada uma verificação cruzada independente, que compõe um piso de monitor de k sigmas, a variância de deriva de van Loan ao longo da latência de deteção e um tempo até ao alarme de CUSUM (soma cumulativa). Calibrado com um spoof real gravado (JammerTest 2024) e reproduzível através de cargo run --example tpl_jammertest; composição MODELLED (sem orçamento de risco de integridade por hora), condicional à deteção — não existe nenhum limite incondicional finito. |
| Domínio de medições GNSS | Síntese direta de pseudodistância / Doppler com ionosfera Klobuchar (difundida) e IONEX / grelha de TEC (IONosphere map EXchange format / conteúdo eletrónico total; medida) — incluindo um analisador de ficheiros IONEX, interpolação temporal entre mapas e o mapeamento de obliquidade oblíqua em casca fina —, troposfera Saastamoinen + Niell, e RAIM de instantâneo (HPL/VPL). |
| Resiliência | Jamming por balanço de ligação (J/S → C/N₀ efetivo → perda de bloqueio — razão jammer-sinal, razão portadora-densidade de ruído — com o fator de separação espetral anti-jam Q agora derivado dos espetros de potência reais do sinal e do jammer através de src/navsignal.rs — Q = 1/(R_c·κ), verificado em CI face à anterior constante representativa); um detetor estocástico de spoofing de tempo (teste de energia de Neyman–Pearson / χ²₁ com P_fa/P_md em forma fechada e por Monte Carlo e um valor de mérito (FoM) de segurança de 1 − P_md); e um detetor de spoofing de várias camadas que funde um teste de paridade de consistência RAIM (com o ponto cego de modo comum modelado com honestidade), um monitor de potência de AGC de RF (controlo automático de ganho) e um monitor de qualidade do sinal (SQM — monitorização da qualidade do sinal, adiantado-menos-atrasado); e um orçamento de erro de navegação por estima quântico-inercial (QuantumNavBudget, src/inertial/quantum_imu.rs) que compõe o passeio aleatório de velocidade de ruído branco do interferómetro de átomos frios com o enviesamento residual (verificado face ao integrador independente AccelModel) e o erro de fator de escala num valor de deriva de posição durante o holdover — o gémeo inercial do holdover do relógio. Um motor de pontuação de resiliência alinhado com um referencial (src/resilience/) mapeia o comportamento simulado de uma arquitetura em sub-pontuações por dimensão ao longo das sete categorias de resiliência próprias do Kshana (não os termos do DHS), alinhadas com o Resilient PNT Conformance Framework do Departamento de Segurança Interna dos EUA, e estuda depois a estabilidade de decisão de qualquer pontuação composta única ou nível de maturidade sob um simplex de ponderação de Dirichlet e um conjunto de cinco ameaças — instabilidade de ordenação por τ de Kendall, taxa de troca do vencedor top-1 e colapso de diversidade de modo comum (Hill-N2), com um relatório de garantia com hash de integridade (35 testes de referência independente deduzidos à mão). Reproduzível através de cargo run --example resilience_report; arquiteturas sintéticas MODELLED, uma autoavaliação alinhada com o RPCF v2.0, não uma certificação. Ver docs/RESILIENCE-CROSSWALK.md. |
| Geolocalização passiva por RF | Geolocalização de emissores por TDOA/FDOA (diferença de tempo/frequência de chegada; src/geolocation.rs) — localizar um jammer ou um spoofer (ou uma fonte oportunista para PNT inverso) a partir de hiperboloides de diferença de tempo de chegada numa rede de recetores, resolvidos por mínimos quadrados de Gauss–Newton; acrescentar a diferença de frequência de chegada com recetores em movimento recupera conjuntamente a posição e a velocidade do emissor, com o limite de Cramér–Rao sobre a covariância da posição derivado da geometria da rede. MODELLED (referências independentes de consistência interna: ida e volta direta→inversa, a identidade J·CRLB = I, monotonia do GDOP, e o estimador a atingir o seu próprio CRLB por Monte Carlo) — um modelo de linha de visada de fonte pontual, sem termos de multipercurso / NLOS (sem linha de visada), de enviesamento do relógio do recetor ou de refração. |
| Sinal de navegação e seguimento de código | O nível do sinal entre o balanço de ligação e o domínio da medição (src/navsignal.rs): densidades espetrais de potência (PSD) de área unitária para BPSK-R(n) (modulação por desvio de fase binária com chips retangulares) e sine-BOC(m,n) (portadora com desvio binário); o coeficiente de separação espetral (SSC) κ = ∫ G_s·G_i df, que deriva o Q anti-jam que o modelo de jamming usa (Q = 1/(R_c·κ)) a partir dos espetros reais do sinal/jammer em vez de uma constante representativa; a largura de banda RMS (de Gabor) (BOC > BPSK — a medida de informação de distância / Cramér–Rao); o jitter de ruído térmico do seguimento de código DLL adiantado–atrasado coerente (DLL = malha de bloqueio de atraso; Kaplan & Hegarty; ~abaixo do metro para o C/A — o código de aquisição grosseira do GPS — a 45 dB-Hz); e a envolvente do erro de multipercurso (EML coerente, adiantado-menos-atrasado — supressão por correlacionador estreito). Validado face a âncoras em forma fechada (SSC próprio de BPSK = 2/(3·R_c), PSD de área unitária, jitter do C/A abaixo do metro). Isto é análise de desempenho do sinal, não projeto de hardware de antena / carga útil de RF (o papel de um parceiro da carga útil). |
| Interoperabilidade | Ingestão de efemérides difundidas RINEX-3 multi-GNSS (GPS, Galileo, QZSS — o Quasi-Zenith Satellite System do Japão —, BeiDou MEO/IGSO — órbita terrestre média / órbita geossíncrona inclinada — através da IS-GPS-200, a especificação de interface do GPS; GLONASS, o Global Navigation Satellite System da Rússia, através de RK4 do vetor de estado em PZ-90 — o datum russo Parametry Zemli 1990) utilizável como fonte de constelação (RINEX à entrada, geometria PNT à saída); um analisador de observações RINEX-3 (pseudodistância, fase da portadora, Doppler, intensidade do sinal; espera-se que a disposição de observação 4,00 seja analisada mas não está testada, e os ficheiros de navegação RINEX 4 são recusados por nome em vez de descodificados incorretamente) que agora alimenta um solucionador de posicionamento de ponto único (SPP) (pvt) — observações de código reais à entrada, uma posição de recetor real à saída, validado com dados do IGS; um leitor/escritor de efemérides precisas SP3-c/d com interpolação de Lagrange de 9.ª ordem; e exportação CCSDS OEM 2,0 + OMM (Orbit Mean-elements Message) para ferramentas de dinâmica de voo (GMAT, Orekit, STK — Systems Tool Kit); e análise e emissão de mensagens de dados de seguimento CCSDS-TDM (503) para seguimento radiométrico do espaço profundo. |
| Análise de missão (engenharia de sistemas) | Orçamentos de projeto de missão de primeira ordem, cada um um tipo executável: geometria de lançamento e subida de dois corpos (launch-window — azimute de lançamento sin Az = cos i/cos lat, inclinação mínima, bónus da rotação da Terra, Δv de mudança de plano em dogleg, oportunidades diárias; src/launch.rs); um corredor balístico de reentrada de Allen–Eggers (reentry — desaceleração máxima, velocidade/altitude do máximo de g, velocidade do máximo de aquecimento; src/reentry.rs); geometria de cobertura de observação da Terra (eo-coverage — faixa / GSD (distância de amostragem no solo) no nadir / acesso fora do nadir / revisita através do triângulo espacial do SMAD (Space Mission Analysis and Design); src/eo_payload.rs); um orçamento de erro de atitude e de apontamento de 3 DOF (três graus de liberdade; attitude-budget — binário de gradiente gravítico no pior caso + orçamento de apontamento RSS (raiz da soma dos quadrados); src/attitude_budget.rs); previsão de passagens em estações terrestres (passes — AOS/TCA/LOS, aquisição de sinal / instante de maior aproximação / perda de sinal, elevação máxima, tempo de acesso; src/passes.rs); e um balanço de ligação de sentido único sobre a equação de ligação CCSDS 401 / DSN 810-005 (a norma de radiofrequência e modulação do CCSDS / o manual de projeto de ligações da Deep Space Network; link-budget — FSPL (perda de percurso em espaço livre), C/N₀, Eb/N₀ (razão energia por bit / densidade de ruído), margem, fecho; src/linkbudget.rs). Orçamentos analíticos de primeira ordem MODELLED — a camada pré-hardware abaixo do STK/GMAT/Basilisk, não uma substituição de 6 DoF nem radiométrica. |
| Análise de decisão e compromissos (MCDA) | Um conjunto completo de análise de decisão multicritério (MCDA) (src/mcda/) que abrange as quatro famílias de métodos — agregação de valor (WSM, WPM, WASPAS — modelo de soma ponderada, modelo de produto ponderado, avaliação agregada ponderada de soma e produto), distância ao ideal (TOPSIS, Technique for Order of Preference by Similarity to Ideal Solution), programação de compromisso (VIKOR, do sérvio para otimização multicritério e solução de compromisso) e sobreclassificação (PROMETHEE II, Preference Ranking Organization Method for Enrichment of Evaluations; ELECTRE I, do francês para eliminação e escolha que exprime a realidade), mais o MOORA de sistema de razões (Multi-Objective Optimization on the basis of Ratio Analysis) e o COPRAS proporcional (Complex Proportional Assessment) — com ponderação de prioridades por comparação par a par do AHP (Analytic Hierarchy Process) (Razão de Consistência), uma frente não dominada de Pareto, análise de sensibilidade aos pesos e pontuação de utilidade multiatributo. Os nove agregadores reproduzem as bibliotecas independentes de terceiros pymcdm (WSM / WPM / WASPAS / MOORA / TOPSIS / VIKOR / PROMETHEE II) e pyDecision (ELECTRE I, COPRAS) até < 1e-9, e o vetor de prioridades do AHP + a Razão de Consistência coincidem com a tabela de Índice Aleatório de Saaty e o solucionador próprio principal SciPy/LAPACK até < 1e-9 (tests/mcda_*_reference.rs). VALIDATED — a camada de decisão sob o motor de estudos de compromissos. |
| Ambiente espacial | Um modelo de ambiente de meteorologia espacial (space-weather, src/space_weather.rs): índices de atividade solar (F10.7 / F10.7a centrado em 81 dias — o fluxo de rádio solar de 10,7 cm) e geomagnética (Kp, o índice K planetário, com a tabela definicional Kp↔ap — sendo ap a sua amplitude planetária linear), a temperatura exosférica de Jacchia-1971 que estes determinam (validada face aos mínimos/médias/máximos solares publicados), e a densidade neutra termosférica corrigida pela atividade face à estática em altitude — a dependência da densidade face ao ciclo solar que a atmosfera estática USSA76 (US Standard Atmosphere 1976) omite. MODELLED: um acoplamento de primeira ordem calibrado da altura de escala, não uma atmosfera validada com dados (NRLMSISE — o modelo de exosfera de espetrómetro de massa e radar de dispersão incoerente do Laboratório de Investigação Naval dos EUA). |
| Avaliação por aprendizagem automática e compromisso | Uma bancada de avaliação de deteção de degradações de RF (impairment-eval, src/impairment_eval.rs): um corpus sintético etiquetado e fundamentado em parâmetros (nominal / jamming / spoofing de tempo / spoofing de posição / multipercurso), uma estrutura de ROC/AUC (característica de operação do recetor / área sob a curva) agnóstica quanto ao detetor que avalia qualquer detetor (energy | agc | sqm | parity | fused) com Pd por classe (probabilidade de deteção) a uma Pfa alvo (probabilidade de falso alarme), e a diferença de otimismo dentro e fora da distribuição (modo de mudança de distribuição). Mais um compromisso PNT quântico-versus-clássico (quantum-trade, src/quantum_trade.rs) que quantifica o benefício de holdover de temporização/inercial de um relógio candidato a partir de uma curva de ADEV medido face a uma linha de base clássica, com a ressalva do piso de τ longo transportada no artefacto e uma envolvente de resiliência sem GNSS em função do tempo. As métricas de avaliação (AUC / confusão / Pd-Pmd, sendo Pmd a probabilidade de deteção falhada) são validadas com correspondência exata face ao scikit-learn 1.9.0 — incluindo em telemetria real da ESA OPS-SAT (o conjunto de dados de deteção de anomalias OPSSAT-AD, Ruszczak et al. 2025, CC BY 4,0 — Creative Commons Attribution 4,0), onde a AUC ROC de Mann–Whitney do Kshana reproduz a roc_auc_score do scikit-learn até < 1e-9 na partição de teste reservada e um detetor transparente de contagem de picos separa as anomalias etiquetadas com AUC ≈ 0,85 (tests/opssat_ad_reference.rs) — e os núcleos numéricos do motor de compromissos (ajuste NNLS — mínimos quadrados não negativos — do ADEV, bandas de consistência de χ², Q de relógio de van Loan) face ao scipy 1.17.1; os valores do benefício dos dispositivos construídos por cima continuam a ser características operacionais MODELLED — nunca dados de campo/IQ (amostras em fase/quadratura), sem veredicto bom/mau. Com base na bancada, um estudo da diferença de otimismo mais profundo (src/impairment_study.rs, impairment_ml.rs, eval_stats.rs) avalia um painel de 13 detetores (energy/AGC/SQM/parity mais detetores de regressão logística com semente e de MLP — perceptrão multicamada — de uma camada oculta), ajusta leis de escala dentro e fora da distribuição com uma hipótese nula por permutação, e aprende um preditor leave-one-out da degradação fora da distribuição a partir de estatísticas dentro da distribuição (cargo run --example optimism_study). Um front end de recetor definido por software (src/sdr.rs — IQ/IF em bruto (frequência intermédia) → derivações adiantada/pontual/atrasada do correlacionador → SQM) e adaptadores de ingestão de dados reais (src/realdata/ — RINEX, u-blox UBX (o protocolo binário da u-blox), GnssLogger, JammerTest, Yunnan, SatGrid) permitem que os mesmos detetores corram sobre gravações fornecidas localmente (não é registado nenhum conjunto de dados). O mapa de cruzamento de resiliência quântico-versus-clássico sob incerteza de parâmetros (src/crossover.rs; cargo run --bin crossover_study) regenera os estudos de cruzamento inercial e de relógio por trás dos valores dos Resultados. |
| Demonstrador de PNT com tecnologias quânticas | Três áreas de aplicação executáveis e MODELLED por trás do motor aberto, cada uma a emitir um TradeEvidence honesto + um registo de representatividade / lacunas até ao voo (src/representativeness.rs): transferência de tempo quântica de confiança (quantum-time-transfer, src/timetransfer_chain.rs — um orçamento de ponta a ponta de relógio de rede ótica + ligação fotónica face a CSAC (relógio atómico à escala de chip) + duas vias de RF, com um nível de proteção de temporização reutilizado, um FoM de segurança contra ataques de atraso/repetição (1 − P_md), e deteção de anomalias de relógio + latência de CUSUM); navegação quântica sem GNSS (quantum-gnss-free-nav, src/quantum_nav_od.rs — uma deriva inercial de interferómetro de átomos frios face a um INS de qualidade de navegação durante uma interrupção GNSS, sendo honesto quanto ao facto de, sem solução de posição externa, o enviesamento do acelerómetro ser inobservável, pelo que o erro continua a crescer); e deteção de falhas/anomalias em sistemas quânticos (quantum-anomaly-detect, src/quantum_faults.rs — um catálogo de falhas etiquetado com uma AUC ROC com IC (intervalo de confiança) por bootstrap a partir de eval_stats, validado externamente, e uma falha mínima detetável a uma taxa de falso alarme fixa). Uma biblioteca partilhada de modelos de erro de dispositivos quânticos (src/quantum_devices.rs) e uma estrutura unificada de compromissos quântico-versus-clássico (src/qtrade.rs) sustentam-nas. Os núcleos validados em que assentam (métricas de avaliação face ao scikit-learn, núcleos de compromissos face ao scipy) são reutilizados; os valores do benefício dos dispositivos construídos por cima continuam MODELLED — parâmetros de dispositivos/ligações ilustrativos de fontes públicas, modelam a classe, sem TRL / herança de voo / certificação, sem apoio de nenhuma agência. |
| Engenharia frugal e impacto na integridade | Uma lente de ROI (retorno do investimento) por cobertura (src/frugal.rs) — custo por unidade de cobertura entregue para um compromisso de arquitetura — e um mapeamento de deteção falhada → impacto na integridade (src/integrity_impact.rs) que transforma a taxa de deteção falhada de um monitor na sua contribuição para o risco de integridade. Orçamentos de apoio à decisão MODELLED, aditivos. |
| Intercâmbio de artefactos | O Kshana Interchange Format (KIF) (src/interchange.rs) — um envelope versionado e autodescritivo que envolve o resultado de um cenário com o seu tipo, a versão do esquema e etiquetas MODELLED/VALIDATED, de modo que um artefacto guardado se mantenha autodocumentado e os envelopes mais antigos continuem legíveis com compatibilidade futura. |
Cada capacidade é acessível como uma API Rust, como um kind de cenário executável, ou ambos. A maturidade por capacidade — validada, executável ou biblioteca — é acompanhada em docs/CAPABILITY.md. Uma matriz de verificação verificada por máquina (src/verification.rs) apresenta a referência cruzada requisito → módulo → teste → referência independente → estado, com invariantes de honestidade testados por unidade que só permitem uma etiqueta validada quando uma referência independente externa a sustenta — e que registam as capacidades de hardware/PA (garantia do produto) que o Kshana deliberadamente não fornece.
Os quatro pacotes de sensores, tal como publicados inicialmente (resultados)
Resultados#
Cada cenário compara um sensor quântico com o seu equivalente clássico durante uma interrupção GNSS de ~1,8 h. Os números são reprodutíveis (scenario + seed + version).
O que os sensores quânticos trazem quando o GNSS desaparece — clock-holdover · semente 42 · desenhado no motor 0.40.0, e todos os valores acima são reverificados face ao motor atual em cada compilação por tests/published_figures_still_reproduce.rs · SVG
A vantagem depende da interrupção e da vibração, com um ponto de equilíbrio explícito onde o clássico ganha — mostrado com honestidade ao longo da escada de maturidade tecnológica (os valores de relógios óticos são alvos de demonstradores em terra; nenhum relógio ótico de estrôncio voou):
Cruzamento de resiliência quântico-versus-clássico — escada TRL do holdover do relógio (em cima) · mapa de vantagem inercial com contorno de ponto de equilíbrio (em baixo). Regenerável através de cargo run --release --bin crossover_study.
Erro de posição da navegação por estima durante uma interrupção GNSS: o sensor quântico (azul) mantém-se plano junto à especificação; o sensor clássico (vermelho) diverge para dezenas de quilómetros. Gerado pelo Kshana a partir de scenarios/imu-deadreckoning.toml.
| Pacote | Cenário | Quântico | Clássico |
|---|---|---|---|
| 1 — Holdover do relógio | clock-holdover.toml (especificação de 20 ns) |
o relógio ótico mantém-se durante toda a interrupção | o CSAC ultrapassa a especificação a meio da interrupção |
| 2 — Navegação por estima inercial | imu-deadreckoning.toml (especificação de 100 m) |
átomos frios: ~41 m, mantém-se durante toda a interrupção | qualidade de navegação: ultrapassa aos ~350 s → dezenas de km |
| 3 — Transferência de tempo (ligação ótica entre satélites) | timetransfer.toml |
ótica: medição de distância de ~0,3 mm | RF (TWSTFT): medição de distância de ~150 mm |
| 4 — Fusão híbrida (síntese final) | hybrid-pnt.toml |
posição + temporização completas durante toda a interrupção | limitado em posição a ~350 s |
A síntese final mostra a tese da fusão: a transferência de tempo ótica entre satélites mantém bloqueado até um relógio clássico, isolando o sensor inercial como o elo fraco do conjunto clássico — ou seja, inercial quântico + temporização ótica em conjunto.
Holdover do relógio durante uma interrupção GNSS: o relógio ótico (azul) permanece dentro da especificação de 20 ns durante toda a deriva; o relógio à escala de chip (vermelho) ultrapassa-a a meio. Gerado pelo Kshana a partir de scenarios/clock-holdover.toml.
Um outro cenário, orbit-gnss-challenged.toml, deriva a disponibilidade GNSS da geometria orbital em vez de janelas escritas à mão: uma nave espacial dentro da casca GNSS é propagada face a uma constelação Walker semelhante ao GPS, e o número de satélites visíveis (linha de visada, ocultação pela Terra, máscara de elevação) define o estado da solução de posição em cada passo. Ao longo de um dia o utilizador tem solução de posição apenas ~59% do tempo; o relógio quântico mantém uma solução de temporização de 5 ns em todas as interrupções (disponibilidade 1.0), o relógio à escala de chip apenas ~0.83.
Erro de temporização ao longo de um dia com a disponibilidade GNSS derivada da geometria orbital: o número de satélites visíveis (linha de visada, ocultação pela Terra, máscara de elevação) define o estado da solução de posição em cada passo, pelo que o relógio tem de percorrer sozinho cada lacuna — o relógio ótico mantém a especificação de 5 ns enquanto o relógio à escala de chip a ultrapassa. Gerado pelo Kshana a partir de scenarios/orbit-gnss-challenged.toml.
A constelação também pode ser dada como conjuntos reais de elementos de duas linhas (TLE). Um TLE completo (linha 1 + linha 2) é propagado com o modelo SGP4/SDP4 completo — incluindo a resistência atmosférica e os termos lunissolares de espaço profundo e de ressonância de 12 h / 24 h que importam para órbitas GNSS de ~12 h — validado face aos vetores oficiais AIAA 2006-6753 até um pior caso de ≈ 4 mm. scenarios/orbit-sgp4-gps.toml inclui um instantâneo real do Celestrak gps-ops da constelação GPS operacional (2021-07-28, 30 satélites) e exige somas de verificação TLE válidas — os conjuntos de elementos de duas linhas são dados abertos do catálogo da Força Espacial dos EUA / 18.º Esquadrão de Defesa Espacial, redistribuídos pelo Celestrak (Dr T. S. Kelso, celestrak.org); atualize com scripts/fetch_tles.sh. Um bloco só com a linha 2 mantém a propagação analítica de dois corpos (scenarios/orbit-real-tle.toml); as duas formas podem ser misturadas numa só constelação. Uma constelação pode igualmente ser construída a partir de um bloco de registos de efemérides difundidas GPS RINEX-3 — o formato que um recetor descodifica — propagados pelo algoritmo de utilizador da IS-GPS-200 e passados pela mesma geometria (scenarios/orbit-rinex.toml).
O que é / não é, por extenso
O que é / não é#
É: um motor determinista, com poucas dependências, que abrange toda a pilha PNT — geometria orbital, navegação inercial, fusão GNSS/INS, integridade, relógios e temporização. Executa um cenário (muitas vezes uma interrupção GNSS), faz evoluir modelos calibrados de erro de sensores através do estimador adequado e avalia o resultado face aos valores de mérito operacionais — emitindo um resultado JSON (JavaScript Object Notation) reprodutível e um gráfico SVG, a partir de uma biblioteca Rust, de uma interface de linha de comandos (CLI), de uma extensão Python, de um módulo WebAssembly no navegador, de um servidor Model Context Protocol (MCP) para agentes de IA ou de um plugin para IDE (ambiente de desenvolvimento integrado) JetBrains.
Não é: hardware de voo, um projeto de carga útil quântica, um recetor completo de sinais GNSS, um simulador de sinais de radiofrequência (RF) ou uma bancada hardware-in-the-loop, nem um produto de aviónica certificado — e não substitui o MATLAB/Simulink, o STK (Systems Tool Kit) nem o Orekit; fica ao lado deles e troca ficheiros com eles. A fidelidade do hardware quântico vem de modelos de erro publicados, não desta ferramenta. A maturidade granular de cada capacidade está documentada em docs/CAPABILITY.md.
Não é (ainda): um motor completo de física de interferometria atómica (a maioria dos sensores quânticos consome coeficientes publicados de Allan/orçamento de ruído; o acelerómetro CAI (interferómetro de átomos frios) tem uma camada de primeiros princípios — fase de Mach–Zehnder, ruído de projeção, decaimento de contraste e acoplamento de vibração, mais sistemáticos de Coriolis e de desvio de luz — mas os sistemáticos de frente de onda e a resolução da ambiguidade de franjas continuam a ser uma camada do roteiro P2 (fase 2 do roteiro, a camada de física quântica), ver ROADMAP.md e docs/QUANTUM-MODELS.md); um recetor GNSS certificado ou de hardware (resolve uma solução de posição PVT (posição, velocidade e tempo) de ponto único a partir de observações de código RINEX (Receiver Independent Exchange Format) reais — validado com dados reais do IGS (International GNSS Service) — e a sua camada IQ (kshana iq, desde 0.31.0) adquire e segue amostras em banda base gravadas ou geradas, em software, como recetor de análise: não aciona hardware de rádio nem transmite, não é um recetor certificado e não faz posicionamento por fase da portadora (RTK ou PPP)); nem um conjunto completo de projeto de missões (tem blocos de construção de Lambert / porkchop / manobra / determinação de órbita, mas é a camada de simulação de desempenho acima do GMAT (General Mission Analysis Tool)/Orekit, não uma substituição). Assumir este âmbito é deliberado. Se precisar de orçamentos de erro de interferómetro de átomos frios de primeiros princípios (por exemplo, de nível CARIOQA-PMP — Cold Atom Rubidium Interferometry in Orbit for Quantum Accelerometry, Pathfinder Mission Preparation — ou validação ao estilo do X-37B), consulte o roteiro P2 e entre em contacto para colaborar.
Navegação em órbita terrestre baixa#
Os satélites em órbita terrestre baixa (LEO) passam depressa e com sinal intenso. O tipo leo-pnt-chain acompanha um sistema por todas as fases: o sinal, a passagem e a sua ligação, a mensagem de navegação, e a solução fundida de posição, velocidade e tempo (PVT) e o posicionamento preciso de pontos (PPP). Cada fase passa os seus números à seguinte. Ver docs/LEO-PNT.md.
Todos os tipos de cenário por família#
Os tipos de cenário do motor, arquivados por famílias. Cada família tem uma página com uma entrada por tipo (a descrição e os campos do motor, um comando de exemplo, números de destaque de uma execução, as linhas da matriz de verificação que o nomeiam e o gráfico que o próprio motor escreve) e uma folha de contactos desses gráficos; docs/KINDS.md indexa-os todos. A tabela é escrita por tools/gen_readme_blocks.py e as páginas por tools/gen_kinds_index.py, e ambos falham se o motor ganhar um tipo que nenhuma família nomeie.
| Família | A que responde | Tipos de cenário | Executar um |
|---|---|---|---|
| Relógios, temporização e holdover | quanto tempo um relógio mantém a hora sem GNSS, e como um sistema de temporização se comporta face às suas máscaras | clock, sweep, sweep-nd, telecom-timing, slot-timing, timetransfer, time-transfer-budget, holdover-test, quantum-time-transfer |
kshana scenarios/clock-holdover.toml |
| Sensores inerciais, de fusão e quânticos | navegação por estima e fusão de sensores durante uma interrupção GNSS, com sensores clássicos e quânticos | inertial, hybrid, fusion, hybrid-ukf, gnss-ins, ins-trn-coast, quantum-gnss-free-nav, quantum-anomaly-detect, quantum-trade |
kshana scenarios/gnss-ins.toml |
| PNT alternativo sem GPS | navegar a partir da gravidade, do terreno e de outros campos quando o GNSS desaparece | gravity-map, terrain-nav, terrain-slam, combined-altpnt, conflict-resilience |
kshana scenarios/combined-altpnt.toml |
| Constelações, cobertura e geometria | onde estão os satélites, quem os vê e que qualidade tem a geometria, em torno da Terra, da Lua ou de Marte | orbit, ephemeris, constellation-design, solar-system, body-pnt, mars-pnt, passes |
kshana scenarios/orbit-gnss-challenged.toml |
| Medições GNSS, posicionamento e integridade | pseudodistâncias, soluções de posição, níveis de proteção e o ambiente espacial | integrity, gnss-sim, pvt, araim-reference-check, space-weather, realtime-frame-eop |
kshana scenarios/integrity-raim.toml |
| Jamming, spoofing e o espetro | como a interferência chega a um recetor e se é detetada | jamming, spoof, spoof-detect, tracking-loop, spectrum, impairment-eval |
kshana scenarios/jamming-demo.toml |
| Navegação em órbita terrestre baixa | uma passagem, uma ligação, uma mensagem de navegação e uma solução de posição fundida, fase a fase | leo-signal, leo-pass, leo-navmsg, leo-pvt, leo-ppp, ntn-positioning, leo-pnt-chain |
kshana scenarios/leo-pnt-end-to-end.toml |
| Lunar e cislunar | navegação, tempo, referenciais e geodesia na Lua | lunar-integrity, lunar-time-offset, lunar-time-budget, lunar-ascent, lunar-surface, lunar-descent, lunar-orbit-rendezvous, lunar-vlbi, lunar-vlbi-fim, lunar-joint-od-clock, lunar-frame-realisation, lunar-frame-campaign, lunar-llr-datum, moonlight-service-volume, lunar-differential-pnt, lunar-station-coverage, lunar-beacon, lunar-interop-export, cislunar-observability, cislunar-arc-recovery, lunar-attack-surface, lunar-jamming, earth-gnss-lunar, lunar-infrastructure |
kshana scenarios/lunar-infrastructure-od-consistency.toml |
| Navegação de utilizadores espaciais | sinais GNSS para naves espaciais acima, em torno e para além das órbitas GNSS | gnss-ssv |
kshana scenarios/gnss-ssv-shell.toml |
| PNT ótica | ligações óticas através da atmosfera e valores de mérito de ótica mais RF | optical-atmosphere, hybrid-optical-rf |
kshana scenarios/optical-atmosphere-network.toml |
| Análise de missão, ligações e operações espaciais | lançamento, subida, entrada, atitude, ligações, planeamento de contactos e formatos de ficheiro | launch-window, ascent-losses, reentry, entry-heating, eo-coverage, eo-radiometry, attitude-budget, aocs, link-budget, acm-link, contact-schedule, aperture-duty-cycle, space-packet, oem-interop |
kshana scenarios/launch-window.toml |
| Cadeias da missão | o orçamento de erro de navegação e temporização de uma cadeia de fases do lançamento à reentrada | mission-thread |
kshana scenarios/mission-thread-artemis-class.toml |
| Campanhas | missões encadeadas, varreduras e conjuntos construídos a partir dos outros tipos | campaign |
kshana scenarios/campaign-jam-spoof-holdover-integrity.toml |
Todos os comandos#
kshana <scenario.toml> executa um cenário; todo outro comando é um subcomando, e kshana --help imprime o uso de todos eles. Os comandos são --study, --validate, kinds, example, receiver-trust (com live e evidence), evidence (keygen, verify, attach-timestamp, round-trip), jammertest (import, score), trust-telemetry, imu-fit, nmea-scenario, interference-map (adsb, ais, daily, sensitivity, fetch-land), route-exposure, bench (spec, truth, cases, score, baseline, seal, reveal-check, manifest, verify-manifest, validate, leaderboard), bench-export, compliance-report, lunanet-afs-check, standards-pack, partner (check), osnma, iq (scene, acquire, track, sweep, labfit, campaign, conditions, frontend, monitor, inventory, info, extract, convert, decimate), sky e skyline. docs/COMMANDS.md dá a finalidade de cada um, um exemplo verificado e a sua página de documentação.
Todas as superfícies#
Um só motor, os mesmos resultados em todo o lado: a linha de comandos, a biblioteca Rust, Python, JavaScript e WebAssembly, o servidor MCP com os seus comandos de plugin e competências, o Kshana Studio (todas as páginas correm no navegador, sem instalação, nada é carregado), as integrações com ROS 2, Signal K, OpenCPN, GNSS-SDR e gnss_lib_py, os kits de implementação systemd, Docker e Grafana, e o plugin JetBrains. docs/ALL-SURFACES.md lista-os com a forma de obter cada um e os nomes de todos os comandos de plugin, competências e páginas do Studio; docs/SURFACES.md diz, para cada comando e tipo, que superfície o inclui e quais não, com o motivo.
Como funciona uma execução#
Um cenário é um ficheiro TOML (Tom's Obvious, Minimal Language): um tipo, uma semente e os parâmetros. O motor executa-o e escreve ao lado o resultado, um gráfico e um relatório, e as exportações que se pedirem.
Este cenário incluído dura 2 h: 10 min de GNSS, depois cerca de 1,8 h com o GNSS negado. Pergunta quanto tempo um relógio ótico de rede de estrôncio e um relógio atómico à escala de chip (CSAC) mantêm cada um a hora dentro de 20 ns.
kshana example clock-holdover > clock-holdover.toml
kshana clock-holdover.toml
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote clock-holdover.result.json, clock-holdover.chart.svg, clock-holdover.report.html, and clock-holdover.report.json
O relógio ótico mantém o orçamento de 20 ns durante toda a interrupção de 6600 s; o CSAC mantém-no durante 2610 s, e está dentro do orçamento durante 95,6% da execução, face a 100% para o relógio ótico. kshana example lista todos os cenários incluídos.
Missões#
Dez setores fazem dez perguntas diferentes ao mesmo motor. Cada um tem cenários incluídos como ponto de partida.
| Setor | Comece por |
|---|---|
| Defesa e segurança | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espaço, órbita terrestre | orbit-gnss-challenged, leo-pnt-end-to-end |
| Lua, Marte e espaço profundo | lunar-relay-constellation, mars-orbit-pnt |
| Aviação e drones | small-uas-jammed-nav, araim-gps-galileo |
| Marítimo | maritime-strait-jamming, maritime-port-approach-coast |
| Estrada | automotive-urban-canyon |
| Ferrovia | rail-tunnel-coast |
| Infraestruturas críticas e temporização | clock-holdover, clock-ensemble |
| Telecomunicações e 5G (a quinta geração de redes móveis) | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Ciência e investigação | sweep-clock-stability, quantum-pnt-demonstrator.suite |
A pergunta que cada setor faz
| Setor | A pergunta que faz | Comece por |
|---|---|---|
| Defesa e segurança | Durante quanto tempo a nossa navegação e temporização se mantêm fiáveis sob jamming e spoofing, e que camadas nos mantêm dentro da especificação? | campaign-jam-spoof-holdover-integrity, spoof-meaconing |
| Espaço: órbita terrestre | A minha nave espacial vê satélites de navegação suficientes, durante quanto tempo o seu relógio mantém a hora entre soluções de posição, e o que acrescentaria uma camada de navegação em órbita baixa? | orbit-gnss-challenged, leo-pnt-end-to-end |
| Lunar e espaço profundo | Um módulo de aterragem, um rover ou um orbitador na Lua, em Marte ou mais longe terá uma posição e uma hora de confiança? | lunar-relay-constellation, mars-orbit-pnt |
| Aviação e drones | Depois de um jammer retirar o GNSS, durante quanto tempo o meu sistema de aeronave não tripulada (UAS) se mantém dentro do orçamento de posição, e há integridade disponível no meu percurso? | small-uas-jammed-nav, araim-gps-galileo |
| Marítimo | Até onde, sobre a água, chega um jammer, seria detetado um desvio de posição, e durante quanto tempo pode um navio avançar por estima até ao porto? | maritime-strait-jamming, maritime-spoof-position-push, maritime-port-approach-coast |
| Estrada e automóvel | Quanto se desvia um automóvel debaixo de um viaduto ou ao passar por um jammer à beira da estrada? | automotive-urban-canyon |
| Ferrovia | Quantos segundos dentro de um túnel consegue ainda um comboio dizer em que via está? | rail-tunnel-coast |
| Infraestruturas críticas e temporização | Se a hora GNSS for perdida ou falsificada, durante quanto tempo mantêm uma rede elétrica, uma plataforma de negociação ou um centro de dados uma hora rastreável? | clock-holdover, clock-ensemble |
| Telecomunicações e 5G | Se a referência de tempo GNSS se perder, o relógio da minha rede mantém-se dentro das máscaras da ITU-T, e durante quanto tempo? | telecom-prtc-holdover-24h, leo-vertical-5g-network-timing |
| Ciência e investigação | Posso reproduzir, estender e citar um resultado PNT, até à semente? | sweep-clock-stability, quantum-pnt-demonstrator.suite |
Evidências#
176 de 401 capacidades validadas face a referências independentes externas; 221 etiquetadas com honestidade como modeladas. Cada linha da matriz de verificação nomeia uma capacidade, a referência independente com a qual ela é verificada, o teste que executa a verificação e a etiqueta que resulta. A integração contínua (CI) torna impossível chamar uma capacidade de VALIDATED sem uma referência independente externa.
| Etiqueta | Linhas | Significado |
|---|---|---|
| VALIDATED | 176 | uma referência independente externa concorda: dados reais, uma implementação independente ou vetores de referência publicados |
| MODELLED | 221 | verificado face a verdade analítica ou autoconsistência da simulação, e dito em voz alta |
| PARTNER | 4 | propriedade de um parceiro de hardware; o Kshana não tem nenhuma referência independente para ela |
Algumas das verificações: todos os 666 vetores SGP4 (Simplified General Perturbations 4) do AIAA (American Institute of Aeronautics and Astronautics) 2006-6753 até 4,12 mm; o modelo de forças de Cowell até 0,08 m face ao Orekit 12,2; o Galileo até 0,61 m e o Swarm-A até 0,10 m face a efemérides precisas reais da Agência Espacial Europeia (ESA). Os testes mantêm cerca de 95 % de cobertura de linhas de src/, com um mínimo de 85 % exigido na CI. O registo é docs/VERIFICATION-MATRIX.md, gerado a partir de src/verification.rs: a matriz completa de 401 linhas, e por que cada linha modelada não tem referência independente externa em docs/MODELLED-RATIONALE.md.
Como funciona a validação, a tabela curada de destaques e os valores de evidência
Validação, reprodutibilidade e honestidade#
- Cada termo de ruído é calibrado para um valor publicado e citado e validado face à relação padrão (desvio de Allan para relógios; crescimento do erro de navegação por estima de Groves para inercial; a conversão temporização→distância para transferência de tempo). O estado por termo é acompanhado em
docs/VALIDATION.mdcomovalidatedounot modeled— nada é apresentado como validado sem o ser. - Reprodutível por construção:
scenario + seed + engine version → identical bits.scripts/check-reproducible.shimpõe-o; as execuções quânticas e clássicas usam sementes independentes, pelo que o seu ruído não é correlacionado. - A maturidade é indicada com honestidade: os valores de relógios óticos e de ligações óticas são resultados de alvos / demonstradores em terra, não de voo.
A etiqueta de evidência em cada figura#
Cada figura e tabela que uma execução escreve diz até que ponto confiar nela e em quais linhas do registo ela assenta. O JSON de resultado tem uma chave evidence, o SVG do gráfico tem uma linha sob o gráfico (e um elemento <metadata id="kshana-evidence">), e a tabela CSV tem linhas de comentário # evidence: no início (lidas com comment='#'). Ele nomeia um nível, VALIDATED, MODELLED ou PARTNER, e os ids (VM- e oito dígitos hexadecimais) das linhas da matriz de verificação que a execução exercitou. O nível é o mais fraco dessas linhas, de modo que uma execução que assenta numa linha modelada é etiquetada MODELLED por mais linhas validadas que haja ao lado; a etiqueta nunca pode afirmar mais do que o registo. Linhas, estados e ids são lidos da matriz, não escritos à mão (docs/VERIFICATION-MATRIX.md, docs/SCHEMA.md), e tests/evidence_labels_doc_sync.rs falha se uma figura não tem etiqueta ou se uma etiqueta discorda da matriz.
A validação num relance#
Cada linha é imposta por um teste nomeado na CI. Esta tabela é um destaque selecionado; a matriz completa, verificada por máquina, tem 401 linhas — 176 VALIDATED, 221 MODELLED, 4 PARTNER (src/verification.rs), com as evidências completas (e o que honestamente ainda não é validado) em docs/VALIDATION.md e o artefacto kshana-validation-summary.html de cada versão (gerado por cargo run --bin validation_report, atestado pelo SLSA — Supply-chain Levels for Software Artifacts).
A coluna Estado indica o tipo de evidência, em linha com a escada de validação acima: VALIDATED = verificado face a uma referência independente externa (dados reais, uma biblioteca independente ou vetores de referência publicados); MODELLED = verificado face a verdade analítica ou autoconsistência da simulação (sem conjunto de dados externo independente). VALIDATED descreve o método de verificação, não um resultado de passa/falha — uma falha honesta face a uma referência independente externa real continua VALIDATED, enquanto uma comparação que nenhuma linha da matriz nomeia como referência independente (o ajuste do LRO — Lunar Reconnaissance Orbiter — acima) é apresentada como MODELLED. As linhas CI são salvaguardas de processo, não valores de mérito. Algumas ilhas de dados reais (o relógio de césio medido, o PHASE.DAT do Stable32 e as verificações OPS-SAT/ICGEM em que as entradas em bruto não têm licença de redistribuição) são condicionadas por dados: o teste imprime um aviso de salto e permanece verde quando a entrada está ausente, e os números de referência públicos estão registados em tests/fixtures/. Reproduza as entradas em bruto com o scripts/fetch_*.sh correspondente.
| Estado | Capacidade | Concordância | Referência / referência independente |
|---|---|---|---|
| VALIDATED | Propagação SGP4/SDP4 | 666/666 vetores, pior 4,12 mm | AIAA 2006-6753 (Vallado tcppver.out) + comparação direta com a crate independente sgp4 |
| VALIDATED | Referenciais — nutação IAU 2000A/B, cadeia CIO IAU 2006/2000A, ERA | bit a bit (X,Y até 1e-14, s até 1e-18, ERA até 1e-12) | ERFA/SOFA eraXys06a · eraC2ixys · eraEra00 · eraNut00a/b |
| MODELLED | GCRS→ITRS face a um motor SPICE independente | máx. 0.028″ → ≤ 0,86 m no solo, ≤ 3,6 m em órbita GNSS | ANISE (NAIF/SPICE em Rust puro), mesmos EOP finals2000A do IERS, 8 épocas 2020–2023 (comparado com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é etiquetado VALIDATED) |
| MODELLED | Geopotencial EGM2008 (grau/ordem 70) | aceleração = ∇V até < 1e-6; colapso zonal para o J2 validado | Coeficientes EGM2008 da NGA + identidade analítica de ∇V |
| VALIDATED | Síntese do funcional gravítico (mapa de navegação auxiliada pela gravidade / sem GNSS) | Somigliana do GRS80 + γ_e/γ_p até 3.5e-12; mapa de perturbação real do EGM2008 fisicamente plausível (RMS ≈ 26 mGal, g/o 70) | Gravidade normal de Somigliana do GRS80 (Moritz 1980, IAG — International Association of Geodesy) + EGM2008 real do ICGEM (tests/icgem_gravity_reference.rs) |
| VALIDATED | Estimadores de Allan (ADEV/MDEV/TDEV/HDEV) + bandas de confiança | reproduzem os desvios de referência; as bandas de χ² coincidem | NIST SP 1065 (Riley), Tabela 31/32 de 1000 pontos |
| VALIDATED | Estimadores de Allan num relógio de césio real medido | OADEV/OHDEV até 1e-3 (observado ≤ 3e-5), 16 fatores de média | Stable32 num 5071A Cs real face a maser de H, 556 990 pts (tests/cs5071a_reference.rs, condicionado por dados) |
| VALIDATED | Estimadores de Allan no PHASE.DAT canónico do Stable32 | OADEV/MDEV/TDEV até 1e-3 (observado ≤ 5e-5), 139 fatores de média | Desvios de referência do Stable32 para PHASE.DAT (tests/phasedat_reference.rs, condicionado por dados) |
| MODELLED | Modelo de erro de IMU — ARW / VRW / instabilidade de enviesamento | recuperado até < 5 % (instabilidade de enviesamento < 15 %) | Folha de dados da Analog Devices ADIS16465; perfil de referência NaveGo |
| VALIDATED | Propagador numérico de Cowell + modelo de forças (níveis conservativos) | pior erro de posição 0,08 m ao longo de 24 h, 278 épocas (LEO + GTO) | Orekit 12,2 NumericalPropagator/DormandPrince853 (CS GROUP), tests/numerical_cowell_propagator_reference.rs |
| MODELLED | Nível de resistência de Cowell + entradas absolutas de efemérides do Sol/Lua e de densidade | nível de resistência caracterizado ≈ 333 m / 24 h; o não perturbado coincide com o Kepler em variáveis universais abaixo do metro, energia/momento ~1e-9 | efeméride integrada de baixa precisão + Kepler analítico |
| MODELLED | Lambert · Tsiolkovsky · porkchop | ida e volta face à verdade de referência de dois corpos; ΔV < 0.01 % | Izzo 2015 · equação do foguetão · piso analítico de Hohmann |
| MODELLED | Determinação de órbita (lote de Gauss–Newton) | abaixo do m / mm·s⁻¹ sem ruído; ~2 m com um piso de ruído de 5 m | dois corpos + J2 sobre um arco RK4 |
| MODELLED | Ajuste do modelo de forças face às efemérides precisas do Galileo (arco completo) | 0,61 m RMS 3-D, 24 h, g/o-70, apenas forças | Órbita final ESA0MGNFIN da ESA/ESOC (E11), EOP finals2000A reais (comparado com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é etiquetado VALIDATED) |
| MODELLED | Ajuste do modelo de forças face às efemérides precisas do Swarm-A (dinâmica reduzida) | 0,10 m RMS 3-D (limite do nível empírico, não uma medida) | Órbita precisa SW_OPER_SP3ACOM_2_ da ESA (comparada com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é etiquetada VALIDATED) |
| MODELLED | Ajuste do modelo de forças face ao LRO lunar (falha honesta) | 6,67 m de dinâmica reduzida, acima do alvo de 5 m | JPL Horizons LRO (NAIF −85) + GRAIL (Gravity Recovery and Interior Laboratory) GRGM660PRIM (comparado com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é etiquetado VALIDATED) |
| MODELLED | OD de Marte no espaço profundo (SRIF de dinâmica reduzida) | ≈ 0,2 m LMO de Marte (FoM de simulação, não de missão real) | OD sintética em ciclo fechado — validação da maquinaria do estimador |
| MODELLED | Dinâmica de Marte com o Sol como centro face ao DE440 do JPL | 137 m @ arco de 1 dia (cresce com o arco = n-corpos não modelado) | DE440 do JPL através do ANISE (xval/anise-mars-od, condicionado por kernel) (comparado com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é etiquetado VALIDATED) |
| VALIDATED | Posicionamento de ponto único face a uma coordenada IGS levantada (observações reais) | 5,7 m RMS 3-D / 1,1 m horizontal, SPP por código de dupla frequência sem ionosfera | Levantamento da estação IGS ABMF + efemérides difundidas GPS, 2018-05-13 (tests/pvt_abmf.rs) |
| MODELLED | UKF GNSS/INS de acoplamento forte | 0,77 m RMS numa passagem LEO de 30 min incl. uma interrupção de 120 s | deriva com modelo de forças, deduzida à mão |
| MODELLED | Navegação por mapa gravítico sem GPS | deriva INS de ~70 km → ~145 m recuperados | Objetivo Quantum Wayfarer do ESA NAVISP |
| MODELLED | Navegação referenciada ao terreno (TERCOM/SITAN) | Deriva de 70 km → < 500 m (limite inferior da resolução da grelha ~140 m) | DEM SRTM .hgt; deriva injetada manualmente (verificação não circular) |
| MODELLED | Campo principal IGRF-14 (grau/ordem 13) | polo ~80,7°N, dipolo ~29,7 µT, banda física de 22–67 µT | IAGA (International Association of Geomagnetism and Aeronomy) igrf14coeffs.txt (semi-normalizado de Schmidt) |
| MODELLED | Modulação do sinal de navegação e seguimento do código | SSC próprio de BPSK = 2/(3·R_c); PSDs de área unitária; jitter do DLL C/A submétrico @ 45 dB-Hz | Âncoras SSC/PSD em forma fechada + fórmula do ruído térmico do DLL de Kaplan & Hegarty |
| MODELLED | Corretor diferencial de halo/NRHO no CR3BP | STM = diferenças finitas; a órbita fecha-se com precisão de máquina; NRHO L2 9:2 ≈ 6,57 d / perilúnio ≈ 3 250 km | verificação da STM por diferenças finitas + NRHO L2 meridional 9:2 publicada (≈ 6,56 d / ≈ 3 370 km) — CR3BP, não são efemérides reais do Gateway |
| MODELLED | Integridade ARAIM de dupla constelação | modo de falha de toda a constelação em GPS + Galileo reais | EU ARAIM TR (relatório técnico) / DO-316; Celestrak gps-ops 2021-07-28 (comparado com esta referência; nenhuma linha da matriz de verificação a nomeia como referência independente externa, pelo que não é rotulada VALIDATED) |
| VALIDATED | Geometria GNSS / DOP (GDOP/PDOP/HDOP/VDOP/TDOP) | coincidência a 1e-6 relativo em 8 geometrias (bem condicionadas → quase singulares) | gnss_lib_py 1.0.4 (Stanford NAV Lab) — biblioteca independente (tests/dop_reference.rs) |
| VALIDATED | Métricas de avaliação de detetores de ML (AUC/ROC/confusão/Pd-Pmd/precisão/F1) | contagens exatas + < 1e-9 em 5 conjuntos de dados × 24 limiares | scikit-learn 1.9.0 (Pedregosa et al., JMLR — Journal of Machine Learning Research — 2011) — biblioteca independente (tests/eval_metrics_reference.rs) |
| VALIDATED | AUC da ROC de deteção de anomalias em telemetria real do ESA OPS-SAT | A AUC reproduz o scikit-learn a < 1e-9; AUC do detetor de contagem de picos ≈ 0.85 na partição de teste rotulada | scikit-learn roc_auc_score na partição de teste do OPSSAT-AD (Ruszczak et al. 2025, CC BY 4,0) — telemetria real do OPS-SAT (tests/opssat_ad_reference.rs) |
| VALIDATED | Núcleos numéricos do quantum-trade (ajuste NNLS da ADEV · bandas de consistência χ² · Q do relógio de van Loan) | NNLS + Q exatos; χ² < 5e-4 com graus de liberdade operacionais ≥ 48 | scipy 1.17.1 — optimize.nnls / stats.chi2.ppf / linalg.expm (tests/scipy_reference.rs) |
| VALIDATED | Métricas de wander de telecomunicações MTIE / MDEV / TDEV (ITU-T G.810/G.823/G.8261/G.811 — recomendações do Setor de Normalização das Telecomunicações da União Internacional das Telecomunicações) | MTIE (9 fatores de média, coincidência bit a bit) e MDEV + TDEV (8 fatores, < 1e-9 relativo) na série LCG (gerador congruencial linear) do NIST SP 1065 | allantools 2024,06 mtie / mdev / tdev — biblioteca independente (tests/mtie_reference.rs, tests/mdev_tdev_reference.rs) |
| VALIDATED | Métodos de estudo de compromissos MCDA — as quatro famílias de decisão, nove agregadores validados externamente (WSM · WPM · WASPAS · MOORA · COPRAS · TOPSIS · VIKOR · PROMETHEE II · ELECTRE I) mais a ponderação de prioridades por comparação par a par AHP | pontuações / classificações / matrizes de concordância reproduzidas a < 1e-9 | pymcdm + pyDecision (bibliotecas MCDA independentes de terceiros) + RI de Saaty (Random Index) / eig do SciPy-LAPACK (tests/mcda_*_reference.rs) |
| VALIDATED | Envolvente de Doppler em LEO a partir da órbita e da portadora | Máximo do Iridium a menos de 5 % do valor publicado de ±36 kHz; Xona Pulsar X1 dentro dos 32–34 kHz publicados | Resultados de teste de PNT em LEO do RNTF; Leclère, Marathe & Reid, arXiv:2509,19551 (tests/leo_doppler_reference.rs) |
| MODELLED | Convergência do PPP com aumentação por LEO | 7,4 → 4,8 / 3,2 / 2,7 / 2,3 min com 60 / 96 / 192 / 288 satélites LEO, monótono; NEES do filtro dentro da banda χ² | tendência comparada com Li et al., J. Geod. 93:749 (2019) (9,6 → 7,0 / 3,2 / 2,1 / 1,3 min); constelações e ruído não reproduzidos |
| MODELLED | Nível de Proteção de Temporização Condicional (erro de tempo não detetado, limitado pelo holdover, sob spoofing) | a composição reproduz a recursão de covariância de vários passos de clock_state; calibrada num spoof real gravado |
escalares do JammerTest 2024 (Zenodo 15911589) + formas fechadas de van Loan / CUSUM (examples/tpl_jammertest) |
| MODELLED | Pontuação de resiliência de PNT + instabilidade da decisão | 35 testes com referência independente derivada à mão; artefacto de estudo determinista ao byte (semente fixa) | Mapeamento DHS RPCF v2.0 + formas fechadas de Dirichlet / Kendall-τ / Hill-N2 — arquiteturas sintéticas, não é uma certificação |
| MODELLED | Estudo da lacuna de otimismo por degradações de RF (leis de escala + preditor leave-one-out) | significância por hipótese nula de permutação; artefacto determinista ao byte (5 sementes) | corpus sintético fundamentado em parâmetros — as métricas de avaliação são VALIDATED face ao scikit-learn (acima); o estudo é MODELLED |
| CI | Reprodutibilidade entre plataformas | entrada idêntica bit a bit + valores de referência de forma em 3 SO (sistemas operativos) | Matriz de CI Linux / macOS / Windows, valores de referência SHA-256 |
| CI | Cobertura de testes | ~95 % das linhas em src/ excluindo src/*_data.rs e src/main.rs, com limiar de bloqueio ≥ 85 % |
cargo-tarpaulin (motor LLVM) |
Como uma capacidade obtém o seu rótulo — o invariante imposto pela CI: sem referência independente externa ⇒ não pode ser Validada · SVG
Em cima: cada linha Validada é suportada por um conjunto de dados externo, por construção. Em baixo: o SGP4 coincide com a referência oficial em todos os regimes (pior caso 4,12 mm). SVG · SVG
176 validadas · 221 modeladas · 4 de parceiros — SVG
Domínios de capacidade#
Todas as capacidades do mapa público, por domínio, com o respetivo rótulo no registo. A tabela de domínios é escrita por tools/gen_readme_blocks.py a partir de web/capabilities.json, o mesmo ficheiro que o mapa de tudo do Studio lê.
A tabela completa, domínio a domínio, com todas as capacidades e o respetivo rótulo, está em docs/CAPABILITY-DOMAINS.md.
Instalar#
Uma linha instala a ferramenta de linha de comandos: cargo install kshana. Todos os canais distribuem a v0.40.0 a partir do mesmo commit etiquetado.
| Canal | Instalar | Guia |
|---|---|---|
| Experimentar no navegador | abrir https://kshana.dev | Guia do Studio |
| Linha de comandos (Rust) | cargo install kshana |
Utilização da linha de comandos |
| Biblioteca Rust | cargo add kshana |
Referência da API em docs.rs |
| Python | pip install kshana |
Guia da API Python |
| JavaScript e WebAssembly | npm install kshana |
Guia do npm e do WebAssembly |
| Assistente de IA (servidor MCP, cargo) | cargo install kshana-mcp |
Guia do servidor MCP |
| Imagem Docker | docker run --rm -i ghcr.io/ashfordeou/kshana-mcp |
Guia do servidor MCP: Docker |
| Cursor (um clique) | Adicionar ao Cursor (npx) · Adicionar ao Cursor (Docker) · npx -y kshana-mcp@0.40.0 |
Todos os excertos de instalação do MCP |
| VS Code (um clique) | Instalar no VS Code (npx) · Instalar no VS Code (Docker) · npx -y kshana-mcp@0.40.0 |
Todos os excertos de instalação do MCP |
| npx | npx -y kshana-mcp@0.40.0 |
Todos os excertos de instalação do MCP |
| uvx / pipx | uvx kshana-mcp==0.40.0 |
Todos os excertos de instalação do MCP |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
Todos os excertos de instalação do MCP |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket && scoop install kshana-mcp |
Todos os excertos de instalação do MCP |
| winget | winget install AshfordeOU.KshanaMcp |
Todos os excertos de instalação do MCP |
| Binário pré-compilado | descarregar kshana-mcp-<target> da versão publicada e verificá-lo com o SHA256SUMS | Todos os excertos de instalação do MCP |
| Registo oficial do MCP | pesquisar io.github.ashfordeOU/kshana-mcp | Todos os excertos de instalação do MCP |
| Remoto (HTTP em fluxo contínuo), alojado pelo próprio utilizador | kshana-mcp --http 127.0.0.1:8080 |
Guia de alojamento próprio |
| Plugin para IDE JetBrains | Definições → Plugins → Marketplace → pesquisar "Kshana" (ID do plugin dev.kshana.ide) | Guia do plugin |
| Extensão para o Signal K | npm install signalk-kshana-trust |
Guia da extensão para o Signal K |
| Extensão para o OpenCPN | descarregar o tarball do plugin da versão publicada | Submissão ao catálogo do OpenCPN |
| Painel do Grafana | importar kshana-grafana-*.json da versão publicada | Código-fonte do painel |
| Imagem de compilação de referência | docker pull ghcr.io/ashfordeou/kshana-reference-build |
Integrações marítimas |
Kshana no JetBrains Marketplace Compila com Rust 1,88 ou posterior, a rust-version em Cargo.toml
MCP é o Model Context Protocol. Fixe uma versão com cargo install kshana --version 0.40.0, pip install kshana==0.40.0 ou npm install kshana@0.40.0. Para compilar a partir do código-fonte, consulte Instalar e compilar em Referência.
Executar um cenário a partir de Python e de WebAssembly
import json, kshana
toml = open("clock-holdover.toml").read()
result = json.loads(kshana.run(toml))
print(kshana.version(), result["quantum"]["fom"]["holdover_s"], result["classical"]["fom"]["holdover_s"])
# 0.40.0 6600.0 2610.0
Para além de run, o módulo expõe run_full (JSON, SVG e o resumo de uma linha em simultâneo), run_typed, validate_toml, list_kinds / scenario_kinds e error_kind; consulte docs/PYTHON_API.md.
O pacote npm é o motor completo compilado para WebAssembly. No Node.js, entregue o binário a initSync; num navegador, await init() obtém-no (consulte README.npm.md).
import { readFileSync } from "node:fs";
import { createRequire } from "node:module";
import { initSync, run, summary, version } from "kshana";
const wasm = createRequire(import.meta.url).resolve("kshana/kshana_bg.wasm");
initSync({ module: readFileSync(wasm) });
const toml = readFileSync("clock-holdover.toml", "utf8");
const result = JSON.parse(run(toml));
console.log(version(), result.quantum.fom.holdover_s, result.classical.fom.holdover_s);
// 0.40.0 6600 2610
console.log(summary(toml));
Arquitetura#
Um motor aberto está no centro e todas as superfícies o executam: a linha de comandos, a biblioteca Rust, o Python, o WebAssembly e o Kshana Studio, o servidor MCP, a imagem Docker e o plugin JetBrains. O mesmo ficheiro de cenário produz os mesmos bytes em cada uma. O Kshana Pro assenta por cima como uma sobreposição separada que depende do motor e nunca o bifurca.
No interior do motor: as camadas de domínio e o registo de verificação
Um motor, muitos pontos de entrada. Um único núcleo em Rust (kshana) executa cada cenário, acessível através de uma CLI, de uma extensão Python, de um módulo WebAssembly no navegador, de um servidor MCP para agentes de IA e de um plugin para IDE JetBrains — todos convergindo num único despacho api::run_toml. No interior, os pacotes de sensores ligam-se a uma interface comum de modelos de erro; a par deles encontram-se uma camada de referenciais (precessão–nutação IAU 2006/2000A e a redução GCRS↔ITRS baseada no CIO), uma camada de astrodinâmica/numérica (SGP4/SDP4 analítico e um propagador numérico de Cowell com o respetivo modelo de forças EGM2008/perturbações, conceção de manobras e determinação de órbita), uma camada de integridade/GNSS (RAIM/ARAIM, SBAS, o domínio das medições, jamming, cislunar), uma camada de fusão / PNT alternativo (os estimadores GNSS/INS e os correlacionadores de mapas de gravidade/terreno/magnéticos), uma camada de espaço profundo e lunar (PNT radiométrico em Marte e o conjunto de PNT lunar, com o nível de evidência de cada parte na matriz — tempo LTC, VLBI, OD+relógio conjuntos, realização de referencial, volume de serviço, PNT diferencial, interoperabilidade), uma camada de análise de missão (balanços de ligação de lançamento / reentrada / cobertura / apontamento / passagem e o ambiente de meteorologia espacial) e a camada aberta de estudos de resiliência e aprendizagem automática (pontuação de resiliência RPCF, a lacuna de otimismo por degradações de RF e o demonstrador de PNT quântico) cujos artefactos reprodutíveis assentam em núcleos validados.
Dois crates autónomos, excluídos do workspace, situam-se junto ao núcleo — mcp/kshana-mcp (o servidor MCP, construído sobre o SDK rmcp da edição 2024) e xval/anise-frames (a verificação cruzada de referenciais ANISE/SPICE, que traz dependências MPL-2.0 (Mozilla Public License 2,0)) — mantidos fora do grafo de dependências do crate publicado, de Cargo.lock, da barreira de licenças e da compilação MSRV (versão mínima suportada do Rust) pela lista exclude do Cargo.toml da raiz. O plugin JetBrains (ide/jetbrains) é um projeto Kotlin separado. Consulte docs/ARCHITECTURE.md para o conjunto completo de diagramas.
Os diagramas renderizados (fluxo do motor, mapa de módulos, distribuição) encontram-se em docs/ARCHITECTURE.md.
Diagramas#
Os diagramas são fontes Mermaid em docs/diagrams/, renderizados em SVG e PNG para docs/assets/diagrams/ (tools/render-diagram-chromium.sh <name> em Linux, os outros dois scripts render-diagram nos restantes sistemas), e um registo associa cada PNG ao SVG exato de que veio. Os testes fixam as contagens que indicam. Os gráficos das secções anteriores são desenhados por ferramentas a partir de execuções do motor; estes mostram como as peças se encaixam.

Um despacho, um motor, resultados reprodutíveis · SVG · fonte system-overview.mmd

Todas as superfícies, a partir do mesmo motor · SVG · fonte surfaces.mmd

O ciclo interno de uma execução · SVG · fonte engine-flow.mmd

De um registo do recetor a uma pontuação de confiança e ao que a usa · SVG · fonte trust-flow.mmd

Do cenário ao pacote assinado; o Kshana nunca produz nem reproduz um sinal · SVG · fonte lab-round-trip.mmd

Como o Studio é executado, localmente · SVG · fonte studio-flow.mmd

Fluxo de teste e de publicação, das barreiras locais a uma publicação verificada e ao caminho apenas do site · SVG · fonte release-flow.mmd · docs/RELEASING.md

Onde vive o código · SVG · fonte module-map.mmd

O que é distribuído e onde, e o que o verifica · SVG · fonte distribution.mmd
Assistente de IA#
kshana-mcp é um servidor MCP: o seu assistente executa o motor verdadeiro e lê de volta o respetivo JSON, em vez de adivinhar a matemática. Cada uma das suas 49 ferramentas é um invólucro fino sobre uma função pública da biblioteca kshana, pelo que nenhuma lógica de simulação reside no servidor.
Instalar o servidor MCP#
Consultivo, não um equipamento de navegação homologado: o operador continua a ser responsável pela navegação. O servidor é executado no seu computador; nada é enviado à Ashforde OÜ.
Uma passagem que nomeia clientes de IA de terceiros foi omitida aqui; encontra-se no README.md no GitHub.
| Canal | Comando ou botão | Requer | Forma fixada |
|---|---|---|---|
| Cursor (um clique) | npx (Node) · Docker | Node, ou Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| VS Code (um clique) | npx (Node) · Docker · Insiders (npx) | Node, ou Docker | kshana-mcp@0.40.0 / ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| npx | npx -y kshana-mcp@0.40.0 |
Node 18+ | kshana-mcp@0.40.0 |
| uvx / pipx | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
Python 3,9+ com uv ou pipx | kshana-mcp==0.40.0 |
| Docker | docker run -i --rm ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
Docker | ghcr.io/ashfordeou/kshana-mcp:0.40.0 |
| Homebrew | brew install ashfordeOU/tap/kshana-mcp |
brew | fórmula para v0.40.0 |
| Scoop | scoop bucket add ashforde https://github.com/ashfordeOU/scoop-bucket e depois scoop install kshana-mcp |
Scoop (Windows) | manifesto para v0.40.0 |
| winget | winget install AshfordeOU.KshanaMcp |
winget (Windows) | --version 0.40.0 |
| cargo | cargo install kshana-mcp --version 0.40.0 |
Rust 1,88+ | kshana-mcp 0.40.0 |
| Binário pré-compilado | a página da versão: kshana-mcp (Linux x86-64), kshana-mcp-<target>[.exe], verificado por SHA256SUMS e gh attestation verify |
none | v0.40.0 |
| Registo do MCP | io.github.ashfordeOU/kshana-mcp (encontrado por clientes que reconhecem o registo) |
um cliente que reconhece o registo | 0.40.0 |
| Remoto (HTTP em fluxo contínuo) | kshana-mcp --http 127.0.0.1:8080, alojado pelo próprio utilizador: consulte docs/deploy/mcp-http.md |
o seu próprio anfitrião | v0.40.0 |
kshana-mcp no Glama, a sua pontuação de qualidade de servidor MCP
Uma passagem que nomeia clientes de IA de terceiros foi omitida aqui; encontra-se no README.md no GitHub.
A configuração por cliente está em docs/integrations.md. O servidor está listado no registo MCP oficial como io.github.ashfordeOU/kshana-mcp.
As 49 ferramentas
Cenários e relatórios
| Ferramenta | O que faz |
|---|---|
run_scenario |
Executar um cenário a partir de uma definição TOML (Tom's Obvious, Minimal Language) |
list_scenario_kinds |
Os 92 tipos de cenário incorporados com descrições + campos obrigatórios/opcionais — para que o agente possa montar um cenário válido |
validate_scenario |
Verificação prévia: analisar o TOML e detetar o seu tipo, sem executar |
list_example_scenarios |
Os cenários de referência incluídos, em JSON |
get_example_scenario |
O texto TOML de um cenário de referência incluído, byte a byte o ficheiro em scenarios/ |
report_scenario |
Executar um cenário e devolver o respetivo relatório |
animate_scenario |
Executar um cenário e devolver a sua série temporal como animação |
sky_geometry |
Geometria do céu sob um horizonte dependente do azimute: os satélites visíveis e ocultos, o DOP, a covariância este-norte-cima e a elipse de erro horizontal; ou uma predefinição de horizonte com a sua proveniência |
Exportação e interoperabilidade
| Ferramenta | O que faz |
|---|---|
list_export_formats |
Que formatos de interoperabilidade se aplicam a um cenário (czml, kml, geojson, stk, sigmf), o motivo quando um não se aplica, e a especificação que cada escritor segue |
export_interop |
Exportar um cenário como CZML (Cesium Language), KML (Keyhole Markup Language), GeoJSON, efemérides STK (Systems Tool Kit) .e, ou SigMF (Signal Metadata |
import_route |
Escrever uma rota GeoJSON LineString num cenário que percorre um trajeto de pontos de passagem (terrain-nav, terrain-slam, gravity-map, combined-altpnt) e devolver o novo TOML |
export_sp3 |
Exportar a constelação de um cenário orbit como efemérides precisas SP3-c (Standard Product 3, revisão c) |
export_omm |
Exportar os elementos de um cenário orbit como catálogo CCSDS (Consultative Committee for Space Data Systems) 502.0-B-2 OMM (Orbit Mean-elements Message) |
export_oem |
Exportar a série de estados de um cenário orbit como efemérides CCSDS OEM (Orbit Ephemeris Message) 2,0 — a posição TEME (true equator, mean equinox) e |
export_table_csv |
Executar um cenário e devolver a sua tabela de reprodutibilidade como CSV (comma-separated values) — a tabela estável ao byte que a CLI (command-line interface) escreve como <scenario>.table.csv |
export_test_bench |
O movimento do veículo e os eventos de um cenário para um simulador GNSS de laboratório (kshana bench-export) |
Confiança do recetor e da embarcação
| Ferramenta | O que faz |
|---|---|
assess_receiver_log |
Avaliar a confiança num registo real de um recetor GNSS (global navigation satellite system) |
assess_vessel_stream |
Pontuar um excerto NMEA 0183 limitado (no máximo 2 MiB e 20 000 épocas |
assess_vessel_log |
Um registo NMEA 0183 de uma embarcação (no máximo 4 MiB) como execução em lote, com o TOML de sessão a indicar os limites da embarcação |
create_evidence_pack |
Um pacote de evidências assinado para uma janela do registo de uma embarcação (kshana receiver-trust evidence) |
attach_evidence_timestamp |
Associar um token de marca temporal RFC 3161 (base64 dos bytes de .tsr) a um pacote, em memória (kshana evidence attach-timestamp) |
verify_evidence_pack |
Verificar um pacote (kshana evidence verify) |
generate_training_nmea |
NMEA 0183 sintético de ponte para formação de tripulações a partir de um TOML nmea-scenario (jamming, arrastamento da posição, spoofing de tempo, atraso de repetição) com o registo do instrutor (kshana-nmea-training/1) |
build_interference_map |
Um mapa de interferência GNSS a partir de relatórios de posição ADS-B ou AIS como texto CSV (no máximo 4 MiB) |
route_exposure |
A proporção do comprimento de uma rota em células degradadas, não degradadas, não avaliadas e não observadas de um ou mais mapas de interferência, opcionalmente dentro de um intervalo de datas |
trust_telemetry |
Um fluxo de confiança (linhas JSON) ou um resultado de receiver-trust renderizado como texto Prometheus, linhas de syslog CEF ou LEEF ou uma carga JSON OTLP, com os codificadores de kshana trust-telemetry |
jammertest_import |
Lê o catálogo de testes e o plano de transmissão do Jammertest publicados (NPRA/jammertest-plan, MIT) como referência programada (kshana jammertest import): os intervalos de uma área de teste tornam-se eventos de confiança do recetor, com o id do catálogo e o ano em cada etiqueta. Intervalos planeados, não horas de emissão registadas; nenhum campo de contacto do plano é lido. MODELLED. Ver docs/JAMMERTEST.md. |
jammertest_score |
Pontua um registo de recetor face a esse calendário (kshana jammertest score): por teste, a latência de deteção, os alarmes perdidos e o tempo de recuperação, e os falsos alarmes fora de todos os intervalos. Registos de texto como log, binários (ubx, sbf) como log_base64. Um pacote assinado precisa de uma chave: linha de comandos. Apenas consultivo; MODELLED. |
fit_imu_log |
Parâmetros do acelerómetro e do giroscópio dos cenários hybrid e fusion ajustados a partir de um registo de IMU parada (CSV ou EuRoC) por desvio de Allan, com uma tabela [accel_classical] pronta a colar e o SHA-256 do registo (kshana imu-fit). Texto à entrada, JSON à saída; MODELLED. |
IQ GNSS (ficheiros do diretório de trabalho; desativado no modo HTTP)
| Ferramenta | O que faz |
|---|---|
iq_signals |
A configuração da camada IQ GNSS |
iq_info |
Descrever uma gravação IQ (em fase e em quadratura) no diretório de trabalho sem a processar |
iq_scene |
Gerar uma cena IQ GNSS multissatélite no diretório de trabalho (kshana iq scene) |
iq_acquire |
Aquisição por FFT (fast Fourier transform) de um ou mais PRN (códigos pseudoaleatórios) numa gravação (kshana iq acquire), opcionalmente atrás de andares de front-end |
iq_track |
Adquirir e depois seguir com o banco de DLL/PLL/FLL (malha de bloqueio de atraso, de fase e de frequência) (kshana iq track), com as malhas a partir de um `kshana.loop-desig |
iq_frontend |
Aplicar DSP (digital signal processing) de front-end do recetor e de mitigação de interferência |
iq_sweep |
Reproduzir uma gravação IQ do diretório de trabalho com vários projetos de malhas de seguimento (kshana iq sweep) |
iq_monitor |
Executar os monitores de deteção de interferência e de spoofing sobre uma gravação IQ do diretório de trabalho (kshana iq monitor) |
iq_labfit |
Ajustar o modelo de perda de bloqueio das malhas de seguimento a execuções de laboratório (kshana iq labfit) a partir de um cenário iq-labfit cujos registos estão em linha (text ou base64 |
iq_test_conditions |
Validar um ficheiro kshana.test-conditions/1 dado como texto e devolver as condições resolvidas com o respetivo hash |
iq_campaign |
Executar uma campanha de reprodução em laboratório (kshana iq campaign) |
iq_campaign_status |
O progresso da pasta de saída de uma campanha |
Mapeamento de compliance
| Ferramenta | O que faz |
|---|---|
compliance_report |
O mapeamento do quadro público preenchido a partir de documentos de resultados dados como texto (kshana compliance-report) |
compliance_mapping |
As tabelas de mapeamento estáticas (ou, com sources, os documentos de origem que citam, com versões e URL) em Markdown, encabeçadas pela mesma declaração |
list_standards_packs |
Os pacotes de normas (kshana standards-pack list): conjuntos de cenários pontuados para os perfis de teste do quadro DHS Resilient PNT, a IMO MSC.1/Circ.1575 e o Apêndice F do ICAO Doc 9849 |
run_standards_pack |
Um pacote executado face a limiares indicados antes da execução: cada teste MET, NOT MET ou NEEDS INPUT; MODELLED, não classifica nenhum produto |
lunanet_afs_check |
O LunaNet Augmented Forward Signal verificado face ao LNIS V5 AD1 Volume A (LSIS-AFS V1.0): os códigos face às tabelas impressas, ou um fluxo de símbolos face ao formato de trama; o LDPC e o CRC-24Q das subtramas 2 a 4 não são verificados |
create_round_trip_pack |
O pacote assinado do circuito de laboratório: cenário, documento kshana.test-conditions/1, registo do recetor e pontuação ligados por hash |
Benchmark
| Ferramenta | O que faz |
|---|---|
score_benchmark |
Uma submissão kshana-bench pontuada face a um ficheiro de referência, ambos como texto JSON (kshana bench score, bench/SPEC.md): o ficheiro de resultados com a versão da especificação, a divisão, os hashes de entrada e as métricas da tarefa. MODELLED; descreve um registo ou um corpus, nunca um produto. |
render_leaderboard |
Ficheiros de resultados do kshana-bench apresentados como a página estática de classificação (texto HTML), cada um validado primeiro. |
Edições#
O motor completo é gratuito. O Kshana Pro e os estudos à medida destinam-se a programas que precisam de mais, e todo o percurso pago começa com uma mensagem: aqui não há preços.
| Gratuito | Kshana Pro | Estudo à medida | |
|---|---|---|---|
| O que é | todo o motor aberto, todos os 92 tipos de cenário, sem restrição de recursos | uma sobreposição proprietária sobre o mesmo motor, sob contrato | um estudo MODELLED de resiliência de PNT do seu sistema, feito por nós |
| Licença | AGPL-3.0 (GNU Affero General Public License, versão 3), ou uma licença comercial | proprietário | contrato |
| Como começar | instalar ou abrir kshana.dev | pedir uma avaliação do Pro | pedir um estudo |
O que é o Pro, nas palavras de docs/PRO.md:
Um superconjunto estrito do Kshana aberto. O Pro depende do motor aberto como biblioteca e nunca o bifurca. Todos os tipos de cenário abertos são executados no Pro sem alterações, e um cenário aberto é executado no Pro sem qualquer licença.
Sem física nova. O Pro não acrescenta nenhum modelo físico e não altera nenhum. Todos os números do Pro provêm de execuções do motor aberto, pelo que um valor do Pro é tão fiável como o tipo de cenário aberto de onde veio, e nunca mais.
O Pro responde às perguntas seguintes de um programa: que projeto voar (um otimizador de projeto e a sua frente de Pareto), com que segurança se responde (incerteza e sensibilidade) e se a missão satisfaz os seus requisitos (um dossiê de missão, rastreabilidade de requisitos, estudos de compromissos, uma verificação de regressão de cenários, gémeos digitais de relógios, um dossiê de estudo e um serviço nas instalações do cliente). Também vigia uma campanha de valores e faz falhar um pipeline quando um deles piora, testa planos de sinal candidatos face aos sinais abertos de navegação por satélite nos dois sentidos (coexistência espetral) e coloca estudos em fila num serviço de tarefas nas instalações do cliente, com um registo de entregas encadeado por hash. Cada um está descrito, com o que produz e o que não faz, em docs/PRO.md. Nada do que o Pro produz é uma certificação, e um estudo à medida também não é uma certificação.
O que o Kshana Pro lê do motor aberto, e o apoio da Ashforde® OÜ
Sobre o que o Kshana Pro assenta. Cada parte do Pro trabalha a partir do motor aberto e deixa-o inalterado:
- O otimizador de projeto, o estudo de incerteza e o dossiê de missão executam cenários do motor aberto através da interface pública do motor e calculam cada número a partir dos resultados das execuções. Cada saída mantém o nível VALIDATED, MODELLED ou PARTNER que o motor aberto atribuiu a cada valor, nunca um superior.
- Os gémeos digitais de relógios usam o modelo de relógio do motor aberto e o seu estimador do desvio de Allan: um gémeo é calibrado com o orçamento de Allan publicado do dispositivo e depois verificado estimando o desvio de Allan do gémeo com o estimador aberto.
- Os estudos de compromissos executam cada opção de arquitetura como um cenário do motor aberto, sem alterações, e ordenam as opções segundo uma figura de mérito lida do resultado de cada execução.
- A vigilância de campanhas lê os seus valores dos resultados de execuções do motor aberto dos cenários de um pacote e compara-os com a execução anterior bem-sucedida.
- A coexistência espetral lê cada número físico de execuções do motor aberto dos tipos
leo-signaleconstellation-design, e acrescenta apenas a soma sobre os satélites à vista e a ordenação dos planos. - O serviço de tarefas nas instalações do cliente executa cenários abertos e do Pro através do mesmo motor e guarda cada resultado tal como a execução o devolveu.
- Os pacotes de evidências registam, para cada execução, o hash do cenário que o motor aberto grava no seu resultado, para que um valor de um pacote possa ser reproduzido voltando a executar o seu cenário.
- Ferramentas de engenharia de sistemas e de programas. As ferramentas de engenharia de sistemas baseada em modelos (MBSE) e de programas do Kshana Pro verificam os requisitos de um programa face a execuções do motor aberto: importam requisitos como valores separados por vírgulas (CSV), ou como um subconjunto documentado do Requirements Interchange Format (ReqIF) ou de texto Systems Modeling Language versão 2 (SysML v2), avaliam cada critério de aceitação, com a respetiva unidade, face aos valores que uma execução escreveu, e produzem uma matriz de referência cruzada de verificação (VCRM), um modelo SysML v2, um relatório de impacto de alterações e um pacote de evidências offline. Não voltam a executar nem a recalcular nada, e leem apenas o que o motor aberto publica: o
result.jsonde cada execução (os campos que um critério nomeia, as respetivas unidades, o carimbo de reprodutibilidade com hash do cenário, semente, versão do motor e versão do esquema, e o rótulo da execução e os níveis dos valores), o seureport.json(tipo, registo de reprodutibilidade e rótulos de capacidades), o ficheiro de cenário (o seu hash, tipo, semente e parâmetros), o esquema de campos e unidades (a unidade, a proveniência e o nível de evidência de cada campo) e a matriz de verificação (o rótulo VALIDATED, MODELLED ou PARTNER de cada capacidade).
Apoio e serviços profissionais#
O Kshana é gratuito e de código aberto sob a AGPL-3.0 e desenvolvido e mantido profissionalmente pela Ashforde® OÜ (Estónia). O motor aberto é completo e utilizável por si só. Para organizações que precisam de mais, a Ashforde® OÜ oferece:
- Apoio comercial e integração — incorporação do Kshana na sua cadeia de ferramentas, cenários à medida e correções prioritárias.
- Modelos de sensores à medida — calibrados para o seu equipamento, incluindo modelos de resiliência sujeitos a controlo de exportação mantidos numa sobreposição privada.
- Kshana Pro — ferramentas proprietárias de engenharia de sistemas baseada em modelos (MBSE) e de programas que verificam os requisitos de um programa face a execuções do motor aberto e produzem uma matriz de referência cruzada de verificação (VCRM), um modelo Systems Modeling Language versão 2 (SysML v2), um relatório de impacto de alterações e um pacote de evidências offline. Não voltam a executar nada e leem apenas as saídas publicadas do motor: o
result.jsone oreport.jsonde cada execução, o ficheiro de cenário, o esquema de campos e unidades e os rótulos da matriz de verificação (a lista completa está em Edições). - Ferramentas do Kshana Pro de projeto, incerteza e missão — a frente de Pareto de um espaço de projeto, incerteza e sensibilidade ao longo de milhares de execuções, e um dossiê de missão com um só comando, com uma matriz de verificação e um PDF; consulte
docs/PRO.md. - Vigilância de campanhas, coexistência espetral e serviço de tarefas do Kshana Pro — um pipeline que falha quando um valor vigiado piora, planos de sinal testados face aos sinais abertos de navegação por satélite nos dois sentidos, e uma fila de tarefas nas instalações do cliente com um registo de entregas encadeado por hash; consulte
docs/PRO.md. - Formação e consultoria sobre análise de desempenho de PNT quântico/clássico.
Este é o modelo de núcleo aberto: o motor é, e continuará a ser, de licença aberta; o negócio que o sustenta é o conhecimento especializado, o apoio e as extensões proprietárias — não as taxas de licença. Contacto: contact@ashforde.org · ashforde.org.
Investigação#
Os estudos construídos sobre o motor aberto são publicados no arXiv. Cada um nomeia o comando do motor que lhe está associado, para que os seus números possam ser regenerados a partir de um cenário ou de um exemplo de estudo registado no repositório.
| Artigo | O que mostra | Comando do motor |
|---|---|---|
| Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics arXiv:2606,22054 · doi:10.48550/arXiv.2606.22054 |
A queda na pontuação de um detetor de interferência GNSS quando as condições mudam pode ser prevista apenas a partir de estatísticas da distribuição de origem, num banco de ensaio sintético aberto e depois em gravações de campo abertas. | cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json |
| A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing arXiv:2606,24210 · doi:10.48550/arXiv.2606.24210 |
Um recetor de temporização GNSS sob spoofing não tem um limite incondicional finito para o erro de tempo não detetado, pelo que o artigo apresenta um limite condicional, calibrado num spoof gravado pelo ar da campanha pública JammerTest 2024. | cargo run --release --example tpl_jammertest |
| How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting arXiv:2607,05415 · doi:10.48550/arXiv.2607.05415 |
Uma única pontuação composta de resiliência só é uma base estável para uma decisão onde um projeto domina; onde os projetos disputam, a simples reponderação pode mudar o vencedor. | cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json |
| Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination arXiv:2607,02566 · doi:10.48550/arXiv.2607.02566 |
A medição de distâncias dentro de uma constelação lunar deixa a posição absoluta de uma estação à superfície inobservável; um atraso de interferometria de linha de base muito longa (VLBI) a partir da Terra restitui-a quando a constelação é esparsa e aperfeiçoa-a quando é rica. | o tipo lunar-joint-od-clock: kshana example lunar-joint-od-clock > s.toml && kshana s.toml |
| The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis arXiv:2607,06212 · doi:10.48550/arXiv.2607.06212 |
As constelações planeadas de quatro a seis satélites dão uma geometria deficiente no polo sul lunar, e alguns faróis de medição de distância à superfície corrigem-na de forma muito mais económica do que mais satélites. | o tipo lunar-beacon: kshana example lunar-beacon > s.toml && kshana s.toml |
| Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever arXiv:2610,23871 · doi:10.48550/arXiv.2610.23871 |
A diluição de precisão é indefinida para o seguimento cislunar apenas por distância, porque a velocidade é inobservável num instante, pelo que o artigo usa o Gramiano de observabilidade em quatro órbitas retrógradas distantes planares: apenas por distância, o posto é 2 de 4 num instante e é preciso um arco de cerca de 2,09 h para se tornar totalmente observável, com o condicionamento a melhorar à medida que o arco se alonga; a taxa de variação da distância (Doppler) dá posto 4 de imediato; e a co-estimação de uma estação com estados de satélites e relógios continua deficiente de posto em um, a menos que se acrescente um observável interferométrico externo. Os requisitos pertencem a orçamentos de comprimento de arco, de condicionamento e de tipo de medição, não ao DOP. | o tipo cislunar-observability: kshana scenarios/cislunar-observability.toml (o seu irmão cislunar-arc-recovery testa o limiar com um estimador independente por diferenças finitas) |
Os três exemplos de estudo escrevem artefactos deterministas ao byte (sementes fixas) que registam a versão do motor, as sementes e um hash da configuração. Os três artigos lunares e cislunares assentam no conjunto lunar (o nível de evidência de cada parte consta da matriz de verificação); as suas afirmações de geometria e de diluição de precisão são também verificadas de forma cruzada face a referências independentes separadas em tests/validate_p*.rs. Mais em Artefactos de estudo reprodutíveis em Referência.
Citar#
Se usar o Kshana em trabalho académico ou técnico, cite a versão que usou, com o cenário e a semente. CITATION.cff contém os metadados legíveis por máquina, e o GitHub mostra a partir dele um botão "Cite this repository". Cada versão publicada é arquivada no Zenodo; o DOI (Digital Object Identifier) de conceito 10.5281/zenodo.20528627 resolve sempre para a versão mais recente.
Baweja, C. (2026). Kshana — a PNT-resilience simulator with quantum-sensor performance models. Ashforde OÜ. https://doi.org/10.5281/zenodo.20528627
Os artigos acima:
Baweja, C. (2026). Anticipating the Optimism Gap: Predicting Distribution-Shift Degradation of RF-Impairment Detectors from In-Distribution Statistics. arXiv:2606,22054. https://doi.org/10.48550/arXiv.2606.22054
Baweja, C. (2026). A Conditional Timing Protection Level: Holdover-Limited Undetected Time Error Under GNSS Spoofing. arXiv:2606,24210. https://doi.org/10.48550/arXiv.2606.24210
Baweja, C. (2026). How Stable Is a PNT Resilience Score? Decision-Instability of Single-Number Resilience Ratings under Framework-Aligned Weighting. arXiv:2607,05415. https://doi.org/10.48550/arXiv.2607.05415
Baweja, C. (2026). Earth-baseline VLBI restores the observability of a lunar surface station in joint orbit-and-clock determination. arXiv:2607,02566. https://doi.org/10.48550/arXiv.2607.02566
Baweja, C. (2026). The Cost of Lunar South-Polar Geometry, and Surface Beacons as the Efficient Fix: A Dilution-of-Precision Analysis. arXiv:2607,06212. https://doi.org/10.48550/arXiv.2607.06212
Baweja, C. (2026). Cislunar navigation is an observability problem: arc-length thresholds, Gramian conditioning, and the Doppler lever. arXiv:2610,23871. https://doi.org/10.48550/arXiv.2610.23871
Licença#
O Kshana tem licenciamento duplo: a GNU AGPL-3.0-only (LICENSE), ou uma licença comercial da Ashforde® OÜ para integração fechada a que a AGPL não se adapta. LICENSING.md explica qual se aplica. As contribuições são licenciadas à entrada sob a AGPL e concedem também à Ashforde® OÜ o direito de as incluir na edição comercial; assine cada commit com git commit -s (consulte CONTRIBUTING.md). "Kshana" e as suas marcas são marcas registadas da Ashforde® OÜ: a licença abrange o código, não o nome, pelo que deve mudar o nome dos forks.
Referência#
O material longo, recolhido. Todos os documentos estão listados em Documentação.
Instalar e compilar a partir do código-fonte
Instalar e compilar#
Requer uma cadeia de ferramentas Rust (≥ 1,88, a rust-version em Cargo.toml; desenvolvido em 1,93).
git clone https://github.com/ashfordeOU/kshana
cd kshana
cargo build --release
cargo test # all tests pass
Utilização: a linha de comandos por inteiro
Utilização#
Execute qualquer cenário; a CLI despacha segundo o campo kind do cenário e escreve <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html e <scenario>.report.json junto dele — mais <scenario>.table.csv para os tipos que publicam uma tabela. O relatório (uma página HyperText Markup Language (HTML) e um documento JSON com o mesmo conteúdo) traz um resumo executivo, cada entrada com a sua unidade, os resultados e os gráficos, as tabelas de varrimento, Monte Carlo ou cadeia de uma campanha, uma cronologia de eventos, o rótulo VALIDATED / MODELLED / PARTNER e a origem de cada capacidade que a execução usou, o que não está modelado e um registo de reprodutibilidade (versão do motor, resumos Secure Hash Algorithm 256-bit (SHA-256), semente, plataforma e o comando exato). Imprime-se para um ficheiro PDF (Portable Document Format) limpo a partir do navegador em papel A4 ou Letter; o motor não escreve nenhum PDF. Consulte docs/REPORTS.md.
cargo run -- scenarios/clock-holdover.toml
cargo run -- scenarios/imu-deadreckoning.toml
cargo run -- scenarios/timetransfer.toml
cargo run -- scenarios/hybrid-pnt.toml
cargo run -- scenarios/orbit-gnss-challenged.toml
cargo run -- scenarios/orbit-sgp4-gps.toml
cargo run -- scenarios/orbit-rinex.toml
cargo run -- scenarios/integrity-raim.toml
# Export a propagated constellation to an SP3-c precise-ephemeris file:
cargo run -- scenarios/orbit-sgp4-gps.toml --export-sp3 gps.sp3
# Export the constellation's mean elements to a CCSDS OMM catalogue (one OMM
# message per TLE-defined satellite, with its real NORAD id / COSPAR designator):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-omm gps.omm
# Export the velocity-carrying state to a CCSDS OEM 2.0 ephemeris (GMAT/Orekit/STK):
cargo run -- scenarios/orbit-sgp4-gps.toml --export-oem gps.oem
# Export the geometry for a globe, a map or a mission-analysis tool: CZML, KML,
# GeoJSON, STK .e, or SigMF for the spectrum kind (every format that applies):
cargo run -- scenarios/jamming-demo.toml --export all
--export <czml|kml|geojson|stk|sigmf|all|list> escreve junto do cenário gravações CZML (a Cesium Language), KML (Keyhole Markup Language), GeoJSON (Request for Comments 7946), efemérides Ansys STK (Systems Tool Kit) .e e SigMF (Signal Metadata Format), e --import-route <route.geojson> alimenta uma linha GeoJSON nos tipos que percorrem um trajeto. Cada formato é validado face à sua especificação publicada, e um cenário a que um formato não se aplica diz porquê: consulte docs/INTEROP.md.
Outros modos da CLI — analisar um cenário com lint, fornecer dados reais de orientação da Terra ou executar uma bateria completa:
# Lint a scenario without running it (checks the kind + required fields):
cargo run -- --validate scenarios/integrity-raim.toml
# Feed a real IERS Earth-orientation file (finals2000A) for frame precision:
cargo run -- scenarios/orbit-sgp4-gps.toml --eop tests/fixtures/agency/eop/finals2000A_2022001.txt
# Run a SUITE of scenarios into one aggregated, stamped study artifact
# (writes <suite>.study.json + <suite>.study.html next to the manifest):
cargo run -- --study scenarios/quantum-pnt-demonstrator.suite.toml
# Animate a run's time series: an animated SVG, a self-contained HTML player, and a
# numbered SVG frame sequence with manifest.json (see docs/ANIMATION.md):
cargo run -- scenarios/campaign-jam-spoof-holdover-integrity.toml --animate all
Exportação de animações. --animate svg|html|frames|all escreve <scenario>.animation.svg (keyframes de Cascading Style Sheets (CSS), sem script), <scenario>.animation.html (reproduzir, pausar, deslocar, velocidade e painéis sincronizados, sem recursos externos) e <scenario>.frames/ (frame_0000.svg, … mais manifest.json com as imagens por segundo e a duração). Uma campanha reproduz as suas fases e alarmes, uma execução de espetro a sua cascata; o tema segue prefers-color-scheme e prefers-reduced-motion mostra a imagem final. Renderiza as amostras da própria execução, idênticas ao byte numa nova execução, e não acrescenta evidências. Consulte docs/ANIMATION.md.
Um manifesto de bateria é um pequeno ficheiro TOML (Tom's Obvious, Minimal Language) — um title e uma lista scenarios = [ … ] de caminhos de cenários — que o motor executa por sua vez, reunindo cada resultado (com os respetivos rótulos MODELLED / VALIDATED) num único artefacto de estudo autodescritivo. Consulte scenarios/quantum-pnt-demonstrator.suite.toml.
Papel de interoperabilidade. O Kshana é a camada de simulação de desempenho que se situa a par da cadeia de ferramentas de pós-processamento, não uma substituição dela: alimente a sua saída RINEX ao RTKLIB ou ao gLAB para obter uma solução de posição, e use a sua saída SP3 como produto de órbita precisa para ferramentas como o Ginan — o Kshana responde a que resiliência uma dada arquitetura PNT proporciona antes de existirem sinais reais, em formatos que essas ferramentas já ingerem (--export-sp3, ou export_sp3 = true num cenário orbit, escreve <scenario>.sp3). A mesma órbita pode ser publicada como elementos médios CCSDS OMM de uma norma em curso (--export-omm, ou export_omm = true, escreve <scenario>.omm) — uma mensagem OMM 502,0 KVN (keyword = value notation) por satélite definido por TLE, com o número de catálogo NORAD (North American Aerospace Defense Command), o designador internacional COSPAR (Committee on Space Research) e a época reais de cada objeto, para qualquer consumidor que compreenda OMM, em vez de um conjunto de elementos de duas linhas feito à medida.
Exemplo de saída (holdover do relógio — repare em como as figuras de mérito de Integridade e de Segurança são comunicadas):
scenario 5ba83a232b94 | quantum holdover 6600s p95 1.20e-4ns integrity 1.000 security n/a (no attack) | classical holdover 2610s p95 19.7ns integrity 1.000 security n/a (no attack)
wrote scenarios/clock-holdover.result.json, scenarios/clock-holdover.chart.svg, scenarios/clock-holdover.report.html, and scenarios/clock-holdover.report.json
O erro de temporização do percentil 95 (p95) do relógio ótico é de 1.20e-4 ns: o resumo imprime valores pequenos com algarismos significativos em vez de os arredondar para 0.0. security indica n/a (no attack) porque este cenário não configura nenhum ataque, pelo que não há nada a detetar. O resultado JSON continua a conter o limite analítico de detetabilidade de spoofing de cada relógio em fom.security (0,997 para o relógio ótico, 0,000 para o relógio atómico à escala de chip, cujo ruído próprio na janela de monitorização excede a especificação de 20 ns), e o seu bloco figure_tiers marca esse valor como applicable: false. O tipo de cenário spoof pontua a deteção face a um ataque injetado. figure_tiers atribui também a cada valor comunicado o seu nível de verificação — VALIDATED (verificado face a uma referência independente externa) ou MODELLED — e a linha da matriz de verificação de onde o nível é lido. O cenário de órbita comunica adicionalmente um bloco de geometria — fração de amostras com solução de posição e melhor/mediana diluição de precisão de posição (PDOP) e exatidão de posição — a par do resultado do relógio.
Leia estes dois números com cuidado.
securityé um limite analítico de detetabilidade de spoofing derivado da estabilidade de cada relógio — só tem significado face a um cenário de spoofing configurado e não é um detetor RAIM multissatélite.integrityé aqui a autoconsistência do filtro (fração das amostras de falha dentro do seu próprio limite de k sigma), não um valor de integridade HPL/VPL de aviação. Consultedocs/INTEGRITY.md.Para integridade autónoma genuína do recetor, o tipo de cenário
integrity(scenarios/integrity-raim.toml) executa RAIM real de instantâneo e de separação de soluções (ao estilo ARAIM) sobre a geometria da constelação propagada: calcula os níveis de proteção horizontal/vertical (HPL/VPL) por época e comunica a fração de épocas que satisfazem os limites de alerta configurados, com um diagrama de integridade de Stanford para a classificação de erro face ao PL (nível de proteção).
Artefactos de estudo reprodutíveis
Quatro estudos abertos regeneram cada um um artefacto determinista ao byte (semente fixa) com um só comando — os números por trás dos estudos do cruzamento quântico-versus-clássico, da lacuna de otimismo por degradações de RF, da pontuação de resiliência de PNT e do nível de proteção de temporização:
# Quantum-vs-classical resilience crossover map (writes paper/crossover/*.json):
cargo run --release --bin crossover_study -- paper/crossover
# RF-impairment optimism-gap study (13-detector panel, scaling laws, LOO predictor):
cargo run --release --example optimism_study -- paper-artifacts/optimism-study.json
# Framework-aligned PNT-resilience scoring + decision-instability study:
cargo run --release --example resilience_report -- paper-artifacts/resilience-study.json
# Conditional Timing Protection Level, calibrated on a real recorded spoof:
cargo run --release --example tpl_jammertest
Cada artefacto regista a versão do motor, as sementes e um hash de configuração e traz um rótulo MODELLED/VALIDATED honesto. As sondas com dados reais (*_probe) executam o mesmo pipeline sobre gravações que fornece localmente; nenhum conjunto de dados é distribuído no repositório. O estudo da lacuna de otimismo por degradações de RF está descrito no preprint arXiv:2606,22054, e o nível de proteção de temporização condicional (tpl_jammertest acima) no preprint arXiv:2606,24210 (consulte Citar).
Os estudos publicados de PNT lunar (arXiv:2607,06212 DOP com faróis à superfície, arXiv:2607,02566 observabilidade por VLBI e arXiv:2610,23871 observabilidade do comprimento de arco cislunar) têm as suas afirmações de geometria, diluição de precisão, previsão em tempo real de referencial / parâmetros de orientação da Terra (EOP), órbitas retrógradas distantes e medição de distância por RF verificadas de forma cruzada e independente em tests/validate_p*.rs face a referências independentes separadas (scipy.special.j1, uma resolução DOP (HᵀH)⁻¹ independente em NumPy, uma nova análise em NumPy das mesmas linhas finals2000A do IERS, e a NASA/JPL Three-Body Periodic Orbit Database). São verificações de regressão adicionais sobre o conjunto lunar modelado; não alteram a contagem da matriz verificada por máquina.
Formato de cenário
Formato de cenário#
Os cenários são TOML declarativo. Um kind de nível superior seleciona o pacote — cinquenta no total (clock é o predefinido se for omitido): inertial, timetransfer, hybrid, hybrid-ukf, fusion, gnss-ins, orbit, ephemeris, gnss-sim, integrity, lunar-integrity, lunar-time-offset, spoof, spoof-detect, jamming, sweep, sweep-nd, gravity-map, terrain-nav, terrain-slam, combined-altpnt, pvt, mars-pnt, impairment-eval (banco de ensaio de avaliação da deteção de degradações de RF por aprendizagem automática — corpus sintético rotulado + estrutura de ROC/AUC independente do detetor + lacuna de otimismo dentro/fora da distribuição), quantum-trade (compromisso PNT quântico versus clássico com ingestão de ADEV medida + envolvente de resiliência sem GNSS; MODELLED), space-weather (índices solares/geomagnéticos + temperatura exosférica de Jacchia-71 + densidade termosférica condicionada pela atividade sobre a atmosfera estática; MODELLED), oem-interop (ponte de importação/ida-e-volta CCSDS OEM para efemérides do GMAT/Orekit/STK; MODELLED), o trio de análise de missão launch-window (azimute de lançamento de dois corpos / mudança de plano / oportunidades), reentry (corredor de reentrada balística de Allen-Eggers), eo-coverage (geometria de faixa / GSD / acesso / revisita de observação da Terra), space-packet (enquadramento de pacotes espaciais CCSDS 133,0 TM/TC — telemetria/telecomando — disposição exata de bits, ida-e-volta verificada) e attitude-budget (binário de gradiente de gravidade em 3 graus de liberdade + orçamento de erro de apontamento RSS), passes (previsão de passagens de nascer/pôr de estações terrenas — AOS/TCA/LOS, elevação máxima, acesso) e link-budget (equação de ligação CCSDS/DSN unidirecional — FSPL / Eb·N₀ / margem / fecho); telecom-timing (erro de tempo em holdover, MTIE e TDEV verificados face a máscaras ITU-T); spectrum (toda a banda L do GNSS como uma única densidade espetral de potência: uma cascata frequência-tempo sob uma cronologia de jammer programada de onda contínua, banda estreita, chirp ou ruído adaptado, relação jammer-sinal por banda e densidade efetiva de portadora-ruído a partir do coeficiente de separação espetral, e entrada e saída de gravações Signal Metadata Format (SigMF) com estimativas espetrais de Welch; os espetros de sinal VALIDATED face a valores de manuais, o cenário de jammer MODELLED; consulte docs/SPECTRUM.md; o mesmo tipo desenha painéis de banda UHF, S e C com sinais de órbita terrestre baixa concebidos); leo-signal (projetos de sinais de posicionamento, navegação e temporização em órbita terrestre baixa para qualquer sistema: espetros de banda limitada, jitter de seguimento de código e exatidão de medição de distância, pesquisa e tempo de aquisição, separação espetral face ao GPS e ao Galileo, tolerância a jammers e um compromisso entre bandas UHF e C, a partir de predefinições públicas como Xona Pulsar, Iridium, Starlink e CentiSpace ou projetos em linha; as formas fechadas e o Doppler em LEO VALIDATED, os projetos MODELLED; consulte docs/LEO-SIGNAL.md); solar-system (o Sol, os planetas, Plutão, a Lua e sete grandes luas numa só época — posições, constantes, tempos de luz e trajetórias orbitais; posições dos planetas VALIDATED face ao JPL Horizons) e body-pnt (posicionamento em torno de qualquer desses corpos com uma constelação de navegação local e uma ligação de espaço profundo desde a Terra; MODELLED); campaign (tipos existentes compostos numa cronologia de missão encadeada com o estado passado entre fases, um varrimento de parâmetros, um conjunto Monte Carlo com semente, ou vários cenários sob uma condição partilhada; MODELLED, consulte docs/CAMPAIGNS.md); constellation-design (padrões Walker delta e estrela, listas de elementos e projetos de várias camadas com predefinições GPS, Galileo, BeiDou e GLONASS, e cobertura e diluição de precisão numa grelha de latitude/longitude; o gerador e o DOP global do GPS VALIDATED face aos documentos de serviço publicados, consulte docs/CONSTELLATION-DESIGN.md); leo-pass (uma passagem de satélite de posicionamento, navegação e temporização (PNT) em órbita terrestre baixa (LEO) e o seu balanço de ligação banda a banda, a partir de qualquer constelação e de qualquer projeto de sinal: ângulos de visada, Doppler e taxa de Doppler, perda ITU-R por chuva, gases, cintilação e penetração em edifícios, densidade de portadora-ruído face aos satélites GNSS MEO à vista, a ionosfera de primeira ordem e os pares livres de ionosfera, e um orçamento de solução de posição de baixa energia, sondagem da ionosfera a partir de cada par de bandas, e monitores de spoofing por consistência de Doppler e de geometria da passagem e por consistência entre bandas; os termos ITU-R e a envolvente de Doppler de utilizador estático VALIDATED, a passagem MODELLED, consulte docs/LEO-PASS.md); leo-navmsg (a mensagem de efemérides e de relógio difundida por um satélite PNT em órbita terrestre baixa (LEO), para qualquer órbita e portadora: um ajustador desde uma órbita de referência integrada até ao conjunto kepleriano do Galileo, esse conjunto com polinómios de correção ao longo da trajetória, transversal e radial, o modelo de 22 parâmetros de Liu et al. 2025 ou o polinómio ECEF de relógio zero ATOMIC; erro de distância do sinal no espaço (SISRE) em função do intervalo de ajuste e do período de atualização, uma verificação de continuidade da atualização a meio da passagem, a própria trama binária documentada do Kshana com uma verificação de redundância cíclica CRC-24Q e um orçamento de quantização, e um bloco no estilo RINEX-4 rotulado como extensão do Kshana; os pesos do SISRE, o algoritmo de utilizador do Galileo e o CRC-24Q VALIDATED, os ajustes MODELLED; predefinições opcionais para Xona Pulsar, Iridium, Starlink, CentiSpace, um sistema representativo em banda C, ATOMIC e Celeste IOD; consulte docs/LEO-NAVMSG.md); o trio de PNT fundido MEO + LEO leo-pvt (posicionamento por Doppler a partir da taxa de variação da distância em órbita terrestre baixa (LEO), soluções de posição conjuntas de pseudodistâncias GNSS + LEO com enviesamentos entre sistemas e o DOP em função do número de satélites LEO, cobertura polar e do Ártico, e transferência de tempo LEO para UTC — sobre qualquer constelação, com predefinições opcionais como sinais de oportunidade Xona Pulsar, Iridium e Starlink; a envolvente de Doppler em LEO VALIDATED face a valores publicados do Iridium e da Xona), leo-ppp (convergência de posicionamento preciso de ponto apenas com GNSS e com aumentação por LEO, comparada com Li et al. 2019) e ntn-positioning (posicionamento de rede não terrestre 5G a partir do limite de Cramér-Rao da largura de banda do sinal), MODELLED à parte essa envolvente, consulte docs/LEO-PNT-FUSION.md; leo-pnt-chain (um sistema LEO-PNT de ponta a ponta: um projeto leo-signal transportado por uma banda leo-pass, o C/N0 da passagem e o erro de distância do sinal no espaço da mensagem de navegação passados a uma solução de posição fundida leo-pvt e a uma convergência leo-ppp, com cada passagem de testemunho listada; MODELLED, consulte docs/LEO-PNT.md, que é também a visão geral de todos os tipos e cenários LEO-PNT, incluindo as campanhas de resiliência, um cenário por área de foco de experiência e um por vertical de utilizador final); o conjunto de PNT lunar lunar-vlbi, lunar-joint-od-clock, lunar-frame-realisation, moonlight-service-volume, lunar-differential-pnt, lunar-interop-export; o demonstrador de PNT com tecnologias quânticas quantum-time-transfer, quantum-gnss-free-nav, quantum-anomaly-detect; e os tipos de investigação de segurança de sinal, cislunar e resiliência em camadas lunar-attack-surface, realtime-frame-eop, lunar-time-budget, hybrid-optical-rf, cislunar-observability, conflict-resilience — o trio de análise de missão e estes tipos mais recentes, todos MODELLED (cada um com um núcleo de forma fechada validado; consulte a matriz). Campos comuns: seed, uma grelha [time], uma cronologia de disponibilidade [gnss] (o motor das falhas), e blocos por sensor com cadeias provenance que citam a origem de cada valor. Exemplo (relógio):
seed = 42
threshold_ns = 20.0
[time]
step_s = 10.0
duration_s = 7200.0
[gnss]
windows = [
{ t0 = 0.0, t1 = 600.0, state = "nominal" }, # 10 min GNSS sync
{ t0 = 600.0, t1 = 7200.0, state = "denied" }, # ~1.8 h outage
]
[clock_quantum]
id = "optical-sr-lattice"
provenance = "Strontium optical lattice clock, space-oriented goal sigma_y(1s)=1e-15 (arXiv:1503.08457)"
y0 = 5.0e-17
q_wf = 1.0e-30 # white FM: q_wf = sigma_y(1s)^2
q_rw = 0.0 # random-walk FM
drift = 0.0 # linear aging (per second)
[clock_classical]
id = "csac-sa45s"
provenance = "Microchip SA65 / SA.45s CSAC datasheet sigma_y(1s)=3e-10"
y0 = 5.0e-10
q_wf = 9.0e-20
q_rw = 0.0
drift = 0.0
Campos opcionais (desligados quando ausentes): um relógio pode acrescentar flicker_floor (patamar de Allan de 1/f FM — modulação de frequência); um sensor inercial pode acrescentar gyro_bias e q_arw (enviesamento do giroscópio e passeio aleatório angular), e bias_instability e q_aa (o patamar de Allan da instabilidade do enviesamento e o passeio aleatório da aceleração) — em conjunto, um orçamento de erro de acelerómetro de eixo único (1-DOF) (VRW/ARW — passeio aleatório de velocidade/angular — e instabilidade do enviesamento). Este é o orçamento de erro que o pacote de cenários inertial distribuído executa. Em separado, a biblioteca inclui agora um navegador strapdown de 3 eixos verificado (src/inertial/{attitude,mechanization,imu_errors}.rs): atitude por quaterniões com compensação de coning/sculling, uma mecanização NED completa (termos da velocidade de rotação da Terra e da velocidade de transporte, gravidade de Somigliana WGS-84) e um modelo determinista de erros da IMU em que o fator de escala, o desalinhamento, a sensibilidade a g, a quantização e a rampa de taxa são modelados (IEEE Std 952-1997, a norma da IEEE para especificação e procedimento de ensaio de giroscópios, §A.2; Groves 2013 §4,3). Esse percurso de 3 eixos está agora ligado a um pacote GNSS/INS fracamente acoplado executável (kind = "gnss-ins"): um EKF de estado de erro de 15 estados disciplina a solução strapdown face a soluções de posição ruidosas enquanto o GNSS está disponível e depois segue em inércia durante a falha, comunicando o erro horizontal fundido face ao seguimento em inércia pura em malha aberta. Está também disponível uma atualização de pseudodistância fortemente acoplada (forma a inovação no domínio da distância, pelo que continua a corrigir com menos de quatro satélites). Um cenário de holdover de relógio pode acrescentar runs (> 1) para executar um conjunto Monte Carlo — cada figura de mérito é então comunicada como uma média com uma dispersão entre o percentil 5 e o percentil 95 e o gráfico sombreia a banda de confiança do erro (consulte scenarios/clock-ensemble.toml).
Um cenário fusion (com os mesmos blocos de hybrid) executa dois estimadores de Kalman independentes — um para o estado do relógio, outro para o estado da posição — disciplinados pelo GNSS e auxiliados por transferência de tempo ótica, e comunica uma FoM de holdover combinada. Os dois blocos não partilham covariância cruzada: trata-se de um par empilhado de orçamentos de erro, não de um verdadeiro filtro conjunto acoplado de relógio+posição (a covariância entre blocos é um item do plano de desenvolvimento). Consulte scenarios/fusion-pnt.toml.
Um cenário spoof injeta um spoof de tempo — um de quatro tipos de [attack.shape] (linear_ramp, step_jump, meaconing, replay; um simples rate_ns_per_s continua a ser aceite como rampa linear) — e executa o detetor de spoofing de cada relógio. O detetor é um teste de energia χ²₁ / de Neyman–Pearson bilateral sobre a estatística do monitor auxiliado pelo relógio: o limiar é definido a partir de um orçamento de falsos alarmes target_pfa, e a probabilidade de falha de deteção P_md é comunicada em forma fechada e por Monte Carlo (mc_runs ensaios por hipótese — os dois concordam até alguns ×1/√N). A figura de mérito de Segurança é 1 − P_md na magnitude operacionalmente prejudicial (da especificação), pelo que um relógio silencioso que apanha um spoof com a dimensão da especificação pontua ≈ 1 e um ruidoso que o falha muitas vezes pontua menos (consulte scenarios/spoof-attack.toml, scenarios/spoof-meaconing.toml).
Um cenário gnss-sim é uma simulação no domínio das medições: para cada satélite visível sintetiza a pseudodistância ρ = geometric range + c·δt_rx − c·δt_sv + I + T + noise + multipath e o Doppler em L1, com a ionosfera monofrequência de Klobuchar ([iono], IS-GPS-200 §20.3.3.5.2.5) e a troposfera zenital de Saastamoinen projetada pela função de mapeamento de Niell (1996) ([tropo]). Os resíduos alimentam o RAIM de instantâneo para HPL/VPL por época, e a pseudodistância, o Doppler, o C/N₀ e as correções iono/tropo de cada satélite são emitidos na lista gnss_measurements do JSON. É um simulador direto (gera medições a partir de uma referência conhecida), não um recetor/resolvedor — uma execução sem ruído reproduz a geometria mais as correções a nível submilimétrico (consulte scenarios/gnss-sim-raim.toml).
Um cenário jamming modela a interferência de RF como um balanço de ligação: um [jammer] (posição ECEF, power_dbw de emissão, tipo) eleva a relação jammer-sinal num [receiver] que observa um [constellation] Walker. A partir da geometria (perda de percurso em espaço livre e ganho da antena de receção por direção) calcula o J/S de cada satélite, o C/N₀ efetivo através da equação anti-jam padrão (ganho de processamento de desespalhamento × o fator de separação espetral Q; Kaplan & Hegarty §9,4), e sinaliza a perda de bloqueio abaixo de um limiar de seguimento configurável — comunicando uma figura de mérito availability_under_jamming. Um jammer de banda larga de 10 W a 1 km nega totalmente o recetor (J/S ≈ 72 dB); o mesmo jammer a 100 km apenas degrada as ligações (consulte scenarios/jamming-demo.toml).
Um cenário sweep executa um estudo de compromissos: varia um parameter (threshold_ns, duration_s, quantum_q_wf ou classical_q_wf) de start a stop ao longo de steps pontos numa scale lin ou log, regista uma metric (por exemplo holdover_s) para ambos os relógios e traça as duas curvas. O cenário de base vai em [base] (consulte scenarios/sweep-clock-stability.toml).
Um cenário sweep-nd generaliza isto para qualquer pacote e qualquer número de eixos: varia chaves TOML com pontos de um cenário [base] (de qualquer kind) sobre o produto cartesiano de [[axes]], volta a executar cada nó da grelha e regista metrics dadas como caminhos JSON com pontos no resultado (por exemplo classical.fom.holdover_s). Funciona para todos os pacotes porque opera na fronteira entre TOML e resultado; as execuções nativas avaliam a grelha em paralelo (sem dependências adicionais, o wasm recorre ao modo sequencial) e a saída é determinista e por linhas (consulte scenarios/sweep-nd-inertial.toml).
Um cenário orbit deriva a cronologia [gnss] a partir da geometria em vez de a redigir — indique uma órbita [user], uma [constellation], uma mask_deg de elevação e os dois blocos de relógio. Comunica também a exatidão de posição a partir da geometria dos satélites; o sigma_uere_m opcional (erro de distância equivalente do utilizador a 1 sigma, predefinição 1 m) converte a diluição de precisão de posição num sigma de posição. A órbita do utilizador pode ser tornada excêntrica com eccentricity e argp_deg, e j2 = true acrescenta a deriva secular do achatamento da Terra (consulte scenarios/orbit-molniya.toml). A constelação pode, em alternativa, ser real: dê a [constellation] um bloco tle de conjuntos de elementos de duas linhas e os satélites são lidos a partir dele (consulte scenarios/orbit-real-tle.toml). Acrescente um ou mais blocos [[constellations]] para multi-GNSS (por exemplo GPS + Galileo; consulte scenarios/orbit-multignss.toml):
kind = "orbit"
seed = 7
threshold_ns = 5.0
mask_deg = 10.0
sigma_uere_m = 1.0 # optional; position sigma = position-DOP * this
[time]
step_s = 60.0
duration_s = 86400.0
[user] # spacecraft (altitude in km, angles in deg)
altitude_km = 8000.0
inclination_deg = 0.0
[constellation] # Walker-delta GNSS (GPS-like)
altitude_km = 20180.0
inclination_deg = 55.0
planes = 6
sats_per_plane = 4
phasing_f = 1.0
[clock_quantum] # ... as above
[clock_classical] # ... as above
Os tipos de PNT alternativo sem GPS navegam sem qualquer GNSS, fazendo corresponder uma sequência de campo medida a um mapa através de um filtro de partículas. Um cenário gravity-map percorre um trajeto num campo de anomalias gravíticas em harmónicos esféricos e recupera-o a partir da leitura de um gravímetro de átomos frios (scenarios/gps-denied-gravity-nav.toml); um cenário terrain-nav faz o mesmo face a um DEM de elevação SRTM (TERCOM/SITAN, scenarios/terrain-nav.toml); e um cenário combined-altpnt funde gravidade + magnético IGRF + terreno num único filtro (scenarios/combined-altpnt.toml).
Um cenário lunar-integrity avalia PNT cislunar: executa uma passagem de nível de proteção ARAIM no polo sul lunar face a um conjunto de retransmissores LunaNet/LNIS e comunica com honestidade a lacuna de integridade — um σ_URE lunar de ~30 m leva o nível de proteção muito acima de um limite de alerta de 50 m, pelo que o serviço fica indisponível sob regras de integridade ao estilo da aviação (scenarios/lunanet-araim.toml).
Um cenário lunar-time-offset comunica a taxa relativista do relógio Terra–Lua — a base de uma escala de Tempo Coordenado Lunar (LTC/TCL). Uma identidade pós-newtoniana a partir de princípios fundamentais soma a diferença de potencial próprio (o potencial do geoide L_G da IAU menos o potencial próprio à superfície da Lua) e o termo cinético da Lua (Doppler de segunda ordem) numa taxa secular de ≈ 57 µs/dia, comunicada com a banda publicada de 56–59 µs/dia; dá também o desvio LTC−TT acumulado ao longo de um horizonte e um conjunto de variância inversa (um relógio de papel lunar). MODELLED — o valor principal é dependente da referência (geoide terrestre versus selenoide lunar, janela de média), razão pela qual se comunica uma banda e não um único número certificado (scenarios/lunar-time-offset.toml).
Veja scenarios/ para pelo menos um exemplo prático de cada tipo de cenário (92 tipos, 193 ficheiros .toml de cenário + 1 manifesto de suíte — vários tipos de cenário trazem mais de um exemplo). Nem todo tipo de cenário tem um ficheiro com o seu nome: lunar-integrity → scenarios/lunanet-araim.toml e gravity-map → scenarios/gps-denied-gravity-nav.toml são dois de vários casos assim. Liste os tipos de cenário despacháveis a qualquer momento com os erros de cargo run -- --validate <file>, o list_kinds() do Python ou a ferramenta list_scenario_kinds do MCP.
Saída
Saída#
O artefacto de resultado é JSON versionado e autodescritivo: séries temporais por passo, as figuras de mérito pontuadas, as especificações dos modelos ativos (com proveniência), a semente, um hash do cenário — para que qualquer gráfico possa ser reproduzido a partir do ficheiro — e, para cada relógio, uma adev_curve ([{tau_s, adev, n_samples, noise, edf, ci_lo, ci_hi}]): o desvio de Allan sobreposto em tempos de média espaçados por oitavas — a forma habitual de ler a estabilidade de um relógio — agora com uma banda de confiança de 95% específica do tipo de ruído por ponto (o tipo de lei de potência do registo é identificado a partir do seu declive de Allan modificado, e o intervalo χ² usa os graus de liberdade efetivos correspondentes do NIST SP 1065). O playground no navegador renderiza-o como um gráfico log-log "Clock stability (ADEV)". (MDEV, TDEV e HDEV estão disponíveis como estimadores da biblioteca; a curva de resultado exportada é o ADEV sobreposto.) Cada campo, com unidades e uma indicação da origem, está documentado em docs/SCHEMA.md.
Cada gráfico é autodescritivo. O playground no navegador, a exportação *.chart.svg da CLI e o painel de resultados HTML (HyperText Markup Language) carimbam todos cada imagem de gráfico com um rodapé que diz Kshana v<version> · scenario <hash> · kshana.dev. O scenario <hash> são os primeiros 12 carateres hexadecimais do hash do cenário da execução — um resumo SHA-256 (o Secure Hash Algorithm de 256 bits) sobre a definição canónica do cenário (semente, limiares, parâmetros dos modelos, janelas GNSS, …); os relatórios de integridade e lunares, que não trazem hash próprio, recorrem a um SHA-256 do código-fonte do cenário. É a mesma impressão digital mostrada no resumo de uma linha e no JSON do resultado, pelo que um gráfico guardado ou colado traz sempre a sua versão, o cenário exato que o produziu (para reprodução bit a bit) e a origem — altere qualquer entrada e o hash muda.
As figuras de mérito seguem as figuras de mérito operacionais habituais de PNT:
| Figura de mérito | Como o Kshana a calcula |
|---|---|
| Desempenho de temporização (pacotes de relógio/órbita) | RMS do erro de fase do relógio + percentil 95 durante a falha, em nanossegundos (timing_rms_ns) — uma métrica de temporização, não de posição |
| Desempenho de posicionamento (pacotes inercial/híbrido) | RMS do erro de posição 1-DOF + percentil 95 durante a falha, em metros (pos_rms_m); eixo único. Uma execução única é sinalizada com monte_carlo: false; defina runs = N para um conjunto Monte Carlo que comunica, para cada métrica, a média, a dispersão e o IC (intervalo de confiança) de bootstrap a 95%. Continua a não ser uma exatidão 2-D CEP/2DRMS (erro circular provável / duas vezes a raiz quadrada média da distância) nem ponderada por DOP (estas exigem o modelo de 3 eixos — plano de desenvolvimento) |
| Autonomia | duração do holdover — tempo dentro da especificação após a perda de GNSS (quantizado pela grelha: um limite inferior) |
| Resiliência | declive de crescimento do erro durante a falha |
| Disponibilidade | fração da execução com uma solução de posição dentro da especificação |
| Integridade | autoconsistência do filtro — fração das amostras de falha cujo erro se mantém dentro do próprio limite de k sigma do filtro de Kalman. Não é um valor de integridade HPL/VPL/RAIM de aviação (consulte docs/INTEGRITY.md) |
| Segurança | limite analítico de detetabilidade de spoofing a partir da estabilidade do relógio — quão pequeno/lento um spoof de tempo poderia ser sinalizado por um monitor de consistência de um único relógio. Só tem significado com um ataque configurado; não é um detetor RAIM multissatélite |
Não conhece estes termos? Cada um está definido em linguagem simples no glossário.
Estrutura do repositório
Estrutura do repositório#
kshana/
├── src/ # the kshana core crate (library + CLI)
│ ├── api.rs · main.rs · lib.rs # typed dispatch (92 kinds) + CLI + crate root
│ ├── python.rs · wasm.rs # optional PyO3 / wasm-bindgen bindings
│ ├── types.rs · scenario.rs · allan.rs # shared core (time grid, GNSS timeline, Allan)
│ │
│ ├── models.rs · estimator.rs · kalman.rs # Pack 1 — clock holdover + integrity
│ ├── security.rs · detection.rs · spoof.rs · spoof_monitors.rs # spoof detection
│ ├── filter_health.rs · fom.rs · fom_label.rs · report.rs · chart.rs · run.rs # health · FoM scoring + labelling · output
│ ├── suite.rs · study.rs # scenario suites + aggregated multi-scenario study artifacts (`--study`)
│ ├── inertial/ # Pack 2 — strapdown INS (attitude · mechanization · imu_errors · quantum_imu)
│ ├── timetransfer.rs · timetransfer_adv.rs · timegeo.rs # Pack 3 — TWSTFT/CV/PPP/optical, Sagnac
│ ├── hybrid.rs · ensemble.rs · sweep.rs # Pack 4 — fused PNT, Monte-Carlo, trade sweeps
│ │
│ ├── timescales.rs · jd2.rs · ephem.rs # time systems, two-part JD, Sun/Moon ephemeris
│ ├── precession.rs · nutation.rs · cio.rs # IAU 2006/2000A precession-nutation + CIO GCRS↔ITRS
│ ├── frames.rs · *_data.rs # TEME↔ECEF + generated nutation/CIO/EGM2008/IGRF tables
│ │
│ ├── orbit.rs · sgp4.rs · tle.rs · walker.rs # geometry, SGP4/SDP4, TLE, Walker design
│ ├── propagator.rs · forces.rs · gravity_sh.rs · integrator.rs # Cowell + perturbations (EGM2008 d/o70, GR) + RK4/DOPRI
│ ├── maneuver.rs · batch_ls.rs · orbit_determination.rs # burns/Lambert/porkchop, Gauss-Newton, OD
│ ├── cr3bp.rs · lunar.rs · lunar_frame.rs · lunar_od.rs # Earth–Moon CR3BP + halo/NRHO STM corrector, cislunar/LunaNet ARAIM, MCI↔MCMF, lunar OD
│ ├── lunar_time.rs · lunar_vlbi.rs · lunar_combination.rs · lunar_frame_realise.rs · lunar_service.rs · lunar_dpnt.rs · lunar_interop.rs # tiers per piece in the matrix lunar PNT suite — LTC time · geodetic VLBI · joint OD+clock · frame realisation · Moonlight service-volume · differential PNT · LunaNet/IOAG interop export
│ ├── body.rs · mars_frame.rs · ephem_provider.rs · radiometric.rs · ccsds_tdm.rs # deep-space: multi-body · Mars frame · ephemeris seam · radiometric obs + CCSDS-TDM
│ ├── deepspace_od.rs · clock_state.rs · mars_atmos.rs · mars_pnt.rs · linkbudget.rs · gse_sim.rs # SRIF OD · onboard clock · Mars drag · relay-PNT · link budget · GSE sim
│ │
│ ├── fusion/ # GNSS/INS — EKF · UKF · tightly_coupled(17) · coupled · closed_loop
│ ├── raim.rs · sbas.rs # RAIM/ARAIM HPL/VPL, SBAS DO-229E PLs + L1/L5 iono-free
│ ├── gnss_sim.rs · ionex.rs · pvt.rs · jamming.rs # measurement domain · ionosphere maps · single-point positioning · jamming
│ ├── navsignal.rs # nav-signal PSD (BPSK-R/BOC) · spectral-separation → anti-jam Q · DLL code-tracking jitter · multipath envelope
│ ├── gravimeter.rs · igrf.rs · mapmatch.rs · particle_filter.rs · altpnt/ # gravity/magnetic/terrain alt-PNT
│ ├── rinex.rs · rinex_obs.rs · glonass.rs · sp3.rs · oem.rs · omm.rs · permalink.rs # interop formats
│ ├── launch.rs · reentry.rs · eo_payload.rs · attitude_budget.rs · passes.rs · space_packet.rs # mission-analysis budgets + CCSDS Space Packet
│ ├── space_weather.rs · holdover.rs · tpl.rs # space-weather environment · GNSS-denied clock-holdover calculator · conditional Timing Protection Level (under spoofing)
│ ├── resilience/ # framework-aligned PNT-resilience scoring + decision-instability study (RPCF · Dirichlet · Kendall-τ · diversity collapse · assurance report)
│ ├── impairment_eval.rs · impairment_study.rs · impairment_ml.rs · eval_stats.rs # Machine-learning RF-impairment eval testbed · optimism-gap study · LR/MLP detectors · bootstrap/DeLong/Spearman stats
│ ├── sdr.rs · realdata/ # software-defined-receiver front end (IQ/IF → E/P/L taps → SQM) + real-data ingest adapters (RINEX · UBX · GnssLogger · JammerTest · Yunnan · SatGrid)
│ ├── crossover.rs · quantum_trade.rs · frugal.rs · integrity_impact.rs # quantum-vs-classical crossover map · PNT trade · cost-per-coverage ROI · integrity impact
│ ├── quantum_devices.rs · quantum_faults.rs · quantum_nav_od.rs · qtrade.rs · timetransfer_chain.rs · representativeness.rs # Quantum-Enabled PNT demonstrator — device error models · fault catalogue · GNSS-free quantum OD · unified trade harness · quantum time-transfer chain · representativeness / gaps-to-flight ledger
│ ├── interchange.rs · verification.rs # KIF artifact envelope · machine-checked verification matrix
│ └── bin/crossover_study.rs · bin/validation_report.rs # crossover-study artifact generator · release validation-summary HTML
│
├── mcp/kshana-mcp/ # standalone, workspace-EXCLUDED crate — the MCP server (+ Dockerfile, server.json)
├── ide/jetbrains/ # standalone Kotlin/Gradle IntelliJ-Platform plugin
├── xval/ # standalone, workspace-EXCLUDED external cross-checks: anise-{frames,lunar-od,mars-od,service-geometry} (Rust ANISE/SPICE DE440) + orekit-passes (Java Orekit)
│
├── examples/ # reproducible study generators: tpl_jammertest · resilience_report · optimism_study + real-data probes (jammertest_probe · yunnan_probe · satgrid_probe · texbat_probe · ingest_realdata)
├── paper-artifacts/ # byte-deterministic study artifacts, regenerable from examples/ (optimism-study.json · resilience-study.json); raw datasets stay out
├── scenarios/ # one cited .toml per kind + geometry-driven + GPS-denied
├── scripts/ # reproducibility + repo-hygiene + SBOM guards
├── docs/ # CONCEPTS, ARCHITECTURE, CAPABILITY, VALIDATION, PROVENANCE, GLOSSARY, …
├── web/ # the WebAssembly playground + kshana.dev site
├── tools/ # table generators (EGM2008 · IGRF · nutation · CIO) + fetch_tles.sh
├── .github/workflows/ # ci · release · publish · wheels · pages · mcp-publish · jetbrains-plugin · frame-xval
├── pyproject.toml # Python packaging (maturin)
├── CHANGELOG.md # Keep a Changelog + SemVer
└── CITATION.cff · ROADMAP.md · CONTRIBUTING.md · SECURITY.md
FAQ (perguntas frequentes)
FAQ#
Preciso de compreender física quântica para usar isto? Não. Se sabe executar uma linha de comandos, sabe executar o Kshana. Comece pelo guia introdutório em linguagem simples; consulte os termos no glossário.
É um projeto de hardware quântico ou software de voo? Não. É um simulador de desempenho. A fidelidade do hardware quântico vem de modelos de erro publicados, não desta ferramenta. Consulte O que é / não é.
Os resultados quânticos são realistas, ou marketing? Cada parâmetro está citado a uma folha de especificações ou a um artigo, cada modelo é validado face a uma relação de manual, e a maturidade está rotulada com honestidade em VALIDATION.md — incluindo que nenhum relógio ótico de estrôncio voou. O motor é neutro: quântico e clássico são o mesmo código com números publicados diferentes.
Posso confiar que duas execuções concordam? Sim — as execuções são deterministas: scenario + seed + engine version → bit-identical output, garantido por scripts/check-reproducible.sh.
Posso usá-lo a partir de Python ou num navegador? Sim — consulte Instalar: os exemplos de Python e WebAssembly estão por baixo. Ambos chamam o mesmo motor.
Como modelo o meu próprio sensor? Escreva um cenário .toml com os valores publicados do seu sensor nos campos provenance. Consulte Formato de cenário e os exemplos em scenarios/.
É gratuito para uso comercial? Sim — sob a AGPL-3.0, incluindo em contextos comerciais, desde que respeite o copyleft da AGPL (em especial: se modificar o Kshana e o oferecer através de uma rede, tem de oferecer a esses utilizadores o seu código-fonte modificado). Se isso não lhe convier — por exemplo, se precisar de incorporar o Kshana num produto proprietário ou de executar um serviço de rede fechado — está disponível uma licença comercial da Ashforde® OÜ; consulte LICENSING.md e Apoio.
Resolução de problemas
Resolução de problemas#
cargo build falha numa cadeia de ferramentas antiga. O Kshana precisa de Rust ≥ 1,88. Atualize com rustup update.
A compilação da extensão Python falha na ligação no macOS (Undefined symbols … _Py…). Uma extensão Python resolve os seus símbolos no momento do carregamento. O maturin define automaticamente a opção de ligação correta — use maturin develop --features python em vez de um simples cargo build.
A compilação do Python queixa-se de que o interpretador é mais recente do que o PyO3 conhece. Defina PYO3_USE_ABI3_FORWARD_COMPATIBILITY=1 (as wheels abi3 são compatíveis para a frente entre versões do CPython).
A compilação WebAssembly não encontra o alvo. Instale-o uma vez com rustup target add wasm32-unknown-unknown e depois wasm-pack build --target web -- --features wasm.
Onde foi parar a minha saída? Cada execução escreve <scenario>.result.json, <scenario>.chart.svg, <scenario>.report.html e <scenario>.report.json junto do .toml de entrada, e também <scenario>.table.csv para os tipos que publicam uma tabela. Todos eles são ignorados pelo git por conceção.
Versionamento e publicações
Versionamento e publicações#
O Kshana segue o Versionamento Semântico. Enquanto for anterior à 1.0, o esquema público de cenário/resultado ainda pode mudar; as alterações incompatíveis são assinaladas explicitamente no CHANGELOG.md. Cada resultado é reproduzível a partir de scenario + seed + engine version.
Cada tag vX.Y.Z publica automaticamente todos os canais, por uma única ordem — a bateria de testes completa executa-se primeiro no commit etiquetado, nada é publicado até ela passar, e depois o pipeline verifica que cada registo serve realmente a nova versão (docs/RELEASING.md). Os canais:
| Canal | Instalar / obter | Conteúdo |
|---|---|---|
| crates.io | cargo install kshana · kshana = "0.35" |
Biblioteca Rust + CLI |
| crates.io | cargo install kshana-mcp |
o servidor MCP |
| PyPI (Python Package Index) | pip install kshana |
wheels abi3 (Linux/macOS/Windows) + sdist (distribuição de código-fonte) |
| npm | npm install kshana |
módulo WebAssembly + invólucro JS |
| ghcr.io | docker run -i ghcr.io/ashfordeou/kshana-mcp |
imagem OCI (Open Container Initiative) multiarquitetura — sem necessidade de cadeia de ferramentas |
| npm | npx -y kshana-mcp@0.40.0 |
lançador: descarrega o binário da versão publicada, verifica SHA256SUMS, executa-o |
| PyPI | uvx kshana-mcp==0.40.0 · pipx run kshana-mcp==0.40.0 |
o mesmo lançador para Python |
| Homebrew · Scoop · winget | brew install ashfordeOU/tap/kshana-mcp · scoop install kshana-mcp · winget install AshfordeOU.KshanaMcp |
o binário kshana-mcp, gerado a partir do SHA256SUMS de cada versão publicada |
| registo MCP oficial | descoberto automaticamente pelos clientes MCP | io.github.ashfordeOU/kshana-mcp (imagem OCI, pacotes npm e PyPI) |
| JetBrains Marketplace | IDE → Plugins → pesquisar "Kshana" | o plugin de IDE Kshana — PNT simulator |
| Zenodo | DOI | um arquivo citável de cada versão publicada |
| kshana.dev | abrir num navegador | Kshana Studio, a aplicação WebAssembly no navegador, reconstruída a partir de cada tag de versão (pelo que a versão que mostra é a versão que executa) |
A versão do crate / imagem / registo do servidor MCP acompanha o motor (inclui a biblioteca); o plugin JetBrains tem versões independentes (invoca o binário kshana que tem instalado).
Roteiro
Roteiro#
Consulte ROADMAP.md para o plano de desenvolvimento por fases, CHANGELOG.md para o histórico de versões publicadas e docs/CAPABILITY.md para o plano por capacidade. A ordem de prioridade é: primeiro, evidências de temporização e holdover para infraestruturas críticas (máscaras de telecomunicações, holdover mais longo com envelhecimento e ruído flicker, ingestão de dados de relógio medidos); em segundo lugar, o método neutro de compromisso quântico versus clássico (resultados rotulados MODELLED até que os dados medidos de um parceiro os promovam); e navegação lunar / cislunar e de espaço profundo mantida, não ampliada como prioridade. A redução de referencial de precisão ITRF está agora concluída — a cadeia GCRS↔ITRS completa IAU 2006/2000A baseada no CIO (movimento polar + nutação sub-arcsegundo), validada bit a bit face ao SOFA/ERFA e verificada de forma cruzada e independente face ao ANISE (SPICE em Rust puro) a ≤ 3,6 m em órbita GNSS. Os itens a curto prazo incluem a fusão de fase da portadora fortemente acoplada e a disponibilização do navegador GNSS/INS fraca e fortemente acoplado em mais pacotes; o motor de navegação radiométrica de espaço profundo / Marte chegou na v0.17.0 (validado por simulação). A camada de física quântica é um item P2: o acelerómetro CAI é agora simulado a partir de princípios fundamentais (fase de Mach–Zehnder, ruído de projeção, decaimento do contraste, acoplamento de vibração), enquanto os sensores de relógio/transferência de tempo continuam a ser orientados por coeficientes publicados de Allan/orçamento de ruído. A conversão TEME↔ECEF baseada em GMST, os sistemas de tempo com segundos intercalares do IERS (UTC/TAI/TT/UT1), a propagação de órbitas SGP4/SDP4 (v0.7.0, validada face aos vetores AIAA 2006-6753) e o pacote de fusão gnss-ins executável foram todos entregues, e a velocidade inercial é exposta a jusante. Chegaram a main: um detetor estocástico ativo de spoof de tempo (teste de energia de Neyman–Pearson / χ²₁ com P_fa/P_md por Monte Carlo e uma FoM de Segurança de 1−P_md), um modelo de jamming por balanço de ligação (J/S → C/N₀ efetivo → perda de bloqueio), disponibilidade multiconstelação, um orçamento de erro de IMU de eixo único (1-DOF), dois estimadores de Kalman independentes (relógio + posição) comunicados como uma FoM combinada, geometria real de constelações a partir de TLE, um relatório HTML de resultados, disponibilidade GNSS derivada da geometria e diluição de precisão a partir de órbitas keplerianas com excentricidade e deriva J2, bandas de confiança Monte Carlo, varrimentos de parâmetros de estudos de compromissos, um playground WebAssembly no navegador e ligações opcionais para Python (PyO3) e WebAssembly (wasm-bindgen).
Contribuir
Contribuir#
Consulte CONTRIBUTING.md. Em resumo: os testes passam (cargo test), os dois scripts de salvaguarda passam, Conventional Commits, e uma entrada [Unreleased] em CHANGELOG.md para cada alteração visível ao utilizador. A participação rege-se pelo nosso Código de Conduta. Para comunicar um problema de segurança, consulte a Política de segurança — não abra um problema público para vulnerabilidades.
Documentação: todos os documentos e a quem se destinam
Documentação#
| Documento | Para quem | O que contém |
|---|---|---|
| Introdução aos conceitos | todos, comece aqui | o que o Kshana faz e porquê, do zero até à física |
| Kshana Studio | todos | execute o motor no seu navegador (WebAssembly); notas de compilação e implementação |
| Glossário | todos | definições em linguagem simples de cada termo |
| Tipos de cenário | todos | cada tipo que o motor despacha: o que faz, os seus campos, um comando de exemplo, as suas linhas do registo e o gráfico que o motor escreve para ele |
| Dados de parceiros | laboratórios e fabricantes com dados medidos | que linhas MODELLED poderia promover um registo medido de relógio ou de IMU, os formatos, como um envio é verificado (kshana partner check), pontuado e creditado |
| Arquitetura | programadores / revisores | mapa de módulos, pipeline do motor, despacho e diagramas |
| Estado da validação | revisores / quem cita | o que está validated versus not modeled, com evidências |
| Matriz de verificação | revisores / quem cita | o registo de evidências verificado por máquina — cada linha de capacidade com o seu estado, módulo, teste e referência independente externa, gerado a partir de src/verification.rs |
| Justificação das capacidades modeladas | revisores | porque é que cada linha Modelada não tem referência independente externa, indicado linha a linha |
| Proveniência | revisores / quem cita | cada parâmetro de sensor, modelo e conjunto de dados rastreado até à sua origem publicada, numa única tabela citável |
| Reprodutibilidade e proveniência | revisores / empacotadores | garantias de determinismo, fixação de valores de referência, SBOM (software bill of materials), proveniência de compilação |
| Etiquetas de plataforma das wheels | empacotadores | a matriz de wheels abi3 de Python — que etiqueta de plataforma pip install kshana resolve |
| Posicionamento | avaliadores | onde o Kshana se situa face ao RTKLIB/gLAB (complementar), e o nível de instalação zero no navegador |
| Kshana Pro | avaliadores / gestores de programas | o que a sobreposição proprietária Pro acrescenta sobre o mesmo motor: otimizador de projeto, incerteza e sensibilidade, dossiê de missão, vigilância de campanhas, coexistência espetral, serviço de tarefas nas instalações do cliente, rastreabilidade de requisitos; o que cada um produz e o que não faz |
| Relatório técnico · Artigo JOSS | revisores / quem cita / avaliadores | o artigo de investigação alargado completo — arquitetura, modelos por domínio, validação, casos de estudo e limitações — mais a submissão concisa ao JOSS (Journal of Open Source Software) |
| Validação do SGP4 | revisores / quem cita | concordância com a referência AIAA 2006-6753 (666 estados, ~4 mm) e uma comparação direta com o crate independente sgp4 (concordam a nível submicrométrico / 4,12 mm) |
| Validação do modelo de forças | revisores / quem cita | o motor de forças completas (src/precise_od.rs) ajustado a efemérides de agências — metodologia e resíduos validados |
| Guia de TLE reais | utilizadores | conduzir cenários com TLE reais de constelações do Celestrak / Space-Track (em vez do conjunto Walker sintético incluído) |
| FoM de integridade | avaliadores | o que significam as figuras integrity / security — e o que não são face ao HPL/VPL de aviação |
| Referência ARAIM | revisores / integradores | a implementação aberta de nível de proteção ARAIM MHSS — a projeção do enviesamento nominal b_k, σ_URA versus σ_URE e as probabilidades a priori dos modos de falha |
| Modelos quânticos · detalhes | revisores | a camada de física de interferómetros de átomos frios, e onde os coeficientes ainda são consultados em tabelas |
| Compliance | avaliadores | Âmbito dos algoritmos DO-229E / DO-316, e o que não é uma afirmação de aderência à norma |
| Confiança marítima | marinheiros / integradores | a pontuação de confiança GNSS de 0-100 para o NMEA de uma embarcação, os seus monitores e os seus limites (consultivo, não é um equipamento de navegação homologado) |
| Fluxos NMEA de formação | formadores marítimos | NMEA sintético de ponte com jamming e spoofing programados e um registo do instrutor; apenas texto, nunca para navegação em tempo real |
| Mapa de interferência | analistas / marinheiros | onde aeronaves e navios comunicaram dados de navegação degradados, e quanto de um percurso isso afeta |
| Pacotes de evidências | operadores / seguradoras | registos técnicos assinados de um evento de confiança e como verificar um |
| Telemetria de confiança | equipas de operações / segurança | o fluxo de confiança como métricas Prometheus, eventos SIEM e OpenTelemetry, com um painel Grafana |
| Integrações marítimas | proprietários de embarcações / integradores | o plugin Signal K, o modo de barreira do OpenCPN e a compilação de referência |
| Test bench | fabricantes de recetores | reproduzir um cenário exportado através de um simulador de laboratório e pontuar o registo do recetor |
| Mapeamento de compliance | avaliadores | quadros públicos de resiliência mapeados para as saídas do Kshana, com fontes e lacunas; kshana compliance-report |
| Cadernos interativos | utilizadores | tutoriais executáveis com o respetivo texto renderizado |
| Normas e interoperabilidade | integradores | os formatos de intercâmbio GNSS / dinâmica de voo / agências que o Kshana lê e escreve (RINEX, SP3, CCSDS OEM/OMM/TDM/Space-Packet, …) |
| Fusão de PNT em LEO | utilizadores / avaliadores | posicionamento, navegação e temporização fundidos MEO + LEO: Doppler, pseudodistância conjunta, convergência de PPP, 5G NTN, cobertura polar e transferência de tempo em LEO sobre qualquer constelação; as predefinições opcionais e as suas fontes públicas |
| Campanhas | utilizadores / avaliadores | composição de cenários: cronologias de missão encadeadas, varrimentos de parâmetros, conjuntos Monte Carlo e execuções de condição partilhada, com as identidades de composição que os testes fixam |
| Catálogo de cenários | utilizadores / integradores | cada tipo despachável com os seus campos TOML obrigatórios e opcionais — gerado a partir de api::list_scenario_kinds() |
| Esquema de resultados | integradores | cada campo do JSON de resultado, com unidades e uma indicação da origem |
| API Python | utilizadores de Python | a superfície de ligação PyO3 — chamar o motor, os tipos de cenário/resultado e exemplos |
| Afirmações versus realidade | revisores | o registo de resolução de afirmações exageradas + a salvaguarda da CI (tests/no_overclaims.rs) que o mantém resolvido |
| Roteiro | todos | o plano de desenvolvimento por fases — o que foi entregue e o que se segue |
| Servidor MCP · Plugin JetBrains | agentes / utilizadores de IDE | executar o Kshana a partir de um assistente de IA ou de um IDE JetBrains |
| Guia para agentes · Superfícies | agentes / integradores | que ferramenta responde a que pergunta, o que guardar com cada resposta; onde cada capacidade é acessível (CLI, Rust, Python, WASM, MCP, plugin, JetBrains, notebooks) e porque é que uma célula é N/A |
| Registo de alterações | todos | histórico de versões publicadas (Keep a Changelog + SemVer, Versionamento Semântico) |
| Contribuir | contribuidores | compilação, salvaguardas, disciplina de testes/citações, DCO (Developer Certificate of Origin) |
| Governação | contribuidores / comunidade | como o Kshana é governado — quem decide, como, e a fronteira entre aberto e fechado |
| Código de Conduta | comunidade | conduta esperada (Contributor Covenant) |
| Política de segurança | quem comunica | como comunicar uma vulnerabilidade; nota de dupla utilização |
Referências principais
Referências principais#
Referências independentes de validação e normas — as autoridades externas a que as verificações do Kshana estão ancoradas:
- Vallado, Crawford, Hujsak & Kelso — Revisiting Spacetrack Report #3 (AIAA 2006-6753; dados de teste): o conjunto de verificação SGP4/SDP4 com o qual o Kshana coincide a 4,12 mm, e os exemplos resolvidos de referenciais face aos quais a cadeia TEME→ITRF é verificada.
- IAU SOFA / ERFA — as rotinas de referência de tempo e de referenciais face às quais a nutação IAU 2000A e a redução CIO GCRS↔ITRS são validadas bit a bit.
- Petit & Luzum (eds.) — IERS Conventions (2010), IERS TN (Technical Note) 36 (orientação da Terra, movimento polar e normas de referenciais).
- Riley — Handbook of Frequency Stability Analysis, NIST SP 1065 (relações do desvio de Allan e a série de referência NBS14; NBS = o antigo National Bureau of Standards dos EUA).
- Pedregosa et al. — scikit-learn: Machine Learning in Python, JMLR 12 (2011): as implementações de referência de ROC/AUC, matriz de confusão e precisão/recall/F1 com as quais o banco de ensaio de avaliação de degradações de RF coincide exatamente (
tests/eval_metrics_reference.rs). - Virtanen et al. — SciPy 1,0, Nature Methods 17 (2020):
optimize.nnls,stats.chi2elinalg.expm— as rotinas de referência face às quais o ajuste NNLS da ADEV medida do quantum-trade, as bandas de consistência χ² e a covariância do ruído de processo do relógio de van Loan são validados (tests/scipy_reference.rs). - Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024): usado tanto como estado da técnica aberto (consulte Comparação e estado da técnica aberto abaixo) como referência independente de DOP com a qual o cálculo de GDOP/PDOP/HDOP/VDOP/TDOP coincide a 1e-6 (
tests/dop_reference.rs). - Montenbruck & Gill — Satellite Orbits: Models, Methods and Applications (Springer): os modelos de forças por trás do ajuste do modelo de forças às efemérides precisas de agências.
- Howell — Three-dimensional, periodic, halo orbits, Celestial Mechanics 32(1) (1984), doi:10.1007/BF01358403; Zimovan-Spreen, Howell & Davis — Near rectilinear halo orbits and nearby higher-period dynamical structures, Astrodynamics 6 (2022), doi:10.1007/s42064-021-0125-x (as famílias de halo/NRHO que o corretor diferencial do CR3BP reproduz).
Física de dispositivos e de métodos — as fontes citadas por trás dos modelos de sensores:
- Origlia, Schiller, Bongs et al. — arXiv:1503,08457 (relógio ótico de rede de estrôncio, objetivo orientado para o espaço).
- Oelker et al., Nature Photonics (2019) — doi:10.1038/s41566-019-0493-4 (relógio de Sr de laboratório, 4,8×10⁻¹⁷).
- Templier et al., Science Advances (2022) — arXiv:2209,13209 (tríade de acelerómetros quânticos híbridos).
- Groves, Principles of GNSS, Inertial, and Multisensor Integrated Navigation — tutorial da IEEE AESS (Aerospace and Electronic Systems Society) (repositório University College London Discovery) (crescimento do erro da navegação por estima).
- Giorgetta et al., Nature Photonics 7, 434 (2013) — arXiv:1211,4902; Deschênes et al., Phys. Rev. X 6, 021016 (2016) — APS (American Physical Society) (transferência ótica bidirecional de tempo-frequência; a ligação ótica entre satélites modela o seu orçamento de não reciprocidade a partir destes).
- Betz — Binary Offset Carrier Modulations for Radionavigation, NAVIGATION 48(4) (2001), doi:10.1002/j.2161-4296.2001.tb00247.x (a modulação BOC e a teoria da separação espetral por trás de
src/navsignal.rs). - Kaplan & Hegarty (eds.) — Understanding GPS/GNSS: Principles and Applications (3.ª ed., Artech House, 2017): a equação anti-jam do C/N₀ efetivo e o jitter térmico do seguimento de código do DLL early–late que os modelos de sinal de navegação e de jamming usam.
Comparação e estado da técnica aberto — as ferramentas e levantamentos face aos quais o Kshana se posiciona:
- Humphreys et al. — TEXBAT (a Texas Spoofing Test Battery; ION — Institute of Navigation — GNSS 2012): os parâmetros da bateria de testes de spoofing face aos quais o detetor multicamada é caracterizado.
- González et al. — NaveGo (2017): os perfis abertos e validados de erro de navegação inercial usados como linha de base clássica.
- Iiyama, Casadesús Vila & Gao — LuPNT (ION GNSS+ 2023, Stanford NavLab): simulador aberto de PNT lunar.
- Knowles, Kanhere, Neamati & Gao — gnss_lib_py, SoftwareX 27 (2024), doi:10.1016/j.softx.2024.101811: análise aberta de dados GNSS.
- Li, Zaminpardaz, Kealy & Greentree — Quantum sensors for enhanced positioning and navigation: a comprehensive review, GPS Solutions 30(1):62 (2026), doi:10.1007/s10291-026-02030-y.
- Bertone et al. — Earth and Space Science 8(6) (2021), doi:10.1029/2020EA001454: DO reduzida-dinâmica do GRAIL, o patamar de aceleração empírica que o ajuste do LRO reproduz.