Понравилось мне тут писать посты - намного удобнее, чем Вконтакте; поэтому очередной пост о деятельности Клуба любителей электроники "Контур" будет на этот раз о нашем участии во Всероссийских технологических соревнованиях по перспективным направлениям развития радиосвязи "Радиофест". Надеюсь, его создатели простят меня за некоторые спойлеры для будущих участников =)
В один из прекрасных дней в наш университет пришло приглашение на Радиофест-2019, где было сказано о времени и месте проведения (а проводятся они в ОЭЗ "Технополис Москва", площадка Алабушево), кратко описана программа мероприятия и перечислены номинации конкурса. Всего их три, и они не сильно изменились за эти три года - «Радионавигация», «Радиосвязь/РЭБ», «Радиоперехват». Кратко о них:
"Радионавигация", или "Охота на лис" представляет собой задание на определение координат передатчика сигнала при помощи двух приемников, и на каждом из них по две антенны. Требуется с сантиметровой точностью определить координаты, а в наличии только известное расположение приемников? Типичная задачка по радиолокации: у нас есть антенная решетка, а значит, мы можем определить фазовый набег сигнала, который даст нам некое значение, которое по идее является азимутом на сигнал. Так как приемников два, имея два азимута и зная координаты приемников - останется применить несложную геометрию и получить в точке пересечения двух линий искомые координаты передатчика. И это только один из методов решения задачи.
Кстати, на третьих соревнованиях (2021 год) источник сигнала начал двигаться - требовалось определять уже не его координаты, а скорость и направление движения.
"Радиосвязь/РЭБ", или "Захват флага" - из названия можно предположить, что тут замешаны некоторые соревновательные нотки, ведь нужно с кем-то бороться? Правильно! Участвует одновременно две команды. Задача состоит в том, чтобы передать условную полезную информацию между своим оборудованием (приемник и передатчик) и помешать сделать это противнику. Можно применить помехоустойчивую модуляцию; можно прыгать по частотам; можно применить интеллектуальный алгоритм поиска сигнала противника, задавить его, попутно передавая свои данные на соседней частоте - способов множество.
«Радиоперехват», или "Поймай волну" (в 2021 - "Когнитивное радио") - на самом деле сложнейшее задание. Требуется определить модуляцию некоего потока данных в эфире; обычно это 300 пакетов с различными видами манипуляции разных параметров (QAM, FSK, GMSK и т.д.), но с одинаковой структурой. Какие-то действительно рабочие наработки у команды появились только к третьим соревнованиям - идеи были самые разные, вплоть до анализа нейросетью сигнального созвездия.
После описания направлений стоит сделать пояснение, на чем же мы собственно соревнуемся. Представляем вашему вниманию SDR-трансивер LimeSDR - очень мощную и дорогую штуку, возможности которой соответствуют ее цене: 2 канала и на прием, и на передачу; диапазон частот 100 кГц — 3.8 ГГц; полоса пропускания ограничена интерфейсом USB 3.0 и составляет 61 МГц. Для незнакомых с темой, SDR (Software Defined Radio, переводится как программно-определяемое радио) представляет собой железку, способную перерабатывать цифровые данные с компьютера в радиосигнал и наоборот. Возможности того, что можно делать с SDR, ограничены вычислительными способностями камня на борту и вашего ПК, а так же умением... программировать!
Все дело в существовании проекта GnuRadio - по сути среде программирования для SDR, где вы можете издеваться над радиосигналами так, как вашей душе угодно; плюс никто не мешает писать свои модули на питоне или С++. В итоге мы получаем мощный инструмент для моделирования, декодирования и анализа сигналов эфира. В сети есть много примеров, от управления дверным радиозвонком до приема сигналов из космоса со спутников.
Управление же мы осуществляем с помощью микрокомпьютера RaspberryPi 4. Одно из условий соревнования - наша подготовленная радиосистема должна быть автономной; мы лишь подаем питание (2019) или нажимаем на кнопку "старт" для нашего скрипта (2020-21), после чего магическим образом запускается обработка сигналов и данных, а так же необходимые сетевые взаимодействия с серверами организаторов (например, получение исходных данных для передачи в РЭБ или загрузка координат передатчика в Радиоперехвате).
Закончив наконец с описанием матчасти соревнований, перейдем непосредственно к нашему участию. Получив приглашение, наш клуб решил не оставаться в стороне - твердо решили поучаствовать и посмотреть, что такое высокие технологии. Вкратце о формате участия - команда состоит максимум из трех человек; заявиться может кто угодно (не только студенты, но и взрослые радиолюбители); проживание и дорога за счет участников, организаторы предоставляют питание на месте. С собой нужно брать ноутбуки для отладки, а у кого есть SDR - можно и их прихватить; однако во время проведения соревнований любые посторонние источники сигнала должны быть выключены.
Команду набирали недолго - собственно, там был я; один человек, который уже пользовался SDR; и третий человек, который не побоялся сложных слов в положении конкурса и в последствии помогал искать информацию (как показала практика - очень важная роль в команде, позволяющая разгрузить программистов).
Не зная еще про реальную сложность заданий, сгоряча заявились сразу на все три направления. "Самара в огне!" - слышали мы потом от организаторов=)
Опустим неинтересные организационные моменты с университетом и заявкой. Решив их и взяв наши моднявые выходные халаты с собой, мы направились в место проведения соревнований - в Зеленоград, а далее - на платформу Алабушево.
Сами соревнования состоят из двух дней подготовки - этакого "хакатона", где мы имеем возможность подготовить наш код для использования "в бою" на реальном оборудовании, и непосредственно дня соревнований (в 2021 году хакатон урезали до одного дня). Прослушав традиционное официальное вступление от организаторов, мы сели за предоставленное оборудование и начали читать и гуглить, гуглить и читать...
Как оказалось - опыта использования свистка RTL-SDR для решения данных заданий было явно недостаточно; среду GnuRadio настраивать для работы с LimeSDR на Raspberry - нетривиальная задача; да и вообще, все работает не так, как мы представляли. В итоге первого дня хакатона мы решили отказаться от участия во всех направлениях и вняли совету организаторов - сосредоточились на одном. Выбор пал на Радиосвязь/РЭБ; впоследствии мы поняли, что выбор был верен - это самое легкое направление соревнований.
В итоге половину ночи после первого дня и весь второй день мы пытались сделать рабочий код для... простой передачи пакета данных через эфир. И только утром перед соревнованиями у нас получилось понять, как это сделать; решение было под носом - и валялось оно в папке Examples среды программирования.
Это было применение энкодера пакетов с модуляцией GMSK (метод работает только на старой версии GnuRadio - уже в 2020 году мы застали обновление среды, в которой энкодер уже не работал). На создание помех противникам мы просто забили - ресурсов малинки не хватало на перескакивание с приема на передачу; ограничились только подбором минимальной ширины сигнала, дабы вывести его амплитуду на максимум. Так же, чуткий слух разведчика подсказал, что наши противники хотят использовать ту же частоту, что и у нас - однако, почему-то мы решили не менять ее. Впрочем, не зря=)
Кое-как успев отладить обе наши программы в отведенное время до "выступления" (к слову, у нас была единственная команда, которая смогла в автономность и сетевое взаимодействие в том году - сыграл двухмесячный опыт работы админом на линуксе, однако лучшее - враг хорошего), мы с замиранием сердца подали питание на наши Raspberry.
Та-дам! На фотографии ниже вы заметите, что в первом туре участвовала всего одна команда. А все потому, что наш код передатчика... не заработал.
Я не привык сдаваться даже в критических ситуациях и настоял на попытке разобраться, что же пошло не так. И что же вы думали?
Оказывается, иксы у малинки грузятся только в том случае, если подключен монитор! А мой код автозапуска был прописан в autostart, который не выполняется без монитора. Однако технически мы сошли с дистанции в первом туре, поэтому нам оставалась только одна попытка изменить расклад. И на этот раз мы отжали лишний монитор у "Радиоперехвата", ибо там участвовала всего одна команда из одного человека, и они уже отстрелялись.
В итоге, во второй раз все запустилось как надо; с огромным отрывом мы вышли вперед, заранее обогнав участников третьего тура. Этому послужил вышеупомянутый подбор ширины передаваемого сигнала; выходная амплитуда получилась такой, что мы смогли просто задавить передачу противника своим же сигналом (у них, в свою очередь, сигнал был более широкополосным, по простому размазанным).
Радость, ликование и осознание победы - непередаваемые ощущения =) поэтому вот вам фоточка с награждения. С тех самых пор мы поставили себе задачу - собрать все кубки с Радиофеста.
Я пропустил многие мелкие моменты, потому что пост и так стал длинным - поэтому оставлю ссылку на список участников 2019 года. Там же можно посмотреть итоги 20 и 21 года; если пост зайдет, постараюсь написать про 2020, и пнуть народ, который участвовал в 2021. Если вкратце о том, что было дальше - была более осознанная подготовка в связи с покупкой пары HackRF и получением опыта, больше команд от Контура, новые трудности и новые победы =)
Закончу пост благодарностью организаторам за проведение такого классного и прогрессивного мероприятия. Проведена и проводится огромная работа, в которой участвуют многие учреждения: Министерство науки и высшего образования РФ, Минпромторг России, Фонд перспективных исследований, Технополис Москва, МИЭТ (ребята из которого переквалифицировались из участников в организаторов - им отдельный плюсик). Данные соревнования действительно подтолкнули некоторых наших ребят серьезно заняться тематикой программно-определяемого радио; и я очень надеюсь, что мы еще не закончили ;)
Спасибо за внимание! Больше фотографий можно найти у нас в группе.