Определяем направление на аэропорт с помощью RTL-SDR и GNU Radio

    Привет, Хабр!

    В настоящее время существует не так уж много стандартов связи, которые с одной стороны, любопытны и интересны, с другой стороны, их описание не занимает 500 страниц в формате PDF. Одним из таких, несложных для декодирования, является сигнал VHF Omni-directional Radio Beacon (VOR), используемый в аэронавигации.


    VOR Beacon (с) wikimedia.org

    Для начала вопрос читателям — как сформировать сигнал так, чтобы с помощью ненаправленной приемной антенны можно было определять направление? Ответ под катом.

    Общая информация


    Система Very high frequency Omni-directional Range (VOR) используется для аэронавигации еще с 50х годов прошлого века, и состоит из радиомаяков относительно небольшой дальности (100-200 км), работающих в диапазоне частот УКВ 108-117 МГц. Сейчас, в эпоху гигагерц, название very high frequency применительно к таким частотам звучит забавно и уже само по себе говорит о возрасте этого стандарта, но кстати, еще работают маяки NDB, работающие в диапазоне средних волн 400-900 КГц.

    Размещение направленной антенны на самолете конструктивно неудобно, поэтому возникла задача, как закодировать в самом сигнале информацию о направлении на маяк. Принцип работы «на пальцах» можно объяснить следующим образом. Представим, что у нас есть обычный маяк, посылающий узкий луч зеленого света, лампа которого вращается 1 раз в минуту. Очевидно, что раз в минуту мы будем видеть вспышку света, но одна такая вспышка много информации не несет. Добавим к маяку вторую ненаправленную лампу цвета красного цвета, вспыхивающую в момент, когда луч маяка «проходит» направление на север. Т.к. период вспышек и координаты маяка известны, посчитав задержку между красной и зеленой вспышками, можно узнать азимут на север. Все просто. Осталось сделать то же самое, но с помощью радио. Решено это было с помощью изменения фаз. Для передачи используется два сигнала: фаза первого является постоянной (reference), фаза второго (variable) меняется сложным образом в зависимости от направления излучения — каждому углу соответствует свой сдвиг фазы. Таким образом, каждый приемник будет получать сигнал со «своим» сдвигом фаз, пропорциональным азимуту на маяк. Технология «пространственной модуляции» осуществляется с помощью специальной антенны (Alford Loop, см КДПВ) и особой, довольно хитрой модуляции. Которая собственно и является темой этой статьи.

    Представим, что у нас есть обычный legacy-маяк, работающий с 50х годов, и передающий сигналы в обычной АМ-модуляции азбукой Морзе. Вероятно, когда-то давно, штурман действительно слушал эти сигналы в наушниках и отмечал направления линейкой и циркулем на карте. Мы хотим добавить к сигналу новые функции, но так, чтобы «не порушить» совместимость со старыми. Тема знакомая, ничто не ново… Было сделано следующим образом — к АМ сигналу добавили низкочастотный 30 Гц тон, исполняющий функцию reference-phase сигнала, и высокочастотную компоненту, закодированную частотной модуляцией на частоте 9.96 КГц, передающую variable phase сигнал. Выделив два сигнала и сравнив фазы, мы получаем искомый угол от 0 до 360 градусов, который и является нужным азимутом. При этом, всё это не помешает слушать маяк «обычным образом» и остается совместимым со старыми АМ-приемниками.

    Перейдем от теории к практике. Запустим SDR-приемник, выберем модуляцию АМ и ширину полосы 12 КГц. Частоты маяков VOR можно легко найти в сети. На спектре сигнал выглядит следующим образом:



    В данном случае сигнал маяка передается на частоте 113.950 МГц. В центре видна легко узнаваемая линия амплитудной модуляции и сигналы азбукой морзе (.- — … что значит AMS, Амстердам, аэропорт Schiphol). Вокруг на расстоянии 9.6 КГц от несущей видны два пика, передающие второй сигнал.

    Запишем сигнал в WAV (не MP3 — сжатие с потерями «убьет» всю структуру сигнала) и откроем его в GNU Radio.

    Декодирование


    Шаг 1. Откроем файл с записанным сигналом, и применим к нему фильтр низких частот, чтобы получить первый reference-сигнал. Граф GNU Radio показан на рисунке.



    Результат: низкочастотный сигнал с частотой 30 Гц.



    Шаг 2: декодируем variable phase сигнал. Как говорилось выше, он расположен на частоте 9.96 КГц, нам нужно перенести его на нулевую частоту и подать на FM-демодулятор.

    Граф GNU Radio:



    Все, задача решена. Мы видим два сигнала, разность фаз которых указывает на угол от приемника до VOR-маяка:



    Сигнал достаточно зашумленный, и для окончательного вычисления разности фаз может потребоваться дополнительная фильтрация, но принцип надеюсь, ясен. Для тех, кто забыл как определяется разность фаз, картинка из aviation.stackexchange.com:



    К счастью, все это вручную можно не делать: существует уже готовый проект на Python, декодирующий сигналы VOR из WAV-файлов. Собственно, его изучение и вдохновило меня на изучение этой темы.

    Желающие могут запустить программу в консоли и получить готовый угол в градусах из уже записанного файла:



    Фанаты авиации могут даже сделать себе портативный приемник из RTL-SDR и Raspberry Pi. Кстати, на «настоящем» самолете данный индикатор выглядит примерно так:


    Image © www.aopa.org

    Заключение


    Подобные сигналы «из прошлого века» определенно интересны для анализа. Во-первых, они достаточно простые, современный DRM или тем более GSM, вот так «на пальцах» декодировать уже не получится. Они открыты для приема, в них нет ключей и криптографии. Во-вторых, возможно, в будущем они уйдут в историю и будут заменены спутниковой навигацией и более современными цифровыми системами. В третьих, изучение таких стандартов позволяет узнать интересные технические и исторические подробности того, как задачи решались на другой схемотехнике и элементной базе прошлого века. Так что владельцам приемников можно посоветовать принять такие сигналы, пока они еще работают.

    Как обычно, всем удачных экспериментов.

    Средняя зарплата в IT

    111 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 7 185 анкет, за 2-ое пол. 2020 года Узнать свою зарплату
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 49

      +7

      Спасибо! Всегда было интересно, как на самолетах с фиксированной антенной ориентировались по радио-маякам.


      Но, в целом… Это очередная история о том, как аналоговую задачу, "решаемую на двух операционных усилителях", решить используя вычислительную мощность, которая превышает всю вычислительную мощность, доступную человечеству на тот момент…
      (Утрирую, конечно. Скорее всего, задачу тогда решали на трех операционных усилителях.)

        +1

        А как эта задача решается с помощью операционных усилителей?

          +3
          Пример фазового детектора на ОУ

          К122УД1
            +6

            Мда, зачем спросил, все равно не понимаю

              0
              Да эта схема на куче ресурсов для студентов есть с описанием, важно что работает. На самом деле реализовать на ОУ можно много чего.
              К примеру, существовал лабораторный комплекс — аналоговая вычислительная машина с десятью тёплыми ламповыми ОУ, этакий крупный ящик с полем перемычек на верхней плоскости. Перемычками можно было задавать связи между каскадами и внутренние обратные связи. На АВМ, например, можно было отрабатывать основные методики наведения ракет на воздушную цель. На паре-тройке ламп реализовывался сигнал цели, на оставшихся — логика блока наведения ракеты. Наблюдать за результатами можно было с помощью двухлучевого осциллографа. Замечательная вещь.
                +3

                Да уж, помню когда на старших курсах, когда я думал, что все знаю про вычислительную технику, нам рассказали про аналоговые компьютеры, и как ими можно легко решать системы диф. уравнений, то вынесли мне мозг. Откровение было из разряда "а так чтоли тоже можно?"

                  +2

                  Аналоговый вычислительный комплекс №6 у Сергея Фролова:
                  http://www.leningrad.su/museum/show_calc.php?n=491


                  Общий вид

                  image

                    +1
                    Кстати, да
                      +3

                      Была гораздо более продвинутая машина. МИР-2.
                      Там можно было на языке высокого уровня программу писать. Но при этом можно было "одной командной ассемблера" посчитать "интеграл по контуру", загрузив в соответствующие "регистры" начальные условия, формулу и формулу контура...


                      Но, говорят, та машина пугала людей тем, что умела в аналитическом виде сложные дифуры решать… Из-за этого сейчас в более-менее живом виде есть, кажется, ровно один экземпляр. Я его видел в Политехе в 1986-м году. Он тогда еще работал.


                      По слухам — там программа и данные хранились в цифре, но некоторые вычисления производились через "ЦАП-ОУ-АЦП".

                        +2
                        История развивается по спирали, возможно с квантовыми компьютерами опять будет так же :)
                    +1
                    Я в живую видел аналоговую ЭВМ. Мне её работу продемонстрировали на вычислении колебаний многоэтажного здания при землетрясении. Показали формулу с кучей интегралов и потом запустили машину с помощью установки начальных коэффициентов через ISA плату в ПК Поиск. До сих пор помню шок при виде скачущих стрелок в «реальном времени» — в численном виде я решал интегралы в Пентиум2 300МГц и представлял как медленно считается интеграл с приемлемой точностью. А тут в реальном времени считает кучу интегралов, и результат оказывался в файле на ПК Поиск.
                0
                К122УД1 не ОУ, а дифференциальный усилитель. В данной схеме он используется для перемножения двух сигналов, один из которых подается на один из дифференциальных входов, а второй управляет током дифференциального каскада и, следовательно, его коэффициентом усиления.
                  0
                  Разница призрачна кмк. У операционного усилителя также дифференциальный вход, и из него можно получить дифференциальный усилитель добавлением нескольких резисторов. Да и маркировка намекает на схожесть, к примеру К140УД1 был самым распространённым операционным усилителем.
                    +2
                    У операционного усилителя также дифференциальный вход, и из него можно получить дифференциальный усилитель добавлением нескольких резисторов.
                    Да, это так, причем его характеристики будут гораздо ближе к характеристикам идеального диффусилителя. Впрочем, чтоб приблизиться к идеалу, понадобится 3 (классический измерительный усилитель) или хотя бы 2 ОУ. Но попробуйте построить на ОУ аналоговый перемножитель, аналогичный приведенной Вами схеме, и без какого-либо внешнего нелинейного элемента у Вас это не получится. Дело в том, что ОУ предназначен для применения в схемах, характеристики которых полностью определяются цепями обратной связи и не зависят от параметров самого ОУ. Для этого ОУ выполняется с коэффициентом усиления с разорванной цепью обратной связи, который можно принять за бесконечность (реальные значения 500000 и более). Дифференциальный же усилитель, наподобие К122УД1, представляет собой лишь один усилительный каскад, коэффициент усиления которого небольшой и вполне конечен и определяется параметрами самого усилителя, а не цепями обратной связи. К тому же значением коэффициента усиления можно управлять, изменяя общий ток, протекающий через дифференциальную пару, что и используется в приведенной Вами схеме.
                    к примеру К140УД1 был самым распространённым операционным усилителем
                    — только до тех пор, пока не появилось ничего более приличного, потому как характеристики оставляли желать лучшего. Если уж говорить о самом популярном ОУ «всех времен и народов», то это скорее уж 741 (отечественный аналог 140УД7) — он был выпущен не намного позже, но выпускается и используется и по сей день.
              +3
              > Утрирую, конечно. Скорее всего, задачу тогда решали на трех операционных усилителях

              Почему нет, вполне интересный проект для радиокружка. Только сравнение фаз тут лишь 1/10 от схемы, сначала нужен приемник на 113МГц, АМ детектор, ФНЧ, ФВЧ, ФМ-детектор, только потом можно фазы сравнивать и на стрелочный индикатор выводить :)
                0
                На АМ детектор и фильтры кмк одного ОУ должно хватить ;)
                  0

                  В Перми приводной маяк ПЬ вещает на частоте 707 кГц. Я его на приемник прямого усиления уверенно принимаю.

                    +2
                    NDB != VOR, это разные маяки и разные протоколы
                  +2

                  В "тёплом ламповом" Ли-2 (Douglas DC-3), в обтекателе над кабиной — поворотная рамочная антенна радиокомпаса. Искать, например, по "радиополукомпас РПК-2".


                    0
                    Поворотная антенна используется для ADF маяков NDB. Там сигнал не содержит информации об относительном азимуте самолета, а просто определяется направление в котором сигнал самый сильный.
                  +1

                  Азимут на север узнавать не надо, он равен нулю.

                    0
                    Что отнюдь не помешало написанию как минимум одного интересного фантастического
                    произведения
                    Иэн Бэнкс, «Алгебраист»
                    +5
                    Действительно интересно, спасибо.
                    Подходящая для Flipper Zero задачка.
                      0
                      На Zero поддерживается SDR? Я думал, там ESP32, но может ошибаюсь.
                        +3

                        Cудя по их сайту, не поддерживается. И там вроде STM32, а не ESP32

                          0
                          Зачем это нужно?

                          Я люблю исследовать все вокруг и постоянно таскаю с собой разные инструменты для этого. У меня в рюкзаке: WiFi-адаптер, NFC-ридер, SDR, Proxmark3, HydraNFC, Raspberry Pi Zero (из-за этого бывают проблемы в аэропорту). Всеми этими приборами не так просто воспользоваться на бегу, когда у тебя в одной руке чашка с кофе или ты едешь на велосипеде. Нужно сесть, разложиться, достать компуктер — это не всегда удобно. Я мечтал об устройстве, которое бы реализовывало типичные сценарии атак, было всегда в боевой готовности и при этом не представляло из себя пачку разваливающихся плат, смотанных изолентой.

                          А что помешает сделать поддержку любого нового устройства через USB либо беспроводные интерфейсы?
                            0
                            Если все равно Raspberry Pi с собой брать, зачем тогда Zero? Ну разве что по принципу из анекдота «какой же ты хакер без Zero» :)

                            Запустить нативно RTL-SDR и цифровые фильтры прямо на STM32 может не хватить ресурсов, но тут хз, я в их архитектуру не вникал.
                              0
                              Ну там всё-таки упор на желание обойтись без основного компонента — изоленты.
                              Но идея завести компактное устройство (меньше ноутбука/планшета/смартфона), которое можно использовать как хаб для любых имеющихся устройств, свежа.
                                +1
                                Идея-то полезная, да. Только сегодня искал корпус для Raspberry Pi с ЖК-экраном, кнопками и литиевой батареей, чтобы сделать портативный IF-рекордер для трансивера, пока не нашел. Есть отдельно экраны, отдельно кнопки, отдельно powerbank, но сматывать все это синей изолентой вместе совершенно неохота.
                                  +1
                                  сматывать все это синей изолентой вместе совершенно неохота.
                                  вроде бы сейчас двусторонний разный скочт для этого?
                                    0
                                    Ну вот, как осенит, можно тоже на Кикстартер выкатывать — «больше товаров, хороших и разных».
                                  +1
                                  Запустить нативно RTL-SDR и цифровые фильтры прямо на STM32 может не хватить ресурсов
                                  Китайцы как то умудряются
                                    +2
                                    Там стоит радиочип от Mirics прямо на плате, такой же как в приемниках SDRPlay, и он читается процом напрямую без USB. Разработчик девайса кстати русский, ветка с описанием есть на cqham, китайцы уже позже склонировали.
                                      0
                                      Я про то, что топовых STM32 на цифровые фильтры уже вполне хватает, ведь MSi001 осуществляет на борту только широкополосную фильтрацию (полоса 200...1536 кГц), а дальнейшая обработка на ПЧ ложится на процессор.
                                        0
                                        Это да. Там правда возможности уже на пределе — широкую полосу обзора не добавить, записи на SD (вроде) нет, новых декодеров не планируется. Я бы предпочел чтобы внутри был Nano Pi или Raspberry Pi, расширение возможностей в разы больше. Но вероятно было бы больше проблем с внутренними помехами и временем автономной работы.

                                        Ниша портативных SDR давно актуальна, дома помех все больше, но хороших и законченных устройств с расширяемыми возможностями пока так и нет, даже странно, вроде 10 лет прошло с момента первых sdr. Не зря этот Malahit стал хитом как только появился, хотя он не идеален конечно, зато дешевый (что для большинства похоже ключевой момент:).
                                          0
                                          Тут уже зависит от того, что у нас в приоритете — автономность и портативность законченного изделия или желание иметь некий программный конструктор, гибкий и с невысоким порогом вхождения. Совместить эти два направления в одном устройстве вряд ли получится.

                                          Если в приоритете первое, то Pi видится не лучшим решением — проблемы Вы сами расписали, а при желании можно добавить еще. Возможно, при острой нехватке производительности, можно посмотреть в сторону разделения DSP и GUI частей на разные однокристаллки. Да даже хотя бы вертикальное расположение дисплея на ILI9488 и использование для водопада аппаратного скроллинга части изображения уже позволило бы сэкономить часть вычислительных ресурсов. Но гибкости, наподобие gnuradio, тут не получится.

                                          Если второе, то действительно нужно что-то мощное и с Linux, да еще и с GUI на борту, но придется заплатить габаритами и автономностью. Но мы действительно получим хороший и простой в использовании конструктор, что на мой взгляд является одним из основных преимуществ SDR.

                                          Короче, я бы предпочел иметь оба варианта в виде «игрушек» на разные случаи. Но это так, мечтательная «болтовня с дивана», в реальной жизни пользуюсь китайским Tecsun PL-660 и «на поиграть» его мне хватает (хотя нет, сейчас начну мечтать увидеть на нем еще и водопад :)
                                            +1
                                            C водопадом поиск станций гораздо эффективнее и приятнее, как давний пользователь SDR, могу подтвердить. На китайские приемники у меня вообще аллергия, всерьез их не могу воспринимать :) Как почитаешь ветку радиолюбителей об их доработках, там косяк на косяке. Там фактически все фильтры и всю приемную часть надо перебрать с недешевыми приборами, тогда оно заработает более-менее нормально. В Радио за последние годы цикл публикаций вроде был. Зато дешево конечно.

                                            Портативный приемник с Linux иметь было бы действительно классно, да и GUI под Linux в принципе есть — GQRX, CubicSDR. Но понятно что продукт нишевый и специфический, вкладываться в разработку все боятся, может не окупится.

                                            Кстати, SDR на базе Raspberry Pi недавно появился, но без экрана, клон KiwiSDR, рассчитан на web-интерфейс и удаленный доступ:
                                            hackaday.com/2020/09/30/kiwisdr-vs-raspberrysdr-a-tale-of-two-sdrs
                                              0
                                              Там фактически все фильтры и всю приемную часть надо перебрать с недешевыми приборами, тогда оно заработает более-менее нормально.
                                              С бытовухой так всегда было, что раньше с отечественной, что теперь с китайской. Вся радиолюбительская юность прошла в процессе создания «идеального приемника» и «идеального катушечного магнитофона». Причем, поскольку все делалось непременно «идеальным», то в приоритете был не результат, а сам процесс, поэтому ни одного полностью законченного изделия на том жизненном этапе я так и не создал, хотя было несколько вполне рабочих прототипов. Но на этапе, когда весь этот «ворох плат и проводов» надо было уже как-то упихать в корпус, приходили новые идеи и все начиналось с начала.

                                              А сейчас у меня уже нет никакого энтузиазма что-то делать — проблем и по работе хватает выше крыши и ни сил, ни желания на что-то другое уже не остается. Просто иногда просыпаются приятные ностальгические воспоминания, когда я слышу шумы эфира, вот и слушаю изредка китайца (что-что, а шумы он принимает очень даже неплохо, хотя и шумы раньше были «лучше» и приятнее, как и трава зеленее).
                                                0
                                                В этом плане чем и хорош SDR — все в цифре, шанс накосячить при сборке в разы меньше :)
                                                  +1
                                                  Меньше шанс что-то спалить в результате косяка, а уж где накосячить — это всегда найти можно, что в железе, что в софте.
                                      0
                                      Это они у Георгия RX9CIM позаимствовали…
                                      0
                                      Не хватит. Но тут rtl-sdr с его полосой в несколько МГц, которую бОльшая часть STM32 всё равно не сумеет обработать, да ещё и usb, под который требуется поддержка хоста в контроллере — большой перебор.
                                      Требуется что-то попроще, с полосой поуже. Возможно даже сойдёт аналоговый однополосный приёмник, АЦП в контроллере есть.
                                  +2
                                  там стоит чип CC1101, а он работает только в нескольких диапазонах, выше 300 мгц. Так что наверное, услышать этот сигнал не удастся никак.
                                  +7
                                  «Пять копеек из амфоры археологии»:
                                  Фраза "Вероятно, когда-то давно, штурман действительно слушал эти сигналы в наушниках и отмечал направления линейкой и циркулем на карте." должна быть заменена на «Когда-то давно, штурман, настроившись на частоту радиомаяка, ОБЯЗАТЕЛЬНО проверял соответствие позывных морзянкой и информации на карте, потому что радио — оно такое: на расстоянии 100 км ничего не слышно из-за грозы, зато „ловится“ какая-нибудь другая станция с другой стороны глобуса.
                                    0
                                    Круто! Теоретически значит можно подключить SDR к телефону/планшету и запустить на нем программу для радионавигации. Практическая ценность сомнительная, но поиграться было бы интересно.
                                      0
                                      Хорошая статья. Интересно что на территории некоторых стран военные решили, что VOR недостаточно точен и не может передать расстояние до маяка. Вместо того что бы добрать VOR, просто развернули параллельно систему TACAN и на многих военных самолетах НАТО теперь есть обе системы. Кроме того, на ВПП есть ILS, для точной посадки даже при нулевой видимости, а на самих самолетах установлен передатчик АЗН-В, который транслирует координаты и данные о полете воздушного судна. Эти данные собирает небезызвестный Flightradar24. Так что, на случай отказа спутников наземных систем хватает)
                                        0
                                        Тащем-та, DME зачастую стоит вместе с VOR.
                                        +1

                                        По такому же принципу работал трекинг в первой версии SteamVR
                                        https://youtu.be/J54dotTt7k0

                                          0
                                          На фото не VOR а DVOR. VOR использует вращающуюся антенную систему, в DVOR применяется электронное сканирование элементов кольцевой антенной системы, имитирующее сигнал VOR.

                                          Более современный принцип передачи угла внедрить уже не получится, потому что все борты оборудованы приемниками VOR и приходится подстраиваться под них.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое