LunaNet Augmented Forward Signal: códigos, formato de mensagem e lunanet-afs-check
O Kshana implementa os códigos de espalhamento e a camada de mensagem do Augmented Forward Signal (AFS) do LunaNet tal como uma edição da especificação os define, e verifica-se a si próprio face às tabelas impressas dessa edição.
Fixação. LunaNet Interoperability Specification (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; PDF SHA-256 986e0795…e61b6 (proveniência). Uma edição posterior é uma fixação diferente e pode alterar os códigos: o documento marca as suas tabelas de códigos {LSIS-TBC} e diz que são "incluídas apenas para facilitar os esforços de teste e integração". Cada relatório nomeia esta edição.
Consultivo: resultado de análise de uma ferramenta de investigação e engenharia, não um equipamento de navegação homologado e não um serviço de salvaguarda da vida humana.
O que está implementado#
| Camada | O quê | Onde |
|---|---|---|
| AFS-I (dados) | Código Gold 2047 com ciclo encurtado para 2046 chips, G2 atrasado por um número de chips por PRN, 1,023 Mchip/s, BPSK(1), 500 símbolos/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 recetor, primário x secundário (8 ms): a sobreposição terciária de sincronização de trama de 12 s é deixada de fora, porque a aquisição e o seguimento 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 |
| Trama | SP 68 + SB1 52 + 5880 símbolos entrelaçados = 6000 símbolos = 12 s a 500 símbolos/s | iq::lunanet_afs |
| SB1 | 9 bits (FID 2, TOI 7), BCH(51 8), gerador 763 em octal, com o descodificador 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 |
| Entrelaçador | 60 linhas x 98 colunas, escritas por linha e lidas por coluna | interleave, deinterleave |
Os dois componentes são aceites por kshana iq scene, acquire, track e sweep como qualquer outro sinal, pelo que uma gravação pode ser pesquisada em busca de AFS-I ou AFS-Q (kshana iq acquire --signal lunanet-afs-i) e pode ser criada uma cena sintética para testes de recetores por software. Uma cena sintética, como para qualquer outro sinal, é um ficheiro para um recetor por software; nada aqui controla equipamento de rádio.
O que não está implementado#
- A codificação LDPC de taxa 1/2 das subtramas 2 a 4. As suas matrizes de verificação estão no Anexo 1, um ficheiro separado que não consta do PDF e não está incluído. As subtramas 2 a 4 são transportadas e verificadas como blocos de símbolos opacos do comprimento especificado, e as palavras CRC-24Q no seu interior não são verificadas. Um fluxo que passa em
lunanet-afs-check symbolsnão se mostra conter palavras de código válidas. - Conteúdo das mensagens (MSG-G1, MSG-G2, MSG-G4, ...): o documento deixa várias definições por escrever (TBW).
- Atribuição de códigos por nó LunaNet (a Tabela F-1 está por definir, TBD). Os PRN 1 a 12 têm atribuições de teste provisórias (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 esse é o padrão desta implementação, não do documento.afs_q_witheafs_q_tieredaceitam qualquer combinação, com o código terciário de qualquer PRN. - Orçamento de ligação, erro do 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 face às tabelas impressas e aos exemplos resolvidos do documento (limiares B1 a B10 do pré-registo) e imprime cada um com a sua contagem e estado.--stricttermina com 1 a menos que todos os limiares sejam atingidos.symbolslê um fluxo de símbolos de decisão rígida (texto de0e1; espaços em branco ignorados) e verifica o padrão de sincronização, a descodificação de SB1, o FID (só 0 está definido), a continuidade de TOI (a avançar de um em módulo 100) e o espaçamento de tramas (6000 símbolos). Termina com 1 perante qualquer problema.generateescreve um fluxo de teste: o padrão de sincronização do documento, os comprimentos de SB1 e de trama, com subtramas de substituição 2 a 4 (o preenchimento alternado de LSIS-300, sem codificação LDPC, sem mensagem). São símbolos para testar um verificador ou um descodificador, não uma forma de onda; o Kshana não escreve nenhum sinal.
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 indicados 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 PRN | MET, 420 de 420 |
| B1b | o estado inicial impresso de G2 é 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 fixado antecipadamente): 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 PRN | MET, 420 de 420 |
| B4 | Legendre(1499) é igual à Tabela E-1 e terciário primeiros e últimos 24 chips, 210 PRN | 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, pelo que a entrada do PRN 147 é muito provavelmente um erro de impressão no documento. Não pode ser resolvido sem o ficheiro de códigos separado 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 de SB1 da Figura 8 | MET: 0x045 codifica-se em 0x229F61DBB84A0 e descodifica-se em FID 0, TOI 69 (um exemplo) |
| B7 | valor de verificação CRC-24Q para 123456789 |
MET: 0xCDE703 (o valor de catálogo, fora da especificação) |
| B8 | aritmética de tramas | MET |
| B9 | entrelaçar e depois desentrelaçar | 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 face às tabelas impressas da edição citada, que o documento marca {LSIS-TBC}. Uma ida e volta cena-aquisição-seguimento de ambos os componentes satisfaz os mesmos limiares que os outros sinais (tests/iq_signal_matrix.rs).