Многоканальный имитатор GPS - зачем он нужен? Все знают, как используются одноканальные: для тестирования навигационных приемников при разработке и производстве, для обмана систем навигации в мирное и военное время. А зачем нужны многоканальные?
Излучать в эфир сигнал с многоканального имитатора особого смысла нет, если не брать в расчет редкие сценарии типа создания передающих антенных решеток для подавления навигации или имитации группировки спутников в безэховой камере.
А вот подключить такой имитатор к многоканальному навигационному приемнику или системе из разнесенных в пространстве отдельных приемников типа RTK может быть полезно. Такой имитатор можно использовать для отработки тяжело-воспроизводимых сценариев движения носителя, радио-помех и искажений в приемном тракте и в антенной системе. Также такой имитатор можно использовать при отладке и тестировании систем высокоточного позиционирования типа RTK.
Например, вы отлаживаете систему мониторинга стабильности конструкций (Structure Health Monitoring, SHM) на базе RTK. С помощью такого имитатора вы можете создать как сигнал RTK-базы, так и сигнал RTK-роверов на объектах с учетом модельной аварии конструкции и транслировать их на реальные приемники. Вам не нужно устанавливать систему на реально падающее здание или башню и ждать, когда все случится.
Или, например, у вас есть помехозащищенный многоканальный приемник для беспилотника, который нужно проверить. Если сам беспилотник готов к полетам, то можно установить на него приемник и запустить его в небо, создав на земле несколько источников помех требуемой мощности, и наблюдать работу приемника. Хуже, если источники помех должны также перемещаться на беспилотниках. Тогда вам нужна уже целая стая. Такие эксперименты для проверки приемника нужны обязательно, их не избежать, но теперь представьте, что в приемнике обнаружилась некая ошибка. Помехозащита не сработала в определенном сценарии. Все затраты на испытания были впустую, необходимо исправить ошибку и произвести испытания заново.
Или, например, у вас на летательном аппарате установлена система ориентации по навигационным сигналам и нужно ее протестировать на точность, на влияние помех на ее работу и на надежность работы при предельных углах крена и тангажа носителя. Если испытание на реальном носителе будет стоить дорого, то предварительная проверка системы на имитаторе будет очень полезна.
Для изготовления многоканального имитатора нам понадобится многоканальный синхронный синфазный (когерентный) передатчик на частоте навигационного сигнала. Можно качественно сформулировать требования к такому передатчику. К динамическому диапазону, линейности, побочным составляющим в спектре требования не будут жесткими. Хотя суммарный навигационный сигнал имеет сложную структуру, он не должен иметь большой уровень, соответственно, уровень побочных составляющих и линейность не имеют большого значения. Требования к точности воспроизведения фаз сигналов довольно высоки и их можно оценить, например, по требованию к точности систем ориентации: это единицы градусов. Эти требования должны выполняться в диапазоне температур и при заданных изменениях других параметров внешней среды. В системе желательно наличие возможность калибровки фазовых соотношений каналов и точная их корректировка. Хотя создание такой радио-системы решаемая задача, давайте поищем готовое решение.
На наше счастье, единственно правильное решение находится сразу: Xilinx RFSoC. Это система на кристалле (СнК) с программируемыми процессорной и логической частями и восемью или шестнадцатью каналами ЦАП с частотой дискретизации до 6ГГц каждый. Не будем вдаваться в теоретическую часть. За нас это уже сделали, даже на Хабре уже давно есть статья нашего уважаемого коллеги. Поиск в Сети также даст много пищи для вашего воображения. Перейдем к суровой практике.
В мире существует множество готовых плат с RFSoC. Цены на них, конечно, далеки от бюджетов энтузиастов. Вот некоторые примеры с ценами, где их удалось обнаружить:
Платы компании Trenz Electronic (цена была около 6к евро, но теперь пропала);
Платы от самого производителя чипов - Xilinx (цены по ссылке);
И теперь моя звезда, (ну, посмотрите какое чудо!). Этот модуль, вставляется в несущие платы Pentek.
Сами микросхемы "как бы" доступны для покупки, но цены на них больше цен на платы в разы.
Самое неприятное для российских инженеров, что доступ к этому буйству технологий для нас закрыт Госдепом США. Есть слухи, что избранным разрешен ввоз этих плат и микросхем для целей создания техники 5G, но тем горше это ограничение для нас, всех остальных. Свято место пусто не бывает, и сочится ручеёк RFSoC сквозь прозрачные границы нашей Родины, позволяя нам, неизбранным, прикоснуться к последним чудесам радиотехники. Так автору сотоварищи посчастливилось получить в руки некоторую плату с RFSoC и изготовить на ней многоканальный имитатор GPS. Здесь следует сразу на всякий случай заметить, что плату я получил случайно, и не факт, что мне это все не приснилось. Грешен излишними возлияниями.
Такой имитатор конкретно нам был определенно нужен для отладки техники такого типа. Также мы надеялись, что он нужен еще некоторому небольшому числу коллективов, которые занимаются чем-то подобным.
Итак, берем программный генератор сигнала GPS L1 C/A (opensource) от prof. Takuji Ebinuma. В Сети можно найти множество описаний и примеров его использования, есть одно от меня. Легким движением руки @catscuryделает его многоканальным. Теперь генератор может выдать не один файл, а несколько, согласно описанию, например, такому:
{
"Gps": {
"Enable": true,
"Snr_dbhz": 100
},
"Sources": [
],
"PositionRx": [ 59, 30, 350 ],
"SamplesFreqHz": 5000000,
"Duration_s": 100,
"Antennas": [
[ 0, 0, 0 ],
[ 1.3321, 2.5322, -1.1856 ],
[ -1.3321, 2.5322, 1.1856 ]
],
"Format": "int16",
"Ephemeries": "brdc1650.21n",
"Outfile": "iqdata.bin"
}
Для трех каналов по 100 секунд всего получается шесть гигабайт шестнадцатиразрядного комплексного сигнала на частоте дискретизации 5 МГц. Все, что теперь нужно, это "проиграть" эти файлы на частоте GPS L1 - 1575.42 МГц. Тогда @gaudima берет RFSoC и делает на нем "проигрыватель". Для этого был создан проект Vivado и софт для petalinux. В проекте задействуем модуль DDR4 на 8ГБ, подключенный к PL части RFSoC, как буфер для проигрываемого сигнала. Сначала софт настраивает все клоки и загружает сигнал в DDR, после этого PL часть читает его по кругу, интерполирует и отдает встроенному в RFSoC ЦАПу для излучения.
Блок-дизайн отвечающий за интерполяцию сигнала и его излучение выглядит так:
S_AXIS_DATA - данные идущие из DDR с частотой 5МГц;
fir_complier_0 - интерполяционный фильтр, 5МГц -> 250МГц;
axis_switch_0 - отключает фильтр при необходимости (интерполирует квадратным окном);
four_channel_splitter_0 - разбивает входную шину на 4 канала;
usp_rf_data_converter_0 - блок, который управляет АЦП и ЦАП, встроенными в RFSoC.
Настройки некоторых из этих блоков:
Когда все отлажено, берем любезно предоставленный нам для тестирования угломерный приемник (компас) K3X компании Фарватер, и с помощью уважаемого @Jef239 пытаемся увидеть работу угломера, а именно: определение углов пространственной ориентации, на столе. Напомню, что, так как такие угломерные приемники используют фазу несущей (режим RTK), то в реальных условиях для работы угломера нужно соблюсти некоторые условия. Во-первых, три антенны, которые подключаются к приемникам, должны быть не простые, а со стабильным фазовым центром. Во-вторых, в верхней полусфере не должно быть больших препятствий для прямого распространения волн со спутников. Последнее, к примеру, выполнить в большом городе получается не везде. На столе все сильно проще.
Подключаем выходы RFSoC ко входам угломера, запускаем генерацию, запускаем угломер. Нам нужно спешить, так как сейчас возможна длительность непрерывного излучения не более 100 секунд, а для сходимости угломерной задачи нужно время. Только для холодного старта позиционирования приемнику нужно не менее 30 секунд, чтобы получить из сигнала все нужные сообщения. После получения позиции по коду, угломеру еще нужно некоторое немаленькое время, чтобы сошлась его угломерная задача (я в этом плохо понимаю, обращайтесь к @Jef239в комментариях).
Для профессионалов, результаты тонких измерений имитатора (нуль база)
Нуль-база - режим тестирования параметров приемника в смысле измерения им фазы несущей. В физическом макете нам нужно было бы поставить в антенно-фидерный тракт делитель мощности, чтобы подать сигнал с одной антенны на каналы приемника угломера с его выходов.
Софт, созданный специалистами компании Фарватер, позволяет проанализировать статистические параметры восстановленной фазы несущей каждого спутника. Ниже представлены графики, по которым профессионал в сфере высокоточного позиционирования RTK может сделать вывод об уровне внутренних фазовых ошибок имитатора, при условии, что уровень ошибок приемника известен.
На графиках представлены вторые разности фаз. Можно увидеть, что разброс значений не превышает единиц градусов. За подробными объяснениями прошу обращаться к уважаемому @Jef239 в комментариях.
На входы угломера пришлось установить аттенюаторы, чтобы снизить SNR спутников до реального порядка - 50дБ/Гц.
После получения сходимости, угломер начинает выдавать углы ориентации.
Создадим три набора файлов c поворотами по разным осям: курсу, крену и тангажу.
Смещение на 180 градусов по курсу:
Смещение на 40 градусов по крену:
Смещение на 40 градусов по тангажу:
Все работает!
Теперь мы готовим испытания многоканального симулятора на помехозащищенном приемнике. Там мы добавим к сигналам спутников помехи и сможем задавать разное количество помех и их уровни относительно сигналов спутников и испытывать их влияние на приемник не вставая со стула.
Комментарии (32)
AntonSor
11.09.2021 09:35+3А вот интересно, с обычным HackRF такое сработает?
itsar Автор
11.09.2021 10:40+1Файлы симулятора он удачно воспроизводит в эфир, но многоканальность на нем не сделать
NumLock
11.09.2021 21:06Один HackRF на канал. Всё равно дешевле будет. Главное синхронно запустить.
Jef239
11.09.2021 21:47+1А как запускать синхронно? Допустимый шум 70 пикосекунд, лучше — до 7 пикосекунд, как у itsar. То есть выше на скринах по нульбазе уже непонятно — это шум приёмников или имитатора. А у вас там систематики вылезут.
Мы в своем время пытались на трехканальном вариант СН-3803М работать. Ну и выяснили, что при каждом запуске у него разная межканальная задержка. То есть мы можем записать данные, выяснит эту задержку и решиться по записанным данным. А вот в реалтайме разрешиться — не можем. Только в два прохода.NumLock
12.09.2021 14:40+1Hack RF можно управлять не только компом через USB. Там есть разъём напрямую. Можно попробовать использовать FPGA development board повесив несколько HackRF параллельно.
Sheferino
24.09.2021 18:48+1Отличная статья, спасибо!
А нет замысла добиться длительности больше 100 с? Всё таки для полноценных испытаний это очень мало, статистику не наберёшь. Если я правильно понял, надо лишь успевать читать и запихивать в RFSoC поток на скорости 60 МБ/с, что вполне реально для того же SSD.
А если еще и поток на лету генерировать, а не с диска читать - тогда длительность вообще потенциально ничем не ограничена. Это будет уже конкурент промышленным имитаторам.
И ещё есть пара вопросов, если позволите:
Шум до 0.01 цикла на L1 грубо соответствует 2 мм, что при длине базы 60 см даёт шум по углу около 10 минут, что по современным меркам грубовато. А на реальном сигнале сколько показывает?
В статье ничего не говорится про систематическую ошибку, только графики шума. Её не оценивали, или её не было?
itsar Автор
25.09.2021 10:09Спасибо за хорошие вопросы!
Замысел сделать генерацию непрерывной есть. Планируем сигнал подавать через PCIe с большого компа или рассчитывать внутри. Скорее всего первое.
С промышленными имитаторами конкурировать сейчас не хочется. У них слишком много наработанных функций. Мы хотим делать недорогой многоканальный имитатор для потребителей, которым дорого покупать существующие на рынке.
По вопросам:
Шум, по оценке @Jef239, действительно больше, чем нужно. Мы сейчас пересматриваем код имитатора, чтобы понять, у нас ли эта проблема. Если что-то будет найдено, и эту находку удастся превратить в статью на Хабре, Вы узнаете. Или можете связаться со мной в личке, чтобы я не забыл дать Вам знать.
Систематическая ошибка фаз каналов есть. Мы сейчас делаем на этом RFSoC софт для многоканальной записи и видим ее в тракте АЦП. Систематические ошибки угломера при работе от нашего имитатора мы не оценивали. Я думаю, это нам самим пока не по силам.
a_freeman
Писец, понимаю, что испытывают люди читая мои статьи O_o
А каким должно быть разнесение реальных антенн у угломерного приемника? Дециметр, метр, чем больше тем лучше?
itsar Автор
Как раз читал Вашу статью)
С точки зрения точности угломера - чем больше, тем лучше.
Jef239
А время фиксации? :-)
itsar Автор
Юрий, с точки зрения времени фиксации все наоборот)
Jef239
Причем точность улучшается хуже, чем линейно (синусом), а время фиксации растет квадратично.
itsar Автор
Спасибо! Очень интересны эти нюансы
Jef239
Ну нюансов много. Компасу не важная дальняя многолучевость (на 1-2 порядка больше длины баз) — она одинаково влияет на антенны. С ближней неподвижной хуже, но если ближняя не затронет 5-6 спутников — можно перестроиться.
А вот ближняя движущая многолучевость — это полная беда. А самая типичная многолучевость это… голова.
У заказчиков не фиксируется на двухметровой базе. Приезжаю, смотрю — антенны на уровне голов. И не фиксируются. Никак. Потому что головы — все время движутся. Предлагаю под установку стол подставить. Тащим стол, установку на него. Антенны стали выше голов сантиметров на 30 — и этого хватило для фиксации.
Вот такая смешная была командировка — на полчаса работы.Дальше я пошел по музеям, а музей тракторов там замечательный.
Jef239
Вообще мы используем штатно 60 см. С одной стороны, точность RTK — 5-7мм СКО. То есть чем больше база — тем больше точность. С другой стороны — время фиксации (перехода от неточного плавающего решения к точному фиксированному) зависит от площади поверхности сферы, то есть растет как квадрат базы.
Ещё тонкий момент — базу нужно выставлять точно, отклонение в длине базы на 5 мм уже критично — фиксироваться будет очень вяло. Поэтому на штатном морском компасе — жесткая база на 60 см.
ToSHiC
Можно ли использовать какие-то более компактные антенны для использования на крыше легкового авто? Предполагаем, что крыша металлическая и может служить экраном, а действие все происходит на открытой местности за городом.
Jef239
Конечно. В этом корпусе обычно TW2405 + подстилающая. Но мы в том же корпусе смарт-антенны делаем (антенна + приёмник + процессор) с выходом по RTCM 3. Просто это корабельный корпус, рассчитанный на нахождение на мачте.
А на испытания на автомобиль — мы обычно TW2410 ставим на магнитных держателях. Или антенны от автора статьи (itsar). Они немного лучше таллисмановских и немного дешевле. Тот редкий случай, когда импортозамещение улучшает характеристики.
Но это itsar сам расскажет, есть у него компактные или нет. Просто антенны под слоем снега хреново принимают. Значит надо, чтобы снег слетал — это означает антенна должна возвышаться над крышей кабины. То есть довольно большой грибок или конус.
Так что технически — даже некоторые китайские антенны годятся. Собственно все, что годится для RTK — более, чем подходит. А вот конструктивно — лучше что-то большое.
dernuss
Можете пояснить момент, что значит базу нужно выставлять точно? Отклонение от чего?
Jef239
Вариантов два. Первый — выставляем магнитные антенны (ну скажем на крыше автомобиля). Мы должны повернуть антенны хвостиками в одну сторону и сделать так, чтобы расстояние между центрами антенн было точно как в конфиге, ± 1 мм.
Второй — установили базы с какими-то длинами и измеряем их. Или рулеткой или записываем час измерений и меряем статически решением. Потом вносим базы в настройки.
У спутникового компаса (угломера) быстрая фиксация по сфере. На прогретых приёмниках — часто по первой же эпохе измерений. Но для этого ему надо точно знать радиус сферы.
dernuss
Хм, а если использовать модули с RTK ядром внутри? например zed-f9p
Jef239
А что нам это даст, кроме сильного удорожания конструкции? Приёмник в 10 раз дороже, двухчастотная антенна для него в 2 раза дороже, а выигрыш в чем?
Вы проверяли, ZED-F9P зафиксируется при ускорении в 2g? А это обычная ситуация на мачте во время качки. А ставить антенны ниже — нельзя, будет затенение.
Можно проще. Выкинуть свой софт и поставить RTKLib. Собственно в ZED-F9P именно он и стоит. Мы сравнивали свой софт (не компасный, правда) с RTKLib на одних и тех же приёмниках. То есть GEOS-5MR у нас и GeoS-5 RTK у GeoStar. Выводы:
Так что я не вижу причин что-то менять. Работать на произвольных базах мы умеем, просто в компасе это не нужно. Там нужна быстрая фиксация в условиях качки. То есть за одну эпоху, а не быстрой статикой.
dernuss
Всё ниже и выше сказанное мной это просто вопросы из за отсутствия опыта в этом
не надо самому вычислять, ну и ZED-F9P вроде позиционируется как точный
нет конечно
Jef239
Три ZED-F9P курс, крен, дифферент не дадут. То есть самим их вычислять нало, значит процессор все равно нужен. ZED-F9P -двухчастотник, то есть может работать с базами в сотни км (одночастотник — до 20 км). Точность RTK — примерно одинакова, что у дешевых приёмников. что у дорогих тримблов — 5-7мм СКО + 1 мм на километр длины базы.
Для корабельного спутникового компаса фиксация в шторм, когда мачты с антеннами качает — это обязательная опция. Но базы у него всегда жесткие — чтобы штормом антенны не сдвинуло.
Единственный момент, когда базы не жесткие — это испытания на крыше легковушки. А на крышу комбайна или грузовика уже ставится жестко, при помощи кронштейнов. Потому как главное — чтобы снег с антенн слетал и водой не заливало. А это означает довольно крупные антенны, которые с магнитного крепления сдует ветром.
dernuss
а что за проц для кинематики используете?
Jef239
Разные были на разных платах. Сейчас от linux отказались, поэтому для компаса STM32F7 хватает. Но чаще ставится STM32H7 для универсальности платы.
P.S. А что, есть варианты? 8 ком-портов нужно и 512К встроенного ОЗУ. Что на рынке есть кроме F7/H7?
dernuss
Я не знаю, там только пока курс нужен, поэтому используем 2 модуля. Навсякий спросил, надеялся что не stm32, так как с ними напряженка
Jef239
Вам сотни экземпляров нужны? Вообще можно на любом linux-проце сделать. Просто это дороже будет.
Видимо дальше цены и объемы в личке обсуждать.