Verstehen Sie die Informationen, die in den XML-Daten des Deep Space Network enthalten sind?

Die Aktivitäten des Deep Space Network der NASA können bequem unter https://eyes.nasa.gov/dsn/dsn.html eingesehen werden, aber wenn Sie Daten in einer roheren XML-Form wünschen, können Sie wie in dieser Antwort beschrieben darauf zugreifen

Unten ist ein kleines Python-Skript, das den XML-Code in eine Liste von Wörterbüchern einliest und als JSON auf der Festplatte speichert.

Die Wörterbücher sind auf der höheren Ebene nach Gericht organisiert, dann nach Raumfahrzeugen pro Gericht.

Frage: Was sind die wahrscheinlichsten Bedeutungen aller Datenfelder, die in den XML-Daten des Deep Space Network enthalten sind?

Dies ist die Beispiel-URL aus der anderen Antwort, die im folgenden Skript verwendet wird: https://eyes.nasa.gov/dsn/data/1365107113.xml

def dictify(r,root=True): # https://stackoverflow.com/questions/2148119/how-to-convert-an-xml-string-to-a-dictionary-in-python/30923963#30923963
    if root:
        return {r.tag : dictify(r, False)}
    d=copy(r.attrib)
    if r.text:
        d["_text"]=r.text
    for x in r.findall("./*"):
        if x.tag not in d:
            d[x.tag]=[]
        d[x.tag].append(dictify(x,False))
    return d

import xml.etree.ElementTree as ET
from copy import copy
import requests, json, pprint

# https://deepspace.jpl.nasa.gov/dsnnow/
# https://eyes.nasa.gov/dsn/dsn.html
# https://space.stackexchange.com/questions/17046/is-there-any-publicly-available-logging-or-wayback-machine-for-dsn-now-activi

N     = 1365107113

url   = "https://eyes.nasa.gov/dsn/data/" + str(N) + ".xml"

r     = requests.get(url)

text  = r.text

a     = ET.fromstring(text)

things = [dictify(x) for x in a]

with open (str(N) + '_XML', 'w') as outfile:
    json.dump(things, outfile)

pp = pprint.PrettyPrinter(indent=1)

for i, thing in enumerate(things):
    print "i = ", i
    pp.pprint(thing)

Hier sind die letzten beiden "Dinge", die dies druckt:

i =  14
{'dish': {'_text': '\n\t\t',
          'azimuthAngle': '16.999969',
          'created': '2013-04-04T07:00:42.036Z',
          'downSignal': [{'dataRate': '2291.963470',
                          'frequency': '8445767679.000001',
                          'power': '-482.579407',
                          'signalType': 'none',
                          'signalTypeDebug': 'IDLE OFF 0 MCD2',
                          'spacecraft': 'RSTS',
                          'spacecraftId': '99'}],
          'elevationAngle': '88.000488',
          'isArray': 'false',
          'isDDOR': 'false',
          'isMSPA': 'false',
          'name': 'DSS43',
          'target': [{'downlegRange': '-1.0',
                      'id': '99',
                      'name': 'RSTS',
                      'rtlt': '-1.0',
                      'uplegRange': '-1.0'}],
          'upSignal': [{'dataRate': '',
                        'frequency': '',
                        'power': '',
                        'signalType': 'none',
                        'signalTypeDebug': '  ',
                        'spacecraft': 'RSTS',
                        'spacecraftId': '99'}],
          'updated': '2013-04-04T07:00:42.036Z',
          'windSpeed': '0.000000'}}
i =  15
{'timestamp': {'_text': '1365107113334'}}

Antworten (2)

Ich brauchte mehrere Tage, um Daten von DSN zu beobachten. Hier ist meine Analyse der Felder aus den XML-Datendateien.

station

  • name: Rufzeichen für die Station.
  • friendlyName: Allgemeiner Name für die Station (Goldstone, Madrid, Canberra).
  • timeUTC: Zeit, zu der dieser Bericht unter Verwendung der koordinierten Weltzeit (Coordinated Universal Time) in Millisekunden (1/1000 Sekunde) seit der Unix-Epoche (1. Januar 1970) aufgetreten ist.
  • timeZoneOffset: Fügen Sie diese Zahl hinzu, timeUTCum die Ortszeit dieser Station zu erhalten, wiederum in Millisekunden seit der Unix-Epoche.

