Привет, Хабр!
В настоящее время существует не так уж много стандартов связи, которые с одной стороны, любопытны и интересны, с другой стороны, их описание не занимает 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, вот так «на пальцах» декодировать уже не получится. Они открыты для приема, в них нет ключей и криптографии. Во-вторых, возможно, в будущем они уйдут в историю и будут заменены спутниковой навигацией и более современными цифровыми системами. В третьих, изучение таких стандартов позволяет узнать интересные технические и исторические подробности того, как задачи решались на другой схемотехнике и элементной базе прошлого века. Так что владельцам приемников можно посоветовать принять такие сигналы, пока они еще работают.
Как обычно, всем удачных экспериментов.
В настоящее время существует не так уж много стандартов связи, которые с одной стороны, любопытны и интересны, с другой стороны, их описание не занимает 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, вот так «на пальцах» декодировать уже не получится. Они открыты для приема, в них нет ключей и криптографии. Во-вторых, возможно, в будущем они уйдут в историю и будут заменены спутниковой навигацией и более современными цифровыми системами. В третьих, изучение таких стандартов позволяет узнать интересные технические и исторические подробности того, как задачи решались на другой схемотехнике и элементной базе прошлого века. Так что владельцам приемников можно посоветовать принять такие сигналы, пока они еще работают.
Как обычно, всем удачных экспериментов.
Igor_O
Спасибо! Всегда было интересно, как на самолетах с фиксированной антенной ориентировались по радио-маякам.
Но, в целом… Это очередная история о том, как аналоговую задачу, "решаемую на двух операционных усилителях", решить используя вычислительную мощность, которая превышает всю вычислительную мощность, доступную человечеству на тот момент…
(Утрирую, конечно. Скорее всего, задачу тогда решали на трех операционных усилителях.)
osmanpasha
А как эта задача решается с помощью операционных усилителей?
drWhy
Пример фазового детектора на ОУ
osmanpasha
Мда, зачем спросил, все равно не понимаю
drWhy
Да эта схема на куче ресурсов для студентов есть с описанием, важно что работает. На самом деле реализовать на ОУ можно много чего.
К примеру, существовал лабораторный комплекс — аналоговая вычислительная машина с десятью тёплыми ламповыми ОУ, этакий крупный ящик с полем перемычек на верхней плоскости. Перемычками можно было задавать связи между каскадами и внутренние обратные связи. На АВМ, например, можно было отрабатывать основные методики наведения ракет на воздушную цель. На паре-тройке ламп реализовывался сигнал цели, на оставшихся — логика блока наведения ракеты. Наблюдать за результатами можно было с помощью двухлучевого осциллографа. Замечательная вещь.
amaksr
Да уж, помню когда на старших курсах, когда я думал, что все знаю про вычислительную технику, нам рассказали про аналоговые компьютеры, и как ими можно легко решать системы диф. уравнений, то вынесли мне мозг. Откровение было из разряда "а так чтоли тоже можно?"
VT100
Аналоговый вычислительный комплекс №6 у Сергея Фролова:
http://www.leningrad.su/museum/show_calc.php?n=491
sfrolov
Кстати, да
Igor_O
Была гораздо более продвинутая машина. МИР-2.
Там можно было на языке высокого уровня программу писать. Но при этом можно было "одной командной ассемблера" посчитать "интеграл по контуру", загрузив в соответствующие "регистры" начальные условия, формулу и формулу контура...
Но, говорят, та машина пугала людей тем, что умела в аналитическом виде сложные дифуры решать… Из-за этого сейчас в более-менее живом виде есть, кажется, ровно один экземпляр. Я его видел в Политехе в 1986-м году. Он тогда еще работал.
По слухам — там программа и данные хранились в цифре, но некоторые вычисления производились через "ЦАП-ОУ-АЦП".
DmitrySpb79 Автор
История развивается по спирали, возможно с квантовыми компьютерами опять будет так же :)
Javian
Я в живую видел аналоговую ЭВМ. Мне её работу продемонстрировали на вычислении колебаний многоэтажного здания при землетрясении. Показали формулу с кучей интегралов и потом запустили машину с помощью установки начальных коэффициентов через ISA плату в ПК Поиск. До сих пор помню шок при виде скачущих стрелок в «реальном времени» — в численном виде я решал интегралы в Пентиум2 300МГц и представлял как медленно считается интеграл с приемлемой точностью. А тут в реальном времени считает кучу интегралов, и результат оказывался в файле на ПК Поиск.
Serge78rus
К122УД1 не ОУ, а дифференциальный усилитель. В данной схеме он используется для перемножения двух сигналов, один из которых подается на один из дифференциальных входов, а второй управляет током дифференциального каскада и, следовательно, его коэффициентом усиления.
drWhy
Разница призрачна кмк. У операционного усилителя также дифференциальный вход, и из него можно получить дифференциальный усилитель добавлением нескольких резисторов. Да и маркировка намекает на схожесть, к примеру К140УД1 был самым распространённым операционным усилителем.
Serge78rus
— только до тех пор, пока не появилось ничего более приличного, потому как характеристики оставляли желать лучшего. Если уж говорить о самом популярном ОУ «всех времен и народов», то это скорее уж 741 (отечественный аналог 140УД7) — он был выпущен не намного позже, но выпускается и используется и по сей день.
DmitrySpb79 Автор
> Утрирую, конечно. Скорее всего, задачу тогда решали на трех операционных усилителях
Почему нет, вполне интересный проект для радиокружка. Только сравнение фаз тут лишь 1/10 от схемы, сначала нужен приемник на 113МГц, АМ детектор, ФНЧ, ФВЧ, ФМ-детектор, только потом можно фазы сравнивать и на стрелочный индикатор выводить :)
drWhy
На АМ детектор и фильтры кмк одного ОУ должно хватить ;)
dmitriyrudnev
В Перми приводной маяк ПЬ вещает на частоте 707 кГц. Я его на приемник прямого усиления уверенно принимаю.
DmitrySpb79 Автор
NDB != VOR, это разные маяки и разные протоколы
VT100
В "тёплом ламповом" Ли-2 (Douglas DC-3), в обтекателе над кабиной — поворотная рамочная антенна радиокомпаса. Искать, например, по "радиополукомпас РПК-2".
https://ru.wikipedia.org/wiki/%D0%9B%D0%B8-2#/media/%D0%A4%D0%B0%D0%B9%D0%BB:Liszunov_Li-2.svg
Boltik
Поворотная антенна используется для ADF маяков NDB. Там сигнал не содержит информации об относительном азимуте самолета, а просто определяется направление в котором сигнал самый сильный.
Yak52
Азимут на север узнавать не надо, он равен нулю.
drWhy
Что отнюдь не помешало написанию как минимум одного интересного фантастического
drWhy
Действительно интересно, спасибо.
Подходящая для Flipper Zero задачка.
DmitrySpb79 Автор
На Zero поддерживается SDR? Я думал, там ESP32, но может ошибаюсь.
osmanpasha
Cудя по их сайту, не поддерживается. И там вроде STM32, а не ESP32
drWhy
А что помешает сделать поддержку любого нового устройства через USB либо беспроводные интерфейсы?
DmitrySpb79 Автор
Если все равно Raspberry Pi с собой брать, зачем тогда Zero? Ну разве что по принципу из анекдота «какой же ты хакер без Zero» :)
Запустить нативно RTL-SDR и цифровые фильтры прямо на STM32 может не хватить ресурсов, но тут хз, я в их архитектуру не вникал.
drWhy
Ну там всё-таки упор на желание обойтись без основного компонента — изоленты.
Но идея завести компактное устройство (меньше ноутбука/планшета/смартфона), которое можно использовать как хаб для любых имеющихся устройств, свежа.
DmitrySpb79 Автор
Идея-то полезная, да. Только сегодня искал корпус для Raspberry Pi с ЖК-экраном, кнопками и литиевой батареей, чтобы сделать портативный IF-рекордер для трансивера, пока не нашел. Есть отдельно экраны, отдельно кнопки, отдельно powerbank, но сматывать все это синей изолентой вместе совершенно неохота.
sim2q
drWhy
Ну вот, как осенит, можно тоже на Кикстартер выкатывать — «больше товаров, хороших и разных».
Serge78rus
DmitrySpb79 Автор
Там стоит радиочип от Mirics прямо на плате, такой же как в приемниках SDRPlay, и он читается процом напрямую без USB. Разработчик девайса кстати русский, ветка с описанием есть на cqham, китайцы уже позже склонировали.
Serge78rus
Я про то, что топовых STM32 на цифровые фильтры уже вполне хватает, ведь MSi001 осуществляет на борту только широкополосную фильтрацию (полоса 200...1536 кГц), а дальнейшая обработка на ПЧ ложится на процессор.
DmitrySpb79 Автор
Это да. Там правда возможности уже на пределе — широкую полосу обзора не добавить, записи на SD (вроде) нет, новых декодеров не планируется. Я бы предпочел чтобы внутри был Nano Pi или Raspberry Pi, расширение возможностей в разы больше. Но вероятно было бы больше проблем с внутренними помехами и временем автономной работы.
Ниша портативных SDR давно актуальна, дома помех все больше, но хороших и законченных устройств с расширяемыми возможностями пока так и нет, даже странно, вроде 10 лет прошло с момента первых sdr. Не зря этот Malahit стал хитом как только появился, хотя он не идеален конечно, зато дешевый (что для большинства похоже ключевой момент:).
Serge78rus
Тут уже зависит от того, что у нас в приоритете — автономность и портативность законченного изделия или желание иметь некий программный конструктор, гибкий и с невысоким порогом вхождения. Совместить эти два направления в одном устройстве вряд ли получится.
Если в приоритете первое, то Pi видится не лучшим решением — проблемы Вы сами расписали, а при желании можно добавить еще. Возможно, при острой нехватке производительности, можно посмотреть в сторону разделения DSP и GUI частей на разные однокристаллки. Да даже хотя бы вертикальное расположение дисплея на ILI9488 и использование для водопада аппаратного скроллинга части изображения уже позволило бы сэкономить часть вычислительных ресурсов. Но гибкости, наподобие gnuradio, тут не получится.
Если второе, то действительно нужно что-то мощное и с Linux, да еще и с GUI на борту, но придется заплатить габаритами и автономностью. Но мы действительно получим хороший и простой в использовании конструктор, что на мой взгляд является одним из основных преимуществ SDR.
Короче, я бы предпочел иметь оба варианта в виде «игрушек» на разные случаи. Но это так, мечтательная «болтовня с дивана», в реальной жизни пользуюсь китайским Tecsun PL-660 и «на поиграть» его мне хватает (хотя нет, сейчас начну мечтать увидеть на нем еще и водопад :)
DmitrySpb79 Автор
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
Serge78rus
А сейчас у меня уже нет никакого энтузиазма что-то делать — проблем и по работе хватает выше крыши и ни сил, ни желания на что-то другое уже не остается. Просто иногда просыпаются приятные ностальгические воспоминания, когда я слышу шумы эфира, вот и слушаю изредка китайца (что-что, а шумы он принимает очень даже неплохо, хотя и шумы раньше были «лучше» и приятнее, как и трава зеленее).
DmitrySpb79 Автор
В этом плане чем и хорош SDR — все в цифре, шанс накосячить при сборке в разы меньше :)
Serge78rus
Меньше шанс что-то спалить в результате косяка, а уж где накосячить — это всегда найти можно, что в железе, что в софте.
dmitriyrudnev
Это они у Георгия RX9CIM позаимствовали…
Stanislavvv
Не хватит. Но тут rtl-sdr с его полосой в несколько МГц, которую бОльшая часть STM32 всё равно не сумеет обработать, да ещё и usb, под который требуется поддержка хоста в контроллере — большой перебор.
Требуется что-то попроще, с полосой поуже. Возможно даже сойдёт аналоговый однополосный приёмник, АЦП в контроллере есть.
sbanger3000
там стоит чип CC1101, а он работает только в нескольких диапазонах, выше 300 мгц. Так что наверное, услышать этот сигнал не удастся никак.
am80
«Пять копеек из амфоры археологии»:
Фраза "Вероятно, когда-то давно, штурман действительно слушал эти сигналы в наушниках и отмечал направления линейкой и циркулем на карте." должна быть заменена на «Когда-то давно, штурман, настроившись на частоту радиомаяка, ОБЯЗАТЕЛЬНО проверял соответствие позывных морзянкой и информации на карте, потому что радио — оно такое: на расстоянии 100 км ничего не слышно из-за грозы, зато „ловится“ какая-нибудь другая станция с другой стороны глобуса.
asso
Круто! Теоретически значит можно подключить SDR к телефону/планшету и запустить на нем программу для радионавигации. Практическая ценность сомнительная, но поиграться было бы интересно.
Yuriks111
Хорошая статья. Интересно что на территории некоторых стран военные решили, что VOR недостаточно точен и не может передать расстояние до маяка. Вместо того что бы добрать VOR, просто развернули параллельно систему TACAN и на многих военных самолетах НАТО теперь есть обе системы. Кроме того, на ВПП есть ILS, для точной посадки даже при нулевой видимости, а на самих самолетах установлен передатчик АЗН-В, который транслирует координаты и данные о полете воздушного судна. Эти данные собирает небезызвестный Flightradar24. Так что, на случай отказа спутников наземных систем хватает)
Dudarion
По такому же принципу работал трекинг в первой версии SteamVR
https://youtu.be/J54dotTt7k0
beerware
На фото не VOR а DVOR. VOR использует вращающуюся антенную систему, в DVOR применяется электронное сканирование элементов кольцевой антенной системы, имитирующее сигнал VOR.
Более современный принцип передачи угла внедрить уже не получится, потому что все борты оборудованы приемниками VOR и приходится подстраиваться под них.