LunaNet Augmented Forward Signal: Codes, Nachrichtenformat und lunanet-afs-check
Kshana implementiert die Spreizcodes und die Nachrichtenschicht des Augmented Forward Signal (AFS) von LunaNet so, wie eine Ausgabe der Spezifikation sie definiert, und prüft sich gegen die gedruckten Tabellen dieser Ausgabe.
Festlegung. LunaNet Interoperability Specification (LNIS) Version 5, Applicable Document 1 Volume A: LunaNet Signal-In-Space Recommended Standard, Augmented Forward Signal (LSIS-AFS) Version 1,0, 29. Januar 2025 (NASA). Abgerufen am 2026-10-18; PDF-SHA-256 986e0795…e61b6 (Herkunft). Eine spätere Ausgabe ist eine andere Festlegung und kann die Codes ändern: Das Dokument kennzeichnet seine Codetabellen mit {LSIS-TBC} und sagt, sie seien „nur zur Erleichterung von Test- und Integrationsarbeiten enthalten“. Jeder Bericht nennt diese Ausgabe.
Hinweis (beratend): Analyseausgabe eines Forschungs- und Ingenieurwerkzeugs, keine typzugelassene Navigationsausrüstung und kein Dienst für die Sicherheit menschlichen Lebens.
Was implementiert ist#
| Schicht | Was | Wo |
|---|---|---|
| AFS-I (Daten) | Gold-Code 2047, auf 2046 Chips zyklisch verkürzt, G2 um eine Chipzahl je PRN verzögert, 1,023 Mchip/s, BPSK(1), 500 Symbol/s, PRN 1 bis 210 | iq::signals::lunanet::afs_i, Signalname lunanet-afs-i |
| AFS-Q (Pilot) | Weil-Code 10230 (die Konstruktion von GPS L1C), gestuft mit einem 4-Chip-Sekundärcode (S0 bis S3) und einem 1500-Chip-Tertiär-Weil-Code (12 s), 5,115 Mchip/s, BPSK(5), keine Daten. afs_q und der Signalname lunanet-afs-q sind die Empfängerreplik, primär x sekundär (8 ms): Das Tertiär-Rahmensynchronisations-Overlay von 12 s ist darin weggelassen, weil Akquisition und Verfolgung nicht gegen eine Replik von 12 s korrelieren. afs_q_tiered ist der volle Code von 12 s |
afs_q, afs_q_with, afs_q_tiered |
| Träger | 2492,028 MHz (LSIS-020) | AFS_HZ |
| Rahmen | SP 68 + SB1 52 + 5880 verschachtelte Symbole = 6000 Symbole = 12 s bei 500 Symbol/s | iq::lunanet_afs |
| SB1 | 9 Bits (FID 2, TOI 7), BCH(51.8), Generator 763 oktal, mit dem 256-Hypothesen-Korrelationsdecoder des Dokuments | sb1_encode, sb1_decode |
| CRC | CRC-24Q, Generator (1+X)P(X) (Anhang H) | crc24q_bits, crc24q_bytes |
| Interleaver | 60 Zeilen x 98 Spalten, zeilenweise geschrieben und spaltenweise gelesen | interleave, deinterleave |
Die beiden Komponenten werden von kshana iq scene, acquire, track und sweep wie jedes andere Signal akzeptiert, sodass eine Aufzeichnung nach AFS-I oder AFS-Q durchsucht (kshana iq acquire --signal lunanet-afs-i) und eine synthetische Szene für Tests von Software-Empfängern erzeugt werden kann. Eine synthetische Szene ist, wie bei jedem anderen Signal, eine Datei für einen Software-Empfänger; nichts hier steuert Funkhardware an.
Was nicht implementiert ist#
- Die LDPC-Kodierung mit Rate 1/2 der Unterrahmen 2 bis 4. Ihre Prüfmatrizen stehen in Anhang 1, einer getrennten Datei, die nicht im PDF steht und nicht mitgeliefert wird. Die Unterrahmen 2 bis 4 werden als undurchsichtige Symbolblöcke der festgelegten Länge geführt und geprüft, und die CRC-24Q-Wörter darin werden nicht verifiziert. Ein Strom, der
lunanet-afs-check symbolsbesteht, ist nicht als Träger gültiger Codewörter nachgewiesen. - Nachrichteninhalt (MSG-G1, MSG-G2, MSG-G4, ...): Das Dokument lässt mehrere Definitionen noch zu schreiben (TBW).
- Codezuweisung je LunaNet-Knoten (Tabelle F-1 ist TBD). Die PRN 1 bis 12 haben vorläufige Testzuweisungen (Tabelle 11).
afs_q(prn)verwendet den Primärcode der PRN n mit dem Sekundärcode S((n-1) mod 4); jenseits von PRN 12 ist das das Muster dieser Implementierung, nicht das des Dokuments.afs_q_withundafs_q_tierednehmen jede Kombination, mit dem Tertiärcode jeder PRN. - Link-Budget, Signal-in-Space-Fehler, Leistungs- und Kohärenzanforderungen (LSIS-100 und folgende).
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>
speclässt die Implementierung gegen die gedruckten Tabellen und Rechenbeispiele des Dokuments laufen (Zielwerte B1 bis B10 der Vorregistrierung) und gibt jeden mit seiner Anzahl und seinem Status aus.--strictbeendet sich mit 1, sofern nicht jeder Zielwert erreicht ist.symbolsliest einen Hard-Decision-Symbolstrom (Text aus0und1; Leerraum wird ignoriert) und prüft das Synchronisationsmuster, die SB1-Dekodierung, FID (nur 0 ist definiert), die TOI-Kontinuität (Fortschreiten um eins modulo 100) und den Rahmenabstand (6000 Symbole). Bei jedem Problem endet es mit 1.generateschreibt einen Teststrom: das Synchronisationsmuster des Dokuments, SB1- und Rahmenlängen, mit Platzhalter-Unterrahmen 2 bis 4 (die alternierende Füllung von LSIS-300, nicht LDPC-kodiert, keine Nachricht). Es sind Symbole zum Testen eines Prüfers oder eines Dekoders, keine Wellenform; Kshana schreibt kein Signal.
Python: lunanet_afs_check_spec, lunanet_afs_check_symbols, lunanet_afs_generate. WebAssembly: dieselben Namen. MCP: lunanet_afs_check (mode spec, symbols oder generate). Plugin: /kshana-lunanet-afs-check. Studio und JetBrains: N/A (SURFACES.md).
Ergebnisse#
In xval/lunanet-afs/PREREGISTRATION.md festgelegte Zielwerte, bevor der Generator existierte; Tests in tests/lunanet_afs_codes.rs.
| Zielwert | Aussage | Ergebnis |
|---|---|---|
| B1 | AFS-I erste und letzte 24 Chips, 210 PRNs | MET, 420 von 420 |
| B1b | der gedruckte G2-Anfangszustand ist der Zustand nach der gedruckten Verzögerung | NOT MET, 0 von 210: Die Behauptung hatte die Richtung falsch. Nachträglich (B1c, nicht vorregistriert): Der gedruckte Zustand ist der Zustand nach 2047 minus der Verzögerung, 210 von 210 |
| B2 | Legendre(10223) entspricht Tabelle D-1 | MET |
| B3 | AFS-Q primär erste und letzte 24 Chips, 210 PRNs | MET, 420 von 420 |
| B4 | Legendre(1499) entspricht Tabelle E-1 und tertiär erste und letzte 24 Chips, 210 PRNs | NOT MET, 420 von 421: Die Legendre-Folge stimmt überein, und 419 von 420 Codespalten stimmen überein. Die letzten 24 für PRN 147 gedruckten Chips (A14850) sind derselbe Wert, der für PRN 151 gedruckt ist, dessen Code der Generator reproduziert; zwei verschiedene Weil-Indizes (607 und 612) ergeben nicht dieselben letzten 24 Chips, daher ist der Eintrag für PRN 147 höchstwahrscheinlich ein Druckfehler im Dokument. Ohne die separate Code-Datei von Annex 3 lässt sich das nicht klären. Durch einen Test festgeschrieben |
| B5 | Sekundärcodes S0 bis S3 entsprechen Tabelle 10 | MET (die eigenen Konstanten des Dokuments) |
| B6 | SB1-Rechenbeispiel aus Abbildung 8 | MET: 0x045 wird zu 0x229F61DBB84A0 kodiert und zu FID 0, TOI 69 dekodiert (ein Beispiel) |
| B7 | CRC-24Q-Prüfwert für 123456789 |
MET: 0xCDE703 (der Katalogwert, außerhalb der Spezifikation) |
| B8 | Rahmenarithmetik | MET |
| B9 | Interleaving, dann De-Interleaving | MET (eine Eigenschaft, MODELLED) |
| B10 | Synchronisationsmuster | MET (68 Symbole; eine Transkriptionsprüfung) |
B1 bis B4 sind VALIDATED gegen die gedruckten Tabellen der zitierten Ausgabe, die das Dokument mit {LSIS-TBC} kennzeichnet. Ein Rundlauf Szene–Erfassung–Verfolgung beider Komponenten erfüllt dieselben Zielwerte wie die anderen Signale (tests/iq_signal_matrix.rs).