Настал второй за 10лет случай, когда в профессии программист‑микроконтроллеров понадобилась математика. Она нужна чтобы решить задачу из радиотехники.
Могут ли радио трансиверы определять дальность между собой? Можно сказать: «Да, конечно. Можно отправлять пакеты со своими GNSS координатами». Но что если нет GNSS приемников в составе оборудования? Пусть это вообще indoor оборудование. В чём сложность технологии радио определения дальности? Всё, что есть в распоряжении это возможность пулять и ловить пакеты.
Допустим, что у нас есть возможность точно запоминать моменты времени отправки и приема радио пакетов. После этого сразу жизнь становится намного веселее.
Тогда формально можно вычислить интервалы t_fly, t_delay, t_loop. Итак, дано:
Переменная |
Комментарий |
Единица измерения |
t_tx |
Время отправки на трансивере A |
с |
t_rx |
Время приема на трансивере А |
с |
T_tx |
Время отправки на трансивере B |
с |
T_rx |
Время приема на трансивере B |
с |
с |
Скорость света в воздухе |
м/c |
Найти расстояние R между трансиверами и выразить его в метрах.
Tак как радиоволны распространяются со скоростью света, то получается, что зная t_fly можно вычислить расстояние между трансиверами. R=c*t_fly.
Называется эта технология Time Of Flight (ToF). Всё на бумаге кажется ровным. Даже нет нужды в синхронизации начала счета часов двух трансиверов. Кажется что всё прекрасно. Однако нет. Тут же возникают неприятные вопросы: Какая нужна точность измерения времени отправки? Как добиться одинакового периода увеличения разрядов в двух таймерах? Каков механизм регистрирования TimeStamp(ов)?
Какое должно быть разрешение таймера измерения времени?
Допустим мы хотим измерять расстояние с точностью +-5см. Сколько времени нужно свету чтобы пройти 5см?
Свету надо 166ps, чтобы пролететь 5см. Это значит, что аппаратный таймер должен тактироваться на частоте более 5995849160 Hz =5995849.16 kHz=5995.84916 MHz=5.99584916 GHz.
Нужен всего‑то таймер на 6+GHz. И можно начинать говорить про radio ranging. Есть ли такие аппаратные таймеры в ASIC радио чипах? Ответ: да.
Как добиться одинакового периода увеличения разрядов в двух таймерах?
Можно поменять местами initiator и responder и повторить процесс, а затем взять среднее арифметическое от двух рассчитанных расстояний.
Акроним |
Расшифровка |
ps |
picoseconds |
DS-TWR |
Double-sided Two-way Ranging |
ASIC |
application-specific integrated circuit |
PLL |
phase lock loop |
SS-TWR |
Single-sided Two-way ranging |
с |
скорость света 299,792,458 м/c |
ToF |
time of flight |
GNSS |
Global navigation satellite system |
Вывод
Если присутствует механизм точного измерения моментов времени приема и отправки радио пакетов, то можно определять дальность между трансиверами. При этом синхронизация часов не требуется. Однако важна высокая скорость счета часов (+1 за 166ps), высокое разрешение такого таймера и высокая воспроизводимость технологии изготовления стабильных кварцевых резонаторов с PLL. При выполнении этих условий можно делать измерение расстояния между радио трансиверами.
Links
Система обнаружения сближения на базе технологии UWB
Запись сверх-широкополосных сигналов стандарта 802.15.4 UWB на почти санкционной технике
Online LaTeX Equation Editor - create, integrate and download
Fira Presents: Understanding UWB Ranging Techniques
Комментарии (17)
fk0
00.00.0000 00:00+8Статья ни о чём. Во-первых переотражения. Во-вторых Tdelay на вашем графике -- самое сложное. Особенно сложно его сделать более-менее постоянным. Потому, чтобы отправить ответ там столько всего нужно, и это всё выполняется отнюдь не за гарантированно константное время. Если в чипе трансивера какой-то аппаратный автомат, который вот точно-точно всё делает за фиксированное время, тогда как-то можно откалибровать и пользоваться (кстати в "Нордике" аппаратное подтверждение так работает).
Далее, таймеров на 6ГГц разумется так просто нигде нет. Если чип на 2.4ГГц в идеале там может быть таймер который считает такты несущей, но и то вряд ли. Между аналоговым генератором с ФАПЧ и сложной цифровой схемой таймера -- небольшая пропасть. Впрочем, измерение времени запросто может осуществляться не тупо подсчётом тактов, а фазовым методом: условно, меандры прямого и задержанного сигнала перемножаются (ксорятся), и получившиеся единички накапливаются на конденсаторе и измеряются АЦП. Имеется ввиду относительно низкочастотный меандр (где каждый фронт -- факт приёма или передачи посылки), а не несущая, разумеется. Кстати такой метод потенциально можно реализовать с любым трансивером, да хоть с известным "Нордиком" (NRF24L01): отправка пусть будет по фронту сигнала CS SPI-интерфейса (по нему же трансивер запустит передачу), а фронт приёма -- запрос прерывания. Первый фронт начинает заряд конденсатора, второй завершает. Потом напряжение на конденсаторе измеряется и вычисляется время отклика. Если процесс многократно повторять не сбрасывая заряд на конденсаторе, то можно многократно повысить точность измерений.
Существует гораздо более простой и доступный метод, который работает здесь и сейчас -- RSSI (амплитуда несущей принимаемого сигнала). Можно откалиброваться в реальных условиях, с реальными антеннами, и пользоваться. В помещении конечно опять же переотражения сильно мешать будут, ещё сильней, чем с TOF методом. Да и на открытом воздухе сказывается многолучевое распространение (по крайней мере прямая волна и отражённая от земли). Поляризация антенн ещё, наличие препятствий на пути сигнала. Но в целом метод вполне рабочий в определённых обстоятельтвах, и самое главное выход RSSI действительно есть почти во всех трансиверах.
lumag
00.00.0000 00:00+1Естественно, это все делается полуавтоматом. И UWB -- это ни разу не 2.4 GHz, это, например, 3 -- 10 GHz. Таймеры на ToF тоже аппаратные. На выход получаются уже измеренные значения, с учетом времени прохождения сигнала от счетчика до антенны и обратно. Точность измерения по тому же 802.15.4a — 499.2 MHz * 128.
fk0
00.00.0000 00:00+3UWB это не про гигагерцы, а про крайне не эффективный, но простейший способ модуляции. Когда полоса модулированного излучения на порядки наверное шире полосы модулирующего сигнала. UWB -- это, условно, "искровый передатчик". У которого спектральная мощость сосредоточена не в одной узкой вертикальной "палке", а в той же палке положенной на бок, т.е. размазана "по всему спектру". И приёмник устроен достаточно просто (фильтр ВЧ и амплитудный детектор), ему лишь важно что эта самая спектральная мощность пришла ему в антенну, совершенно не важно на какой именно частоте и с какой фазой. Поскольку спектр очень широкий, практически "весь", то помехи на конкретной частоте не очень мешают (на деле не совсем так, поэтому уходят в область очень высоких частот, где их просто нет). Крайне простые приёмник и передатчик, благодаря чему опять же удаётся освоить высокие частоты. И при этом удивительно низкий (по отношению к ширине полосы) битрейт. Но в абсолютных значениях всё равно высокий.
И уж такты поштучно там точно никто не считает, там даже кварц не нужен. Да и тактов как таковых нет. Есть широкополосный генератор шума используемый в качестве передатчика. Его модулируют путём включения (on/off keying). Цифровых схем на много-много гигагерц там не нужно. При желании UWB можно сделать самому на дискретных транзисторах, конденсаторах, диоде и микроконтроллере (нужен чтоб (де)модулировать сигнал).
Кстати чего далеко ходить, любой лазерный дальномер измеряет растояние. Там никаких гигагерцев нет. Там в простейшем случае один фотодиод и модулированный сигнал на лазерном диоде. Который отражённый приходит с задержкой по фазе. И по ней можно вычислить расстояние (сравнивая принятый фотодиодом и модулирующий сигналы). В UWB можно поступить ровно так же. Благо там длины волн уже короче измеряемых расстояний, так что всё получится.
Есть TOF камеры, но там тот же принцип: каждый пиксель поделён на две половинки и синхронно со вспышками подсвечивающего прожектора накопление света идёт на одну или вторую половину. Разница накопленного заряда говорит о расстоянии. Измерение чисто аналогое, без гигагерцев.
Когда говорится про "аппаратные таймеры", то скорей имеется ввиду, что из регистра у трансивера прямо расстояние считывается, а как оно получилось -- "секрет фирмы".
courser
00.00.0000 00:00А этот RSSI у вас действительно когда-нибудь работал, или это предположения? )
По факту картина его значений представляет совершенно чудовищную зебру, из-за переотражений и интерференции, и в помещении, и в поле. Совершенно непригодный метод. Но почему-то все предпочитают убедиться сами, а на слово не верят )
А вот TOF c UWB - прекрасно работает даже в мет. ангаре, где одно сплошное переотражение.
Hlad
00.00.0000 00:00+3Звучит как-то бредово. Погрешности времени выполнения микрокода добавят к единицам сантиметров десятки метров.
Скорее всего, в реальности это закрытый аппаратный блок, который на выходе тупо пишет в регистр расстояние в метрах/сантиметрах. И внутри он чисто аппаратный, и на 90% аналоговый, и данные он определяет, скорее всего, по итогам нескольких тысяч пересылок "туда-сюда". Нужно время - пинаем микруху, она отправляет сигнал. Там его аналоговая схема принимает, и отправляет обратно. Принятый сигнал - опять отправляем обратно, и так тысячу раз. На выходе получаем интервал времени в несколько десятков микросекунд, который уже позволяет отлично вычислить расстояние между двумя объектами. Можно даже подобрать количество переотражений, чтобы интервал времени в микросекундах был численно равен расстоянию в сантиметрах...
OpenSky108
00.00.0000 00:00+4Вообще не разу не програмировал контролёры и не работал с радио, так что не к теме контекста, если что. Правда, приходилось проектировать АЦП и один из простых методов когда что-то нужно измерить точно, но линейка имеет слишком большое деление это сложить измеряемую величину саму с собой n-раз. Грубо говоря повторяем цикл десять ( или 2^х :) ) раз подряд, измеряем суммарное время результат делим на десять и вот нам уже для той же точности нужна частота 6000/10=600 МГц. Плюсом идёт понижение отношения сигнал шум в корень из количества усреднений раз (могут быть ньюансы).
Ещё раз скажу я не в теме общего контекста и если тут скажут что, например, устройства не могут тратить столько времени на в общем вспомогательную процедуру или что на борту нет "мозгов" чтобы эту операцию произвести. Селяви), нужно придумывать что-то другое.
IvanPetrof
00.00.0000 00:00+1Лет 20-25 назад, когда я увлекался радиолюбительством, у меня была такая идея - два приёмопередатчика передают сигнал друг-другу. Причём не постоянно, а выключают передачу, когда принимают ответ другого передатчика и снова включают, когда не "слышат" его. Таким образом частота включения/выключения передачи будет обратно-пропорциональна расстоянию между приёмопередатчиками.
на практике я это, конечно, не проверял.
Stratum
00.00.0000 00:00+1Скорость света в вакууме и воздухе\бетоне\грунте существенно отличается. Даже погода (давление\температура\влажность) существенно влияет на скорость распространения радиоволн. Но если мерить большие километры с погрешностью в малые километры, то метод отлично работает. Для большей точности уже приходится измерять фазу волны с частотой, изменяемой по известному закону.
Мерить амплитуду сигнала (RSSI) тоже не прокатывает, так как даже небольшие изменения окружающей среды и взаимного расположения антенн ОЧЕНЬ сильно могут изменить уровень сигнала.
Даже на простых приемниках получается довольно точно мерить частоту и, как следствие, скорость через доплеровский сдвиг. Например у меня с помощью LoRa на 433МГц довольно неплохо измерялась скорость до 100км\ч
AlekDikarev
00.00.0000 00:00+1Дальности большие? А то может, переходите на темную сторону силы (акустика/гидроакустика)? =) Таймера хватит с разрешением в десятки микросекунд. Хотя, конечно, своих проблем тоже хватает.
aabzel Автор
00.00.0000 00:00Дальность еще не оценивал.
Надо откалибровать трансивер.
А гидро-акустика это очень весело. Как по мне океаны еще интереснее чем космос. С удовольствием разглядываю снимки затонувших артефактов
https://www.youtube.com/watch?v=oBOy9ywfmNs
aabzel Автор
00.00.0000 00:00Кто-нибудь понимает как вывели эту магическую формулу для Double-sided Two-way Ranging?
https://www.youtube.com/watch?v=5KN4dJdkHUk&t=126s
lumag
Когда в IEEE 802.15.4a добавили возможность измерения расстояний, это казалось фантастикой. К сожалению, это работало только для UWB PHYs, а поработать с такими не удалось.
olartamonov
В LoRa-чипах диапазона 2,4 ГГц есть ToF, в BLE 5.2 сделали AoA/AoD. Работает, попробовать несложно.
lumag
Когда мы пилили 802.15.4 был год 2013/2014 максимум.
courser
AoA-AoD пока на каком-то совсем уж демонстрационном уровне
крайне капризные в производстве антенные системы