Sinal Direto Aumentado LunaNet: códigos, formato de mensagem e lunanet-afs-check
O Kshana implementa os códigos de espalhamento e a camada de mensagem do Sinal Direto Aumentado (AFS) do LunaNet como uma edição da especificação os define, e se confere com as tabelas impressas dessa edição.
Fixação. Especificação de Interoperabilidade LunaNet (LNIS) Versão 5, Documento Aplicável 1 Volume A: LunaNet Signal-In-Space Recommended Standard, Augmented Forward Signal (LSIS-AFS) Versão 1,0, 29 de janeiro de 2025 (NASA). Obtido em 2026-10-18; SHA-256 do PDF 986e0795…e61b6 (proveniência). Uma edição posterior é uma fixação diferente e pode alterar os códigos: o documento marca suas tabelas de códigos como {LSIS-TBC} e diz que elas são "included to facilitate test and integration efforts only". Todo relatório nomeia esta edição.
Consultivo: saída de análise de uma ferramenta de pesquisa e engenharia, não um equipamento de navegação homologado e não um serviço de segurança da vida humana.
O que está implementado#
| Camada | O quê | Onde |
|---|---|---|
| AFS-I (dados) | Código Gold 2047 encurtado ciclicamente para 2046 chips, G2 atrasado por um número de chips por PRN, 1,023 Mchip/s, BPSK(1), 500 símbolo/s, PRN 1 a 210 | iq::signals::lunanet::afs_i, nome do sinal lunanet-afs-i |
| AFS-Q (piloto) | Código Weil 10230 (a construção do GPS L1C) em camadas com um código secundário de 4 chips (S0 a S3) e um código Weil terciário de 1500 chips (12 s), 5,115 Mchip/s, BPSK(5), sem dados. afs_q e o nome do sinal lunanet-afs-q são a réplica do receptor, primário x secundário (8 ms): a sobreposição terciária de sincronização de quadro de 12 s fica fora dela, porque a aquisição e o rastreamento não correlacionam com uma réplica de 12 s. afs_q_tiered é o código completo de 12 s |
afs_q, afs_q_with, afs_q_tiered |
| Portadora | 2492,028 MHz (LSIS-020) | AFS_HZ |
| Quadro | SP 68 + SB1 52 + 5880 símbolos intercalados = 6000 símbolos = 12 s a 500 símbolo/s | iq::lunanet_afs |
| SB1 | 9 bits (FID 2, TOI 7), BCH(51.8), gerador 763 octal, com o decodificador de correlação de 256 hipóteses do documento | sb1_encode, sb1_decode |
| CRC | CRC-24Q, gerador (1+X)P(X) (Apêndice H) | crc24q_bits, crc24q_bytes |
| Intercalador | 60 linhas x 98 colunas, escritas por linha e lidas por coluna | interleave, deinterleave |
Os dois componentes são aceitos por kshana iq scene, acquire, track e sweep como qualquer outro sinal, de modo que uma gravação pode ser pesquisada em busca de AFS-I ou AFS-Q (kshana iq acquire --signal lunanet-afs-i) e uma cena sintética pode ser feita para testes de receptores por software. Uma cena sintética, como para todo outro sinal, é um arquivo para um receptor por software; nada aqui aciona hardware de rádio.
O que não está implementado#
- A codificação LDPC de taxa 1/2 dos subquadros 2 a 4. Suas matrizes de verificação estão no Anexo 1, um arquivo separado que não está no PDF e não é incorporado. Os subquadros 2 a 4 são transportados e conferidos como blocos opacos de símbolos do comprimento especificado, e as palavras CRC-24Q dentro deles não são verificadas. Um fluxo que passa por
lunanet-afs-check symbolsnão está demonstrado conter palavras de código válidas. - Conteúdo da mensagem (MSG-G1, MSG-G2, MSG-G4, ...): o documento deixa várias definições para serem escritas (TBW).
- Atribuição de códigos por nó LunaNet (a Tabela F-1 é TBD). Os PRNs 1 a 12 têm atribuições provisórias de teste (Tabela 11).
afs_q(prn)usa o código primário do PRN n com o secundário S((n-1) mod 4); além do PRN 12 isso é o padrão desta implementação, não o do documento.afs_q_witheafs_q_tieredaceitam qualquer combinação, com o código terciário de qualquer PRN. - Orçamento de enlace, erro de sinal no espaço, requisitos de potência e de coerência (LSIS-100 e seguintes).
kshana lunanet-afs-check#
kshana lunanet-afs-check spec [--json] [--strict]
kshana lunanet-afs-check symbols <file> [--max-sp-errors <n>] [--json]
kshana lunanet-afs-check generate --frames <n> [--toi0 <t>] --out <file>
specexecuta a implementação contra as tabelas impressas e os exemplos resolvidos do documento (limiares B1 a B10 de o pré-registro) e imprime cada um com sua contagem e seu estado.--strictsai com 1 a menos que todos os limiares sejam atingidos.symbolslê um fluxo de símbolos de decisão abrupta (texto de0e1; espaços em branco ignorados) e confere o padrão de sincronização, a decodificação do SB1, o FID (só 0 é definido), a continuidade do TOI (avançando de um em módulo 100) e o espaçamento de quadros (6000 símbolos). Sai com 1 diante de qualquer problema.generategrava um fluxo de teste: o padrão de sincronização do documento, os comprimentos de SB1 e de quadro, com subquadros 2 a 4 provisórios (o preenchimento alternado do LSIS-300, sem codificação LDPC, sem mensagem). São símbolos para testar um verificador ou um decodificador, não uma forma de onda; o Kshana não grava sinal algum.
Python: lunanet_afs_check_spec, lunanet_afs_check_symbols, lunanet_afs_generate. WebAssembly: os mesmos nomes. MCP: lunanet_afs_check (mode spec, symbols ou generate). Plugin: /kshana-lunanet-afs-check. Studio e JetBrains: N/D (SURFACES.md).
Resultados#
Limiares declarados em xval/lunanet-afs/PREREGISTRATION.md antes de o gerador existir; testes em tests/lunanet_afs_codes.rs.
| Limiar | Afirmação | Resultado |
|---|---|---|
| B1 | AFS-I primeiros e últimos 24 chips, 210 PRNs | MET, 420 de 420 |
| B1b | o estado inicial de G2 impresso é o estado após o atraso impresso | NOT MET, 0 de 210: a afirmação tinha a direção errada. A posteriori (B1c, não pré-registrado): o estado impresso é o estado após 2047 menos o atraso, 210 de 210 |
| B2 | Legendre(10223) é igual à Tabela D-1 | MET |
| B3 | AFS-Q primário primeiros e últimos 24 chips, 210 PRNs | MET, 420 de 420 |
| B4 | Legendre(1499) é igual à Tabela E-1 e terciário primeiros e últimos 24 chips, 210 PRNs | NOT MET, 420 de 421: a sequência de Legendre coincide e 419 de 420 colunas de código coincidem. Os últimos 24 chips impressos para o PRN 147 (A14850) são o mesmo valor impresso para o PRN 151, cujo código o gerador reproduz; dois índices de Weil diferentes (607 e 612) não dão os mesmos últimos 24 chips, de modo que a entrada do PRN 147 é muito provavelmente um erro de impressão no documento. Isso não pode ser resolvido sem o arquivo separado de códigos do Anexo 3. Fixado por um teste |
| B5 | os códigos secundários S0 a S3 são iguais à Tabela 10 | MET (as constantes do próprio documento) |
| B6 | exemplo resolvido do SB1 da Figura 8 | MET: 0x045 codifica para 0x229F61DBB84A0 e decodifica para FID 0, TOI 69 (um exemplo) |
| B7 | valor de verificação CRC-24Q para 123456789 |
MET: 0xCDE703 (o valor do catálogo, fora da especificação) |
| B8 | aritmética de quadros | MET |
| B9 | intercalar e depois desintercalar | MET (uma propriedade, MODELLED) |
| B10 | padrão de sincronização | MET (68 símbolos; uma verificação de transcrição) |
B1 a B4 são VALIDATED contra as tabelas impressas da edição citada, que o documento marca {LSIS-TBC}. Uma viagem de ida e volta de cena, aquisição e rastreamento de ambos os componentes passa pelos mesmos limiares que os demais sinais (tests/iq_signal_matrix.rs).