dish

  • name: Kennung des Gerichts. Normalerweise "DSS", gefolgt von zwei Dezimalziffern.
  • azimuthAngle, elevationAngle: Der astronomische Azimut und die Elevation, auf die diese Schüssel derzeit zeigt, in Grad mit einem Dezimalbruch.
  • windSpeed: Die Windgeschwindigkeit um die Schüssel in km/h.
  • isMSPA: Wenn "true", hört die Schüssel auf mehr als ein Ziel (mehrere Raumfahrzeuge pro Aperture).
  • isArray: Wenn "true", ist die Schüssel Teil eines Schüssel-Arrays.
  • isDDOR: Wenn „true“, wird die Schüssel für Delta Differential One-way Ranging verwendet .
  • created, updated: Dateierstellungs- und Änderungszeiten (wovon?), im ISO 8601 -Format.

target

  • name: Das Rufzeichen für das Zielraumschiff.
  • id: Eine dezimale ID-Nummer für jedes Raumfahrzeug. Scheint sequentiell zugewiesen zu werden (beginnend bei 1), als das Raumfahrzeug zur Datenbank hinzugefügt wurde.
  • uplegRange, downlegRange: Geschätzte Entfernung zum und vom Ziel, in km. Sollte gleich sein, es sei denn, es wird ein Array oder DDOR verwendet. Scheint um den Faktor 2 daneben zu liegen.
  • rtlt: Round-Trip-Leuchtzeit in Sekunden. Scheint um den Faktor 2 daneben zu liegen.

upSignal

  • signalType: nonewenn Setup/Teardown/Tracking, carrierwenn nur Trägerfrequenz, datawenn tatsächlich etwas gesendet wird.
  • signalTypeDebug: Unbekannt; für die Programmierer gedacht.
  • power: Leistung des gesendeten Signals, in kW.
  • frequency: Frequenz des gesendeten Signals, in MHz .
  • dataRate: Bits pro Sekunde übertragener Daten.
  • spacecraft: Rufzeichen des anvisierten Raumfahrzeugs.
  • spacecraftId: ID-Nummer des anvisierten Raumfahrzeugs.

downSignal

  • signalType: nonewenn Setup/Teardown/Tracking, carrierwenn nur Trägerfrequenz, datawenn tatsächlich etwas empfangen wird.
  • signalTypeDebug: Unbekannt; für die Programmierer gedacht.
  • spacecraft: Rufzeichen des anvisierten Raumfahrzeugs.
  • spacecraftId: ID-Nummer des anvisierten Raumfahrzeugs.
  • dataRate: Bits pro Sekunde der empfangenen Daten.
  • frequency: Frequenz des empfangenen Signals, in Hz . Beachten Sie die anderen Einheiten und die höhere Genauigkeit als das upSignal; dies wäre nützlich, um den Doppler-Effekt der Bewegung des Raumfahrzeugs zu analysieren.
  • power: Leistung des empfangenen Signals in dBm . Es gab mehrere Fälle, in denen zwei Ziele derselben Schüssel nahezu identische Leistung hatten, außer um einen Wert von 300 versetzt: typischerweise -1xx,xx und -4xx,xx dBm. Daher denke ich, dass 300 als Flag für eine bestimmte Bedingung (die ich noch identifizieren muss) von der Leistung abgezogen werden. Der Code zur Behandlung dieses Werts sollte wie folgt aussehen:
if (power < -300.00)
   power = power + 300.00

Bitte versuchen Sie es, zeichnen Sie die Ergebnisse auf und lassen Sie uns wissen, ob es funktioniert!


Sie werden feststellen, dass die Einheiten nicht konsistent sind. Die Zeit kann in Unix-Zeit oder in ISO 8601 angegeben werden. Die Frequenz kann in Hz oder MHz angegeben werden. Die Leistung kann in kW oder dBm angegeben werden.

Ich hätte Bedenken, dass sich Einheiten in Zukunft ändern könnten oder sich in der Vergangenheit geändert haben. Daher würde ich empfehlen, einen "Sanity Check" der Werte durchzuführen und die Werte entsprechend anzupassen. Häufigkeit zum Beispiel:

if (frequency < 40.0)
    # Gigahertz
    frequency = frequency * 1E9
else if (frequency < 40000)
    # Megahertz
    frequency = frequency * 1E6
# else Hertz

IEEE-Funkbandfrequenzen (aus Wikipedia):

S   2 to 4 GHz  Short wave
C   4 to 8 GHz  Compromise between S and X
X   8 to 12 GHz     Used in WW II for fire control, X for cross (as in crosshair). Exotic.
Ku  12 to 18 GHz    Kurz-under
K   18 to 27 GHz    Kurz (German for "short")
Ka  27 to 40 GHz    Kurz-above
Buchstaben für Frequenzen wurden absichtlich zufällig ausgewählt, um Feinde zu verwirren. "id" des Ziels ist die "universelle" NASA-ID für Raumfahrzeuge, hier ist die Liste: ssd.jpl.nasa.gov/horizons_batch.cgi?batch=1&COMMAND= '*' Uplegrange und Downlegrange unterscheiden sich, wenn sich das Raumschiff schnell bewegt; wenn down < up , kommt s/c näher.

Nachverfolgen

DSN speichert die Daten intern in einem Format namens "TRK-2-34". Es wird im technischen DSN-Hinweis 820-013 beschrieben. Ich habe 15 Artikel gefunden, die sich auf die Verwendung dieses Datenformats beziehen. Zwei dieser Papiere geben ausdrücklich an, dass es sich um ein „internes Dokument“ handelt. Beachten Sie auch diesen Blogbeitrag:

Dies ist ein technischer Artikel über die Verwendung des Deep Space Network (DSN). Ich fange kurz hoch an und tauche tief ein. Sie können die Top-Level-Sachen googeln / wiki. Ich möchte gleich darauf eingehen, wie man von DSN-formatierten Datentypen in Reichweite und Reichweitenrate in Kilometern/Kilometern pro Sekunde übersetzt.

Ich möchte das tun, weil es unnötig schwer für mich war. Nicht wegen der Theorie, sondern wegen des Mangels an Dokumentation oder Anleitung . Ich habe schon früher darüber geschimpft, dass die Vorstellung des DSN von einem zu verkaufenden Auto eine Tüte voller Teile ist, einige Duplikate, einige schlecht, keine Anweisungen.

und

Die Dokumentation zum TRK-2-34-Format ist eigentlich umfassend , erklärt aber nicht, wie man die Teile zusammensetzt, um eine brauchbare Messung zu erhalten

und

Im Allgemeinen ist meine Beschwerde Nr. 1 bei fast allem, was mit dem Betrieb von Raumfahrzeugen zu tun hat, wie unnötig kompliziert alles ist und wie schwierig es ist, sich auf Datenformat, Schnittstellen und Zugriff, sogar Einheiten und Modellierung zu einigen.

und

DSN macht eine schöne Sache, aber sie sind kein öffentliches, gewinnorientiertes Unternehmen. Wenn Sie das DSN verwenden möchten, um Ihr wertvolles Raumschiff zu verfolgen, müssen Sie mit den Spielzeugen spielen, die sie Ihnen geben. Sie benötigen einen halbwegs anständigen A-priori-Zustandsvektor für Ihr Raumschiff, einen Simulator, um ihn zu verbreiten und Geometrie zu extrahieren, einen binären Parser, das TRK-2-34-Handbuch und alle oben aufgeführten Schritte.

https://clarkpatricknewman.wordpress.com/category/nasa/dsn/

Die TRK-2-34-Formatbeschreibung (820-013) ist keine öffentliche Information. Anscheinend besteht die einzige Möglichkeit, eine Kopie zu erhalten, darin, Ihr eigenes Raumschiff hochzuschicken und DSN zu bezahlen, um es zu verfolgen.

Dies verheißt nichts Gutes für die Chancen, dass dies seine „autoritative Quelle“ erhält. Wenn Sie möchten, können Sie gerne einen Kommentar oder eine Antwort hinterlassen, die darauf hinweist, da Sie diese Wahrscheinlichkeit hier schön dokumentiert haben!