Сегодня я покажу, как принимать и декодировать сигналы из космоса. Не так, конечно, как это делают контактеры и любители шапочек из фольги, а на полном серьезе.
Мы будем изучать так называемый L-Band — диапазон частот от 1 до 2 ГГц, который активно используется для коммуникации со спутниками.
Как принимать и декодировать сигналы из космоса
Прием диапазона L-Band не является для радиолюбителей чем-то кардинально новым. Но раньше это было непросто. Нужно было рассчитать и сделать антенну, спаять малошумящий усилитель (потому что сигналы со спутника очень слабы), потом настроить все это. К тому же приборы для этого занятия стоят немалых денег.
Сейчас все стало гораздо проще и дешевле: можно уложиться в 100 долларов за антенну вместе с приемником. Что касается самих спутников, то мы рассмотрим две системы: Iridium и Inmarsat. Они интересны тем, что это действующие системы связи и можно «вживую» посмотреть, как они работают. Более того, для этих систем есть программные декодеры, которые можно запустить, изучить исходники на GitHub.
Железо для приема сигналов Inmarsat и Iridium
Комплект для приема спутниковых сигналов состоит из трех основных компонентов: приемника, антенны и малошумящего усилителя (LNA, Low Noise Amplifier).
Приемник
Начнем с приемника. Есть три основных варианта.
Вариант 1 — RTL-SDR V3
Это уже классика жанра, один из лучших и проверенных недорогих приемников на базе известного RTL-SDR. Приемник обеспечивает работу на частотах до 1,7 ГГц и ширину полосы обзора 2 МГц. Цена приемника около 30 долларов вместе с антенной и мини-штативом (он тоже в хозяйстве пригодится).
Важно взять именно оригинальную модель: на AliExpress есть более дешевые клоны, но, во-первых, их качество не гарантируется, во-вторых, в приемнике обязательно должна быть возможность подавать питание на антенный вход (bias tee), иначе ничего не заработает.
Вариант 2: Nooelec NESDR SMArTee v2
Этот приемник примерно сопоставим по характеристикам с предыдущим, он имеет неотключаемый bias tee, и для приема спутников это может быть удобно. Желательно выбрать именно вторую версию, потому что у первой меньше максимальный отдаваемый ток (250 мА против 100). Это важно: некоторые LNA (например, Nooelec SAWbird) потребляют порядка 180 мА.
Есть и другая модель Nooelec NESDR SMArt, без Tee в названии, она не подойдет.
Вариант 3 — SDRplay RSPduo
Это более качественный приемник, который обеспечивает ширину полосы приема до 8 МГц, что гораздо удобнее для поиска сигналов. Сам АЦП также имеет большую разрядность (12 бит вместо 8), что лучше для приема слабых сигналов.
У RSPduo несколько антенных входов, и он может принимать сигналы от 2 кГц до 2 ГГц. Цена его, впрочем, уже около 250 долларов.
Антенна
Антенны бывают разные, для наших целей лучше всего подходят патч-антенны и параболические антенны. Среди самодельных антенн популярны спиральные: их довольно легко смастерить в домашних условиях. Некоторые используют переделанную антенну от GPS, из которой удаляют полосовой фильтр. В общем, вариантов много. Из того, что можно просто взять и купить без «доработки напильником», можно порекомендовать комплект RTL-SDR Active L-Band 1525–1637 Patch Antenna Set.
Это уже готовая антенна со встроенным усилителем, для начала работы достаточно подключить ее к приемнику и активировать в настройках bias tee, чтобы на антенну было подано питание. Цена антенны — 35 долларов.
Хорошие результаты дает параболическая антенна для Wi-Fi, но она довольно громоздкая.
Хоть эта антенна по документации предназначена для диапазона 2,4 ГГц, но и на 1,7 ГГц она работает хорошо. В ней нет встроенного LNA, его придется докупить отдельно.
Выбор для начинающего любителя спутникового приема довольно прост: приемник RTL-SDR V3 за 30 долларов и RTL-SDR Patch Antenna за 35 долларов. Подключаем все это к ПК и можем принимать радиосигналы. Все обойдется в 65 долларов. Еще за пять баксов можно прикупить удлинитель SMA и трехметровый кабель USB: они пригодятся, если антенна и приемник расположены далеко от компьютера.
А если тебе захочется принимать более слабые сигналы, сетап можно проапгрейдить и поставить антенну побольше, тут предела совершенству нет.
Я все тестировал на таком вот комплекте.
На этом мы закончим с железом и перейдем к софту. Я не буду рассказывать, как подключить RTL-SDR к компьютеру и как установить SDR# с плагинами, статей про это было достаточно.
Для приема Inmarsat нужно будет установить Virtual Audio Cable, чтобы можно было передавать звук из SDR# в программу-декодер. Для декодирования Iridium мы будем использовать Ubuntu из Windows 10.
Общая информация
Какие сигналы мы вообще собираемся принимать?
Inmarsat — это британская компания, которая использует группировку из тринадцати геостационарных спутников, расположенных на орбите 35 786 км. Спутники геостационарные, то есть они вращаются синхронно с Землей. Для приема их сигнала знать точное время пролета не нужно: они всегда на одном месте относительно поверхности Земли (в отличие от спутников NOAA).
Компания Inmarsat предоставляет разные сервисы передачи данных, текстовых сообщений, телефонии. Это актуально там, где нет «обычного» покрытия, — в авиации, на флоте. Подробнее можно посмотреть на официальном сайте. Часть данных шифруется, часть передается в открытом виде.
Как видишь, зоной приема охвачена фактически вся поверхность Земли. Однако геостационарные спутники расположены над экватором, и на самых северных широтах прием может быть затруднен.
Американская компания Iridium использует другой подход: 66 спутников летают на низкой орбите — 781 км над поверхностью Земли, количество спутников рассчитано так, чтобы в любой момент над каждой точкой было как минимум три спутника.
Чем больше уровень сигнала со спутника, тем лучше связь в северных широтах, зато и стоимость обслуживания спутниковой группировки, вероятно, выше. Как и Inmarsat, Iridium предоставляет сервисы передачи данных, сообщений и голоса.
На этом мы закончим с теорией и перейдем к практике: посмотрим, какие декодеры доступны для обеих систем.
Обе системы связи действующие и используются в том числе и в России. Так что статью УК РФ 138 «Нарушение тайны переписки, телефонных переговоров, почтовых, телеграфных или иных сообщений» никто не отменял. Принимать и анализировать какие-либо радиосигналы не запрещено, но публикация или хранение декодированных сообщений может преследоваться по закону. Также из юридических соображений я не буду писать здесь конкретные значения частот, хотя, в общем-то, это не секрет и находится в интернете за пять минут.
Прием сигналов Inmarsat
Как ты помнишь, спутники компании Inmarsat геостационарные. Поэтому первым делом ищем направление на спутник, для чего можно воспользоваться сайтом dishpointer.com. Выбираем свое местоположение, находим один из спутников Inmarsat и получаем угол и высоту спутника, куда нужно будет направить антенну.
Я пробовал разные программы для Android, но не подошла ни одна из них — некоторые обвешаны рекламой, во многих есть только спутники для ТВ, но нет поддержки Inmarsat. В итоге сайт DishPointer оказался самым удобным решением. Кстати, для приема желательно открытое небо: если спутник закрыт домами, то сигнала может не быть.
Затем подключаем приемник RTL-SDR с антенной и вводим команду rtl_biast -d 0 -b 1 для подачи напряжения на антенный выход RTL-SDR. Без подачи питания антенна не заработает.
Теперь можно запускать софт. Частоты несложно найти самостоятельно. Если все было сделано правильно, то, когда ты направишь антенну в небо, ты увидишь на экране SDR# сигналы спутников.
Scytale-C
Для начала мы рассмотрим плагин для SDR#, который создал человек с ником Scytalec. Scytale-C позволяет декодировать сообщения, которые были переданы через спутники Inmarsat. Программа состоит их двух частей: самого плагина, который устанавливается в SDR#, и отдельного декодера QuickUI.
Плагин Scytale-C должен быть активен и при правильной настройке будет показывать статус Locked и фазовое созвездие BPSK.
Теперь запускаем Quick-UI, программа может показывать как содержимое пакетов в JSON, так и декодированные сообщения.
JAERO
Вторая полезная программа — JAERO. Она ориентирована на прием сообщений ACARS (Aircraft Communications Addressing and Reporting System), которые предназначены для воздушных судов и передаются через спутники Inmarsat.
JAERO работает через Virtual Audio Cable, так что в настройках SDR# нужно будет указать соответствующее устройство для вывода звука. Для приема сообщений нужно выбрать сигнал в JAERO, при нормальном декодировании должно появиться фазовое созвездие QPSK, как показано на рисунке.
JAERO позволяет декодировать разные сигналы, не только текстовые, но и голосовые. Желающие могут изучить возможности программы самостоятельно.
На этом мы закончим с Inmarsat и перейдем к приему сигналов Iridium.
Прием сигналов Iridium
Прием Iridium — немного более мудреная тема, формат самих сигналов гораздо сложнее. Спутники Iridium передают сигналы в виде коротких пакетов на различных частотах, для наглядности можно показать скриншот приемника SDRplay с шириной полосы 4 МГц.
Сложность приема Iridium для большинства пользователей состоит в том, что декодер gr-iridium можно скомпилировать только в Linux. Мы воспользуемся тем, что в Windows 10 штатно можно установить Ubuntu из Microsoft Store. Сам декодер работает из командной строки, так что перед его запуском целесообразно посмотреть спектр с помощью SDR# и запомнить частоту, на которой видно больше всего сигналов.
Другая сложность: ширина полосы спектра, в которой передаются сигналы Iridium, превышает 2 МГц, предоставляемые RTL-SDR. Так что часть пакетов мы неизбежно пропустим. В идеале нам нужен более широкополосный приемник, например SDRplay или HackRF. Но мы все же посмотрим, как это работает с RTL-SDR.
Для этого нужно совершить несколько действий.
1. Запустим Ubuntu, скомпилируем и установим нужные компоненты. Декодер Iridium состоит из двух отдельных компонентов — gr-iridium и iridium-toolkit. Инструкция по компиляции и установке есть на странице GitHub.
2. Активируем bias tee в Windows командой rtl_biast -d 0 -b 1. Проблема Ubuntu в Windows 10 в том, что Linux не видит подключенных по USB устройств и запустить приемник напрямую мы не можем. Поэтому мы запустим в Windows сервер rtl_tcp командой rtl_tcp.exe -a 0.0.0.0 -f 16XXXXXXXX, где XXX — нужная нам частота.
3. Создадим в Ubuntu файл rtl_tcp.conf в папке gr-iridium/examples со следующим содержанием.
1 2 3 4 5 6 7 8 9 10 |
[osmosdr-source] sample_rate=2000000 center_freq=16XXXXXXXX device_args='rtl_tcp=127.0.0.1:1234' ## Automatic bandwidth bandwidth=0 ## LNA gain gain=19 ## Moderate gains if_gain=30 |
4. Запустим запись пакетов командой
1 |
iridium-extractor -D 4 examples/rtl_tcp.conf | grep "A:OK" > output.bits |
Число записанных пакетов (помеченных как ok) должно расти, как показано на скриншоте.
Если надписи ok не появляются и на экране одни нули, то дальше идти бесполезно, надо разбираться, что не так. Чаще всего проблема в том, что ты не активировал bias tee, а без него антенна работать не будет, или выбрал неверную частоту.
Запись можно остановить на некоторое время. На выходе мы должны получить файл output.bits, размер которого зависит от числа собранных пакетов.
5. Запустим iridium-parser командой python iridium-parser.py output.bits > output.parsed.
Данные готовы. Для примера можно извлечь координаты пролетающих спутников с помощью команды
1 |
grep ^IRA output.parsed | perl mkkml tracks > output.kml |
Результат обработки записи, впрочем, довольно сильно зависит от везения — обширный трафик со спутников бывает не всегда.
<h2″>WWW
Кстати, интересно посмотреть сигналы Iridium самостоятельно, без помощи декодера. Как показывает просмотр записи в программе Signals Analyzer, данные передаются в виде коротких сигналов (burst) длиной около 9 мс.
Форма сигнала указывает на фазовую модуляцию. На картинке заметны два вида сигналов, занимающих разную ширину спектра. Анализ на фазовой плоскости показывает, что скорость передачи широкого сигнала составляет 240 бит/с, это дает объем данных одного пакета примерно 2 Кбайт. Узкополосный сигнал имеет скорость в десять раз меньше, но передаются они чаще.
Заключение
На этом мы закончим краткое знакомство с приемом спутниковых сигналов. Разумеется, это далеко не все интересное, что может быть принято из космоса. Например, весьма любопытен прием с метеоспутников изображений высокого разрешения (HRPT, high-resolution picture transmission).
Для ознакомления можешь посмотреть подробный туториал по приему американских метеоспутников GOES. К сожалению, в Европе эти спутники практически не видны и находятся за горизонтом.
На мой взгляд, тема спутникового приема довольно мало изучена: одни хорошо умеют паять антенны и усилители, но мало разбираются в цифровом анализе сигналов, и наоборот — программисты не очень любят паять. Но в последнее время появились готовые и недорогие решения, которые работают из коробки, так что тема, надеюсь, получит развитие — может, в том числе и благодаря читателям «Хакера».