В предыдущей части мы рассмотрели прием сигналов спутников Inmarsat. Сейчас мы рассмотрим не менее интересную систему — спутниковую систему связи Iridium, принять сигналы которой также может у себя дома любой желающий.
Покрытие сети Iridium, фото из Википедии
Для тех, кому интересно как это работает, продолжение под катом.
Примечание: ничего секретного в приведенных ниже данных нет, описанные в статье декодеры лежат на github уже не один год. Частоты и сигналы также доступны любому желающему, кто готов потратить 35$ на антенну и высунуть её в форточку. Тем не менее, система связи Iridium является действующей, поэтому некоторые данные не выкладываются из юридических соображений. Данный материал предназначен исключительно для ознакомления, публикация или хранение принятых сообщений могут быть не разрешены по законодательству тех или иных стран.
Железо
Тут ничего нового нет, все было описано в предыдущей статье. Я использовал антенну «Active L-Band 1525-1637 Patch Antenna», купить которую можно за 35$, и приемник SDRPlay, вместо которого можно использовать RTL SDR V3, стоимостью также около 35$. Таким образом, все обойдется в сумму дешевле 100$, что вполне доступно.
Весь комплект для приема выглядит так (коробок спичек для масштаба):
Далее, открываем окно (стекло глушит радиоволны этого диапазона), направляем антенну в небо, и можно принимать сигнал. Важно не забыть включить в настройках приемника bias-tee, т.к. антенна является активной и без подачи питания работать не будет. Если все было сделано правильно, на частоте примерно 1.6ГГц мы должны увидеть такую картинку:
Кстати, если посмотреть спектр с большей детализацией, то хорошо виден наклон линий из-за эффекта Допплера — спутники движутся по орбите, и частота меняется.
Для сравнения, можно посмотреть сигналы Inmarsat, которые выглядят совсем по-другому. Во-первых, в Inmarsat используются геостационарные спутники, летящие в космосе на геостационарной орбите высотой 35786км. В отличие от этого, в Iridium используют другой подход — более 60 спутников летают на низких орбитах (871км), покрывая всю территорию Земли (фото на КДПВ). Это позволяет использовать более компактные и ненаправленные антенны, также такая система лучше работает на северных территориях, где прием геостационарных спутников ограничен. И во-вторых, в Iridium используется принципиально другая схема передачи данных — вместо постоянных дата-линков на постоянной частоте используются коротые burst-пакеты, которые можно видеть на картинке.
На этом мы закончим «теоретическую» часть, если все работает, то пора переходить к софту.
Софт
С софтом для декодирования есть одна «небольшая» сложность — он написан под Linux. Возможно, есть секретный способ скомпилировать Gnu Radio проекты под Windows, но у меня ни разу, кроме огромного числа ошибок, так ничего на выходе и не получилось. С Linux все просто и работает «из коробки», но я исхожу из того, что у большинства читателей все же установлен Windows. Так что мы пойдем обходным путем — запишем сигналы в HDSDR, а декодер для их обработки запустим из под Ubuntu в Windows 10. Благо что 10ка штатно предоставляет такую возможность.
Шаг-1. Компиляция gr-iridium
Для начала необходимо загрузить в App Store Ubuntu и установить туда GNU Radio.
Собственно компиляция декодера gr-iridium особых сложностей не представляет:
git clone https://github.com/muccc/gr-iridium.git
cd gr-iridium
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
Процесс выглядит примерно так:
Для работы декодера необходим модуль gr-osmosdr. Его компиляция делается по такому же принципу, с одной лишь разницей — нам необходимо отключить ненужные на этом шаге приемники, иначе получим ошибки компиляции.
git clone git://git.osmocom.org/gr-osmosdr
cd gr-osmosdr
mkdir build
cd build/
cmake .. -DENABLE_UHD=OFF -DENABLE_RTL=OFF -DENABLE_BLADERF=OFF -DENABLE_FCD=OFF -DENABLE_RFSPACE=OFF -DENABLE_REDPITAYA=OFF -DENABLE_HACKRF=OFF
make
sudo make install
sudo ldconfig
Тут есть забавный подводный камень. Запустив make, я получил странные ошибки типа «c++: error: /wd4251: No such file or directory». Поиск в гугле показывает, что эти ошибки относятся к Windows-версии, что при компиляции под Ubuntu никак не может быть. Оказалось, может — выведя подробный лог командой «make -n», я обнаружил что диски Windows по умолчанию подмонтированы в Ubuntu, и cmake «подхватил» эти файлы:
cd /home/dmitrii/Documents/gr-osmosdr-0.1.5/build/lib && /usr/bin/c++ -DBOOST_ALL_DYN_LINK -DHAVE_CONFIG_H=1 -DNOMINMAX -DUSE_SSE2 -Dgnuradio_osmosdr_EXPORTS -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/build/lib -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/include -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/file -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/rtl_tcp -I/home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/soapy -isystem "/mnt/c/Program Files/PothosSDR/include" -O3 -DNDEBUG -fPIC -Wall -Wextra -Wno-unused-parameter -Wsign-compare -fvisibility=hidden -fvisibility-inlines-hidden -msse2 /MP /wd4251 /wd4503 -o CMakeFiles/gnuradio-osmosdr.dir/source_impl.cc.o -c /home/dmitrii/Documents/gr-osmosdr-0.1.5/lib/source_impl.cc
Естественно, исходники несовместимы и ничего не компилируется. Такая вот особенность работы Ubuntu из под Windows. Решение простое — размонтируем папку (sudo umount /mnt/c), повторяем cmake и build, затем монтируем обратно (sudo mount -t drvfs C: /mnt/c). Подмонтированные диски нам пригодятся, когда мы будем обрабатывать записанные в HDSDR файлы.
Последним шагом нам необходимо установить Iridium Toolkit:
git clone https://github.com/muccc/iridium-toolkit.git
Теперь все готово, и мы можем записать и обработать сигналы Iridium.
Шаг-2. Запись сигналов
Тут все просто — открываем HDSDR, выбираем участок где сигналов побольше, делаем IQ-запись. Сигналы в Iridium идут не постоянно, а «пакетами», так что возможно придется немного подождать. Недостаток лишь один — большой объем записи, одна минута с шириной полосы 2МГц занимает порядка 500Мбайт.
Еще раз повторюсь, что под «нормальной» Linux это не нужно, и можно запустить gr-iridium сразу с SDR-приемником без промежуточной записи, но в Windows это не сработало — lsusb не видит подключенных устройств.
Шаг-3. Обработка
Останавливаем запись в HDSDR, переключаемся в Ubuntu в папку /mnt/c/Users/XXX/Documents/HDSDR и вводим команду:
iridium-extractor -c 1619XXXXXX -r 2000000 -f sc16 --offline HDSDR_20200112_110653Z_1619XXXkHz_RF.wav | grep "A:OK"
Здесь HDSDR_20200112_110653Z_1619XXXkHz_RF.wav это записанный нами файл, 1619XXXXXX — центральная частота записи и 2000000 — ширина полосы записанного wav-файла. Если все было сделано правильно, должен появиться примерно такой лог:
Если пакетов не видно, идти дальше бесполезно, нужно выяснять в чем ошибка. Если записи видны, повторяем команду еще раз, сохраняем результаты в файл и обрабатываем файл с помощью iridium-parser.py:
iridium-extractor -c 1619XXXXXX -r 2000000 -f sc16 --offline HDSDR_20200112_110653Z_1619XXXkHz_RF.wav | grep "A:OK" > output.bits
python iridium-parser.py output.bits > output.parsed
Теперь мы можем извлечь информацию из сохраненного файла output.parsed. «Достать» оттуда можно различные данные, например текстовые или даже голосовые сообщения. Из юридических соображений я делать это здесь не буду, желающие могут подробнее прочитать описание на странице проекта. Там есть интересные моменты, например в Iridium могут передаваться не только текстовые или голосовые, но и GSM-данные, т.е. Iridium-терминал может предоставлять услуги GSM-связи в тех местах, где обычного покрытия нет — спутник и терминал тут вероятно, работают лишь как «удлиннитель» для стандартных GSM-пакетов.
Можно к примеру, продемонстрировать, как из записанных данных получить координаты летящего спутника:
Координаты несложно импортировать в Google Maps и увидеть, что во время записи спутник пролетал где-то над Осло (красная линия):
Другие функции Iridium Toolkit можно почитать на странице github.
Заключение
Как можно видеть, процесс приема сигналов со спутников не так уж сложен, и с точки зрения изучения систем связи, достаточно интересен.
Для желающих изучить Iridium более подробно, пара видео (на английском):
Надеюсь, для лучшего понимания этого вполне достаточно.
Как обычно, всем удачных экспериментов.
Автор: DmitrySpb79