¿Comprender la información contenida en los datos XML de Deep Space Network?

La actividad de la Red del Espacio Profundo de la NASA se puede ver convenientemente en https://eyes.nasa.gov/dsn/dsn.html , pero si desea obtener datos en un formato XML más crudo, puede acceder a ellos como se describe en esta respuesta .

A continuación se muestra un pequeño script de Python que lee el XML en una lista de diccionarios y lo guarda en el disco como JSON.

Los diccionarios están organizados en el nivel superior por plato, luego por nave espacial por plato.

Pregunta: ¿Cuáles son los significados más probables de todos los campos de datos contenidos en los datos XML de Deep Space Network?

Esta es la URL de ejemplo de la otra respuesta, utilizada en el siguiente script: 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)

Aquí están las dos últimas "cosas" que imprime:

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'}}

Respuestas (2)

Me tomó varios días observar los datos de DSN. Aquí está mi análisis de los campos de los archivos de datos XML.

station

  • name: Distintivo de llamada de la estación.
  • friendlyName: Nombre común de la estación (Goldstone, Madrid, Canberra).
  • timeUTC: Tiempo que pasó este reporte, usando el Tiempo Universal Coordinado, en milisegundos (1/1000 de segundo) desde la época Unix (1 de enero de 1970).
  • timeZoneOffset: Agregue este número a timeUTCpara obtener la hora local de esta estación, nuevamente en milisegundos desde la época de Unix.

dish

  • name: Identificador del plato. Por lo general, "DSS" seguido de dos dígitos decimales.
  • azimuthAngle, elevationAngle: El acimut astronómico y la elevación hacia donde apunta actualmente este plato, en grados con una fracción decimal.
  • windSpeed: La velocidad del viento alrededor del plato, en km/h.
  • isMSPA: Si es "verdadero", el plato está escuchando a más de un objetivo (múltiples naves espaciales por apertura).
  • isArray: Si es "verdadero", el plato es parte de una matriz de platos.
  • isDDOR: Si es "verdadero", el plato se está utilizando para el rango unidireccional diferencial delta .
  • created, updated: Tiempos de creación y modificación de archivos (¿de qué?), en formato ISO 8601 .

target

  • name: El distintivo de llamada de la nave espacial objetivo.
  • id: Un número de identificación decimal para cada nave espacial. Parece estar asignado secuencialmente (comenzando en 1) cuando la nave espacial se agregó a la base de datos.
  • uplegRange, downlegRange: Distancia estimada hacia y desde el objetivo, en km. Debería ser el mismo, a menos que use una matriz o DDOR. Parece estar fuera por un factor de 2.
  • rtlt: Tiempo de luz de ida y vuelta, en segundos. Parece estar fuera por un factor de 2.

upSignal

  • signalType: nonesi se configura/desmonta/seguimiento, carriersi solo la frecuencia de la portadora, datasi realmente se envía algo.
  • signalTypeDebug: Desconocido; destinado a los programadores.
  • power: Potencia de la señal transmitida, en kW.
  • frequency: Frecuencia de la señal transmitida, en MHz .
  • dataRate: Bits por segundo de datos transmitidos.
  • spacecraft: Distintivo de llamada de la nave espacial objetivo.
  • spacecraftId: número de identificación de la nave espacial objetivo.

downSignal

  • signalType: nonesi configuración/desmontaje/seguimiento, carriersi solo frecuencia portadora, datasi realmente se está recibiendo algo.
  • signalTypeDebug: Desconocido; destinado a los programadores.
  • spacecraft: Distintivo de llamada de la nave espacial objetivo.
  • spacecraftId: número de identificación de la nave espacial objetivo.
  • dataRate: Bits por segundo de los datos recibidos.
  • frequency: Frecuencia de la señal recibida, en Hz . Tenga en cuenta las diferentes unidades y la mayor precisión que upSignal; esto sería útil para analizar el efecto Doppler del movimiento de la nave espacial.
  • power: Potencia de la señal recibida, en dBm . Ha habido varias ocasiones en las que dos objetivos del mismo plato tienen una potencia casi idéntica, excepto compensada por un valor de 300: normalmente -1xx,xx y -4xx,xx dBm. Por lo tanto, creo que 300 se descuentan del poder como una bandera para una determinada condición (que aún tengo que identificar). El código para manejar este valor debería verse así:
if (power < -300.00)
   power = power + 300.00

¡ Pruébelo, grafique los resultados y háganos saber si funciona!


Notarás que las unidades no son consistentes. El tiempo puede estar en tiempo Unix o en ISO 8601. La frecuencia puede estar en Hz o MHz. La potencia puede ser en kW o dBm.

Me preocuparía que las unidades pudieran cambiar en el futuro, o que hayan cambiado en el pasado. Por lo tanto, recomendaría realizar una "comprobación de cordura" en los valores y ajustarlos correspondientemente. Frecuencia por ejemplo:

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

Frecuencias de banda de radio IEEE (de 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
las letras de las frecuencias se eligieron deliberadamente al azar para confundir a los enemigos. "id" del objetivo es la identificación "universal" de la NASA para naves espaciales, aquí está la lista: ssd.jpl.nasa.gov/horizons_batch.cgi?batch=1&COMMAND= '*' Uplegrange y Downlegrange difieren si la nave espacial se mueve rápido; si abajo <arriba, s/c se está acercando.

Seguir

DSN almacena los datos internamente en un formato llamado "TRK-2-34". Se describe en la nota técnica DSN 820-013. He encontrado 15 documentos que se refieren al uso de este formato de datos. Dos de esos documentos afirman específicamente que se trata de un "documento interno". Considere también esta publicación de blog:

Este es un artículo técnico sobre cómo usar la red de espacio profundo (DSN). Voy a comenzar alto brevemente y sumergirme profundamente. Puede buscar en Google/wiki las cosas de nivel superior. Quiero llegar directamente a cómo traducir de tipos de datos con formato DSN a rango y velocidad de rango en kilómetros/kilómetros por segundo.

Quiero hacer esto porque fue innecesariamente difícil para mí. No por la teoría sino por la falta de documentación o de orientación . He despotricado antes que la idea del DSN de un automóvil a la venta es una bolsa de piezas, algunos duplicados, algunos malos, sin instrucciones.

y

La documentación sobre el formato TRK-2-34 es realmente completa , pero no explica cómo unir las piezas para obtener una medida utilizable.

y

En general, mi queja número 1 con casi todo lo relacionado con las operaciones de naves espaciales es lo innecesariamente complicado que es todo y lo difícil que es ponerse de acuerdo sobre el formato de los datos, la interfaz y el acceso, incluso las unidades y el modelado.

y

DSN hace algo hermoso, pero no es una empresa pública con fines de lucro. Si quieres usar el DSN para rastrear tu preciosa nave espacial, tendrás que jugar con los juguetes que te dan. Necesitará un vector de estado a priori medio decente para su nave espacial, un simulador para propagarlo y extraer geometría, un analizador binario, el manual TRK-2-34 y todos los pasos enumerados anteriormente.

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

La descripción del formato TRK-2-34 (820-013) no es información pública. Parece que la única forma de obtener una copia es enviar su propia nave espacial y pagarle a DSN para que la rastree.

Esto es un mal augurio para las posibilidades de que esto obtenga su "fuente autorizada". Si lo desea, no dude en dejar un comentario o una respuesta allí señalando esto, ¡ya que ha documentado muy bien esa probabilidad aquí!