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'}}
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, timeUTC
um 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
: none
wenn Setup/Teardown/Tracking, carrier
wenn nur Trägerfrequenz, data
wenn 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
: none
wenn Setup/Teardown/Tracking, carrier
wenn nur Trägerfrequenz, data
wenn 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
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.
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.
Jumpjack