Активность НАСА в сети дальнего космоса можно удобно просмотреть по адресу https://eyes.nasa.gov/dsn/dsn.html , но если вам нужны данные в более необработанной форме XML, к ним можно получить доступ, как описано в этом ответе .
Ниже приведен небольшой скрипт Python, который считывает XML в список словарей и сохраняет его на диск в виде JSON.
Словари организованы на более высоком уровне по тарелкам, а затем по космическим аппаратам на тарелки.
Вопрос: Каковы наиболее вероятные значения всех полей данных, содержащихся в XML-данных Deep Space Network?
Это пример URL-адреса из другого ответа, который используется в приведенном ниже сценарии: 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)
Вот последние две «вещи», которые печатает:
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'}}
На просмотр данных из DSN у меня ушло несколько дней. Вот мой анализ полей из файлов данных XML.
station
name
: Позывной станции.friendlyName
: Общее название станции (Голдстоун, Мадрид, Канберра).timeUTC
: Время создания этого отчета с использованием универсального скоординированного времени в миллисекундах (1/1000 секунды) с эпохи Unix (1 января 1970 г.).timeZoneOffset
: добавьте это число, timeUTC
чтобы получить местное время этой станции, опять же в миллисекундах, начиная с эпохи Unix.dish
name
: Идентификатор блюда. Обычно за «DSS» следуют две десятичные цифры.azimuthAngle
, elevationAngle
: Астрономический азимут и высота, на которую в данный момент направлена эта антенна, в градусах с десятичной долей.windSpeed
: скорость ветра вокруг тарелки в км/ч.isMSPA
: Если "true", тарелка прослушивает более одной цели (Multiple Spacecraft Per Aperture).isArray
: Если "true", блюдо является частью массива тарелок.isDDOR
: Если установлено значение "true", антенна используется для односторонней дальности Delta Differential .created
, updated
: Время создания и модификации файлов (чего?), в формате ISO 8601 .target
name
: позывной целевого космического корабля.id
: Десятичный идентификационный номер для каждого космического корабля. По-видимому, присваивается последовательно (начиная с 1) при добавлении космического корабля в базу данных.uplegRange
, downlegRange
: Расчетное расстояние до цели и от цели в км. Должно быть таким же, если только не используется массив или DDOR. Кажется, в 2 раза меньше.rtlt
: Время прохождения света туда и обратно в секундах. Кажется, в 2 раза меньше.upSignal
signalType
: none
если установка/снятие/отслеживание, carrier
если только несущая частота, data
если что-то действительно отправляется.signalTypeDebug
: Неизвестный; предназначен для программистов.power
: Мощность передаваемого сигнала в кВт.frequency
: Частота передаваемого сигнала в МГц .dataRate
: бит в секунду передаваемых данных.spacecraft
: Позывной целевого космического корабля.spacecraftId
: Идентификационный номер целевого космического корабля.downSignal
signalType
: none
если установка/снятие/отслеживание, carrier
если только несущая частота, data
если что-то действительно принимается.signalTypeDebug
: Неизвестный; предназначен для программистов.spacecraft
: Позывной целевого космического корабля.spacecraftId
: Идентификационный номер целевого космического корабля.dataRate
: Биты в секунду полученных данных.frequency
: Частота принимаемого сигнала, в Гц . Обратите внимание на другие единицы измерения и более высокую точность, чем у upSignal; это было бы полезно для анализа эффекта Доплера движения космического корабля.power
: Мощность принимаемого сигнала в дБм . Было несколько случаев, когда две цели одной и той же антенны имели почти одинаковую мощность, за исключением смещения на значение 300: обычно -1xx,xx и -4xx,xx дБм. Поэтому я думаю, что 300 вычитается из мощности как флаг для определенного состояния (которое мне еще предстоит определить). Код для обработки этого значения должен выглядеть так:if (power < -300.00) power = power + 300.00
Пожалуйста, попробуйте это, нарисуйте результаты и сообщите нам, если это сработает!
Вы заметите, что единицы не согласованы. Время может быть в формате Unix или в формате ISO 8601. Частота может быть в Гц или МГц. Мощность может быть в кВт или дБм.
Я был бы обеспокоен тем, что единицы могут измениться в будущем или изменились в прошлом. Поэтому я бы рекомендовал выполнить «проверку работоспособности» значений и соответствующим образом настроить их. Частота например:
if (frequency < 40.0)
# Gigahertz
frequency = frequency * 1E9
else if (frequency < 40000)
# Megahertz
frequency = frequency * 1E6
# else Hertz
Частоты радиодиапазона IEEE (из Википедии):
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 хранит данные внутри в формате под названием «TRK-2-34». Это описано в техническом примечании DSN 820-013. Я нашел 15 статей, в которых упоминается использование этого формата данных. В двух из этих документов прямо указано, что это «внутренний документ». Также рассмотрите этот пост в блоге:
Это техническая статья о том, как использовать Deep Space Network (DSN). Я собираюсь начать кратко и погрузиться глубоко. Вы можете погуглить/вики по материалам верхнего уровня. Я хочу разобраться, как преобразовать типы данных в формате DSN в дальность и скорость дальности в километрах/километрах в секунду.
Я хочу сделать это, потому что это было излишне тяжело для меня. Не из-за теории, а из-за отсутствия документации или руководств . Я уже разглагольствовал, что представление DSN о машине для продажи — это мешок запчастей, некоторые дубликаты, некоторые плохие, без инструкций.
и
Документация по формату TRK-2-34 на самом деле исчерпывающая , но не объясняет, как соединить части вместе, чтобы получить пригодные для использования измерения.
и
В общем, моя претензия № 1 почти ко всему, что связано с эксплуатацией космических кораблей, заключается в том, насколько все излишне сложно и как трудно договориться о формате данных, интерфейсе и доступе, даже единицах измерения и моделировании.
и
DSN делает прекрасные вещи, но они не являются публичной коммерческой компанией. Если вы хотите использовать DSN для отслеживания вашего драгоценного космического корабля, вам придется играть с игрушками, которые они вам дают. Вам понадобится полуприличный априорный вектор состояния для вашего космического корабля, симулятор для его распространения и извлечения геометрии, бинарный синтаксический анализатор, справочник ТРК-2-34 и все шаги, перечисленные выше.
Описание формата ТРК-2-34 (820-013) не является публичной информацией. Похоже, единственный способ получить копию — отправить свой космический корабль и заплатить DSN за его отслеживание.
прыгун