
Dump1090 — это простой декодер Mode S для устройств RTLSDR
Dump 1090 — это декодер Mode S, специально разработанный для устройств RTLSDR.
Основные возможности:
Хотя время от времени я всё ещё добавляю/исправляю что-то в своём форке, я стремлюсь к минимализму реализации. Однако существует гораздо более функциональный форк, разработанный MalcolmRobb.
Выполните "make".
Чтобы принимать трафик напрямую с вашего RTL-устройства и выводить принятый трафик в стандартный вывод, просто запустите программу без каких-либо опций:
./dump1090
Чтобы просто выводить шестнадцатеричные сообщения:
./dump1090 --raw
Чтобы запустить программу в интерактивном режиме:
./dump1090 --interactive
Чтобы запустить программу в интерактивном режиме с поддержкой сети и подключиться браузером к http://localhost:8080 для просмотра трафика в реальном времени:
./dump1090 --interactive --net
В интерактивном режиме можно использовать менее насыщенный информацией, но более «аркадный стиль» вывода, когда экран обновляется каждую секунду, отображая все недавно обнаруженные самолёты с дополнительной информацией, такой как высота и номер рейса, извлечённой из принятых пакетов Mode S.
Чтобы декодировать данные из файла, используйте:
./dump1090 --ifile /path/to/binfile
Двоичный файл должен быть создан с помощью rtl_sdr, например так (или с помощью любой другой
программы, способной выводить 8-битные беззнаковые IQ-выборки с частотой дискретизации 2 МГц).
rtl_sdr -f 1090000000 -s 2000000 -g 50 output.bin
В примере rtl_sdr используется усиление 50 — просто следует использовать максимальное
усиление, доступное для вашего тюнера. Это не требуется при вызове самого Dump1090,
так как он автоматически выбирает максимальное поддерживаемое усиление.
Также можно передавать программе данные через стандартный ввод, используя опцию --ifile с аргументом "-".
Dump1090 можно вызывать с другими параметрами командной строки, чтобы задать иное усиление, частоту и так далее. Для получения списка опций используйте:
./dump1090 --help
Всё, что здесь не задокументировано, должно быть очевидно, и для большинства пользователей лучше всего вызывать программу вообще без аргументов.
По умолчанию Dump1090 пытается исправлять битовые ошибки с помощью контрольной суммы CRC. Программа использует предварительно вычисленную таблицу синдромов для быстрого обнаружения и исправления до двух битовых ошибок в принятых сообщениях.
Это действительно позволяет исправлять ошибки и, по моему опыту, работает надёжно, однако если вам нужны очень надёжные данные, рекомендую использовать параметр командной строки --no-fix, чтобы отключить исправление ошибок.
По моему ограниченному опыту, Dump1090 смог декодировать большое количество сообщений даже в условиях, где у меня возникали проблемы с другими программами, однако никаких формальных тестов не проводилось, поэтому я не могу утверждать, что эта программа лучше или хуже других аналогичных программ.
Если вам удастся захватить трафик, который Dump1090 не может корректно декодировать, отправьте мне электронное письмо со ссылкой для скачивания. Я, возможно, попробую улучшить обнаружение в свободное время (это всего лишь хобби-проект).
Dump1090 умеет декодировать сообщения о наземной позиции (Type Code 5-8), которые передаются воздушными судами на земле (руление, ожидание у выходов на посадку и т.д.). Эти сообщения содержат позицию воздушного судна, путевую скорость и путевой угол.
Наземные позиции используют другое кодирование, чем воздушные: формат CPR (Compact Position Reporting) покрывает только 90 градусов вместо 360 и требует опорную позицию в пределах 45 морских миль для однозначного декодирования.
Вместо того чтобы требовать настройки местоположения вашего приёмника, Dump1090 автоматически вычисляет опорную позицию, усредняя все успешно декодированные воздушные позиции. Это работает потому, что если вы можете принимать наземный трафик аэропорта, вы почти наверняка принимаете и воздушный трафик. Усреднённая позиция пролетающих самолётов даёт опору, которая достаточно близка (с большим запасом в пределах 45 морских миль) для декодирования наземных позиций.
Примечание: наземные позиции будут отображаться только после того, как хотя бы одна воздушная позиция будет успешно декодирована для установления опоры. Самолёты на земле будут показываться с высотой 0 в интерактивном режиме.
При включении сетевой поддержки с помощью --net Dump1090 начинает прослушивать подключения клиентов на портах 30002 и 30001 (при желании вы можете изменить оба порта, см. вывод --help).
Подключённым клиентам данные отправляются немедленно по мере их поступления с устройства (или из файла, если используется --ifile) в сыром формате, похожем на следующий:
*8D451E8B99019699C00B0A81F36E;
Каждая запись отделяется простым переводом строки (символ LF, hex 0x0A).
Порт 30001 — это порт ввода сырых данных, который можно использовать для подачи в Dump1090
данных в том же формате, что описан выше, где шестнадцатеричные сообщения начинаются
с символа * и заканчиваются символом ;.
Так, например, если есть другой удалённый экземпляр Dump1090, собирающий данные, можно объединить его вывод с локальным экземпляром Dump1090, сделав примерно следующее:
nc remote-dump1090.example.net 30002 | nc localhost 30001
Важно отметить, что данные, полученные через порт 30001, также передаются клиентам, слушающим порт 30002.
В целом всё, что принимается с порта 30001, обрабатывается точно так же, как обычный трафик с RTL-устройств или из файла при использовании --ifile.
Можно использовать Dump1090 просто как хаб, указав --ifile с аргументом /dev/zero, как в следующем примере:
./dump1090 --net-only
Или, альтернативно, чтобы видеть происходящее на экране:
./dump1090 --net-only --interactive
Затем вы можете подавать в него данные из разных источников из интернета.
Подключённым клиентам отправляются сообщения в формате SBS1 (BaseStation), похожие на:
MSG,4,,,738065,,,,,,,,420,179,,,0,,0,0,0,0
MSG,3,,,738065,,,,,,,35000,,,34.81609,34.07810,,,0,0,0,0
Это можно использовать для передачи данных на различные сайты обмена данными без необходимости использовать другой декодер.
Сообщения Mode S передаются на частоте 1090 МГц. Если у вас приличная антенна, вы сможете принимать сигналы самолётов довольно далеко от вашего местоположения, особенно если вы находитесь на открытом воздухе и в месте с хорошим обзором неба.
Очень дешёвую антенну можно легко собрать, следуя инструкциям по адресу:
http://antirez.com/news/46
С этой простейшей антенной я мог принимать сигналы самолётов на расстоянии более 200 км от себя.
Если вас интересует более серьёзная антенна, посмотрите следующие ресурсы:
С помощью --aggressive можно активировать агрессивный режим — модифицированную версию обнаружения и декодирования пакетов Mode S. Агрессивный режим обычно требует больше CPU (особенно если много самолётов передают пакеты DF17), но позволяет обнаружить ещё несколько сообщений.
Алгоритм в агрессивном режиме изменён следующим образом:
Использование агрессивного режима рекомендуется только в местах с низким трафиком, чтобы получить шанс захватить ещё несколько сообщений.
Режим отладки — это визуальная помощь для улучшения алгоритма обнаружения или для понимания того, почему программа не работает с конкретными входными данными.
В этом режиме сообщения отображаются в виде графического представления в стиле ASCII-арта, где показываются отдельные столбики амплитуд, дискретизированные на частоте 2 МГц.
Индекс показывает номер выборки, где 0 — это выборка, в которой был найден первый пик Mode S. Перед первым пиком также добавляется немного фонового шума для создания контекста.
Чтобы включить режим отладки и посмотреть, какие комбинации пакетов можно
записывать, используйте dump1090 --help для получения списка доступных флагов отладки.
Режим отладки включает опциональный вывод JavaScript, который используется для визуализации пакетов в веб-браузере. Вы можете использовать файл debug.html из каталога 'tools' для загрузки сгенерированного файла frames.js.
Код очень хорошо документирован и написан так, чтобы его было легко понять. Для старательного программиста, имеющего под рукой спецификацию Mode S, понять, как это работает, не составит труда.
Алгоритмы, которые я использовал, были получены главным образом при изучении множества сообщений, отображаемых с помощью одноразовой программы на SDL, и попытке смоделировать алгоритм на основе того, как сообщения выглядят графически.
Если у вас есть устройство RTLSDR и вы находитесь в местности, где над головой летают самолёты, просто запустите программу и проверьте наличие сигналов.
Однако если у вас нет устройства RTLSDR или в вашей местности самолётов очень мало, вы можете попробовать пример файла, распространяемый вместе с дистрибутивом Dump1090 в каталоге "testfiles".
Просто запустите его так:
./dump1090 --ifile testfiles/modes1.bin
Это просто простой фильтр, который принимает на вход сырые 8-битные IQ-выборки и выводит файл, в котором отсутствуют все части, где I и Q ниже указанного более чем для 32 выборок.
Используйте его так:
cat big.bin | ./dump1090 --snip 25 > small.bin
Я использовал его для создания небольшого тестового файла, чтобы включить его в дистрибутив исходного кода этой программы.
Dump1090 был написан в свободное время на Рождество 2012 года; это хобби-проект, поэтому я смогу заниматься проблемами и улучшениями только в свободное время. Тем не менее вы можете присылать pull-запросы, чтобы улучшить программу. Хорошей отправной точкой может стать список TODO, включённый в дистрибутив исходного кода.
Dump1090 был написан Сальваторе Санфилиппо [email protected] и другими участниками, присылавшими патчи с течением времени (подробнее см. историю коммитов), и распространяется под лицензией BSD с тремя пунктами.