Настал второй за 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см
свету надо 166ps чтобы пролететь 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

DWM1000 UWB ranging radio test (arduino)

UWB Minutes: Ranging Technics

UWB Minutes: Ranging Technics. Time Difference of Arrival

Комментарии (17)


  1. lumag
    00.00.0000 00:00
    +1

    Когда в IEEE 802.15.4a добавили возможность измерения расстояний, это казалось фантастикой. К сожалению, это работало только для UWB PHYs, а поработать с такими не удалось.


    1. olartamonov
      00.00.0000 00:00
      +1

      В LoRa-чипах диапазона 2,4 ГГц есть ToF, в BLE 5.2 сделали AoA/AoD. Работает, попробовать несложно.


      1. lumag
        00.00.0000 00:00
        +1

        Когда мы пилили 802.15.4 был год 2013/2014 максимум.


      1. courser
        00.00.0000 00:00
        +1

        AoA-AoD пока на каком-то совсем уж демонстрационном уровне
        крайне капризные в производстве антенные системы


  1. fk0
    00.00.0000 00:00
    +8

    Статья ни о чём. Во-первых переотражения. Во-вторых Tdelay на вашем графике -- самое сложное. Особенно сложно его сделать более-менее постоянным. Потому, чтобы отправить ответ там столько всего нужно, и это всё выполняется отнюдь не за гарантированно константное время. Если в чипе трансивера какой-то аппаратный автомат, который вот точно-точно всё делает за фиксированное время, тогда как-то можно откалибровать и пользоваться (кстати в "Нордике" аппаратное подтверждение так работает).

    Далее, таймеров на 6ГГц разумется так просто нигде нет. Если чип на 2.4ГГц в идеале там может быть таймер который считает такты несущей, но и то вряд ли. Между аналоговым генератором с ФАПЧ и сложной цифровой схемой таймера -- небольшая пропасть. Впрочем, измерение времени запросто может осуществляться не тупо подсчётом тактов, а фазовым методом: условно, меандры прямого и задержанного сигнала перемножаются (ксорятся), и получившиеся единички накапливаются на конденсаторе и измеряются АЦП. Имеется ввиду относительно низкочастотный меандр (где каждый фронт -- факт приёма или передачи посылки), а не несущая, разумеется. Кстати такой метод потенциально можно реализовать с любым трансивером, да хоть с известным "Нордиком" (NRF24L01): отправка пусть будет по фронту сигнала CS SPI-интерфейса (по нему же трансивер запустит передачу), а фронт приёма -- запрос прерывания. Первый фронт начинает заряд конденсатора, второй завершает. Потом напряжение на конденсаторе измеряется и вычисляется время отклика. Если процесс многократно повторять не сбрасывая заряд на конденсаторе, то можно многократно повысить точность измерений.

    Существует гораздо более простой и доступный метод, который работает здесь и сейчас -- RSSI (амплитуда несущей принимаемого сигнала). Можно откалиброваться в реальных условиях, с реальными антеннами, и пользоваться. В помещении конечно опять же переотражения сильно мешать будут, ещё сильней, чем с TOF методом. Да и на открытом воздухе сказывается многолучевое распространение (по крайней мере прямая волна и отражённая от земли). Поляризация антенн ещё, наличие препятствий на пути сигнала. Но в целом метод вполне рабочий в определённых обстоятельтвах, и самое главное выход RSSI действительно есть почти во всех трансиверах.


    1. lumag
      00.00.0000 00:00
      +1

      Естественно, это все делается полуавтоматом. И UWB -- это ни разу не 2.4 GHz, это, например, 3 -- 10 GHz. Таймеры на ToF тоже аппаратные. На выход получаются уже измеренные значения, с учетом времени прохождения сигнала от счетчика до антенны и обратно. Точность измерения по тому же 802.15.4a — 499.2 MHz * 128.


      1. fk0
        00.00.0000 00:00
        +3

        UWB это не про гигагерцы, а про крайне не эффективный, но простейший способ модуляции. Когда полоса модулированного излучения на порядки наверное шире полосы модулирующего сигнала. UWB -- это, условно, "искровый передатчик". У которого спектральная мощость сосредоточена не в одной узкой вертикальной "палке", а в той же палке положенной на бок, т.е. размазана "по всему спектру". И приёмник устроен достаточно просто (фильтр ВЧ и амплитудный детектор), ему лишь важно что эта самая спектральная мощность пришла ему в антенну, совершенно не важно на какой именно частоте и с какой фазой. Поскольку спектр очень широкий, практически "весь", то помехи на конкретной частоте не очень мешают (на деле не совсем так, поэтому уходят в область очень высоких частот, где их просто нет). Крайне простые приёмник и передатчик, благодаря чему опять же удаётся освоить высокие частоты. И при этом удивительно низкий (по отношению к ширине полосы) битрейт. Но в абсолютных значениях всё равно высокий.

        И уж такты поштучно там точно никто не считает, там даже кварц не нужен. Да и тактов как таковых нет. Есть широкополосный генератор шума используемый в качестве передатчика. Его модулируют путём включения (on/off keying). Цифровых схем на много-много гигагерц там не нужно. При желании UWB можно сделать самому на дискретных транзисторах, конденсаторах, диоде и микроконтроллере (нужен чтоб (де)модулировать сигнал).

        Кстати чего далеко ходить, любой лазерный дальномер измеряет растояние. Там никаких гигагерцев нет. Там в простейшем случае один фотодиод и модулированный сигнал на лазерном диоде. Который отражённый приходит с задержкой по фазе. И по ней можно вычислить расстояние (сравнивая принятый фотодиодом и модулирующий сигналы). В UWB можно поступить ровно так же. Благо там длины волн уже короче измеряемых расстояний, так что всё получится.

        Есть TOF камеры, но там тот же принцип: каждый пиксель поделён на две половинки и синхронно со вспышками подсвечивающего прожектора накопление света идёт на одну или вторую половину. Разница накопленного заряда говорит о расстоянии. Измерение чисто аналогое, без гигагерцев.

        Когда говорится про "аппаратные таймеры", то скорей имеется ввиду, что из регистра у трансивера прямо расстояние считывается, а как оно получилось -- "секрет фирмы".


    1. courser
      00.00.0000 00:00

      А этот RSSI у вас действительно когда-нибудь работал, или это предположения? )
      По факту картина его значений представляет совершенно чудовищную зебру, из-за переотражений и интерференции, и в помещении, и в поле. Совершенно непригодный метод. Но почему-то все предпочитают убедиться сами, а на слово не верят )

      А вот TOF c UWB - прекрасно работает даже в мет. ангаре, где одно сплошное переотражение.


  1. Hlad
    00.00.0000 00:00
    +3

    Звучит как-то бредово. Погрешности времени выполнения микрокода добавят к единицам сантиметров десятки метров.

    Скорее всего, в реальности это закрытый аппаратный блок, который на выходе тупо пишет в регистр расстояние в метрах/сантиметрах. И внутри он чисто аппаратный, и на 90% аналоговый, и данные он определяет, скорее всего, по итогам нескольких тысяч пересылок "туда-сюда". Нужно время - пинаем микруху, она отправляет сигнал. Там его аналоговая схема принимает, и отправляет обратно. Принятый сигнал - опять отправляем обратно, и так тысячу раз. На выходе получаем интервал времени в несколько десятков микросекунд, который уже позволяет отлично вычислить расстояние между двумя объектами. Можно даже подобрать количество переотражений, чтобы интервал времени в микросекундах был численно равен расстоянию в сантиметрах...


  1. OpenSky108
    00.00.0000 00:00
    +4

    Вообще не разу не програмировал контролёры и не работал с радио, так что не к теме контекста, если что. Правда, приходилось проектировать АЦП и один из простых методов когда что-то нужно измерить точно, но линейка имеет слишком большое деление это сложить измеряемую величину саму с собой n-раз. Грубо говоря повторяем цикл десять ( или 2^х :) ) раз подряд, измеряем суммарное время результат делим на десять и вот нам уже для той же точности нужна частота 6000/10=600 МГц. Плюсом идёт понижение отношения сигнал шум в корень из количества усреднений раз (могут быть ньюансы).

    Ещё раз скажу я не в теме общего контекста и если тут скажут что, например, устройства не могут тратить столько времени на в общем вспомогательную процедуру или что на борту нет "мозгов" чтобы эту операцию произвести. Селяви), нужно придумывать что-то другое.


  1. IvanPetrof
    00.00.0000 00:00
    +1

    Лет 20-25 назад, когда я увлекался радиолюбительством, у меня была такая идея - два приёмопередатчика передают сигнал друг-другу. Причём не постоянно, а выключают передачу, когда принимают ответ другого передатчика и снова включают, когда не "слышат" его. Таким образом частота включения/выключения передачи будет обратно-пропорциональна расстоянию между приёмопередатчиками.

    на практике я это, конечно, не проверял.


  1. kasiopei
    00.00.0000 00:00
    +1

    принцип определения пути радиосигнала..


  1. simenoff
    00.00.0000 00:00
    +1

    "Радиотрансиверами" же?


  1. Stratum
    00.00.0000 00:00
    +1

    1. Скорость света в вакууме и воздухе\бетоне\грунте существенно отличается. Даже погода (давление\температура\влажность) существенно влияет на скорость распространения радиоволн. Но если мерить большие километры с погрешностью в малые километры, то метод отлично работает. Для большей точности уже приходится измерять фазу волны с частотой, изменяемой по известному закону.

    2. Мерить амплитуду сигнала (RSSI) тоже не прокатывает, так как даже небольшие изменения окружающей среды и взаимного расположения антенн ОЧЕНЬ сильно могут изменить уровень сигнала.

    3. Даже на простых приемниках получается довольно точно мерить частоту и, как следствие, скорость через доплеровский сдвиг. Например у меня с помощью LoRa на 433МГц довольно неплохо измерялась скорость до 100км\ч


  1. AlekDikarev
    00.00.0000 00:00
    +1

    Дальности большие? А то может, переходите на темную сторону силы (акустика/гидроакустика)? =) Таймера хватит с разрешением в десятки микросекунд. Хотя, конечно, своих проблем тоже хватает.


    1. aabzel Автор
      00.00.0000 00:00

      Дальность еще не оценивал.
      Надо откалибровать трансивер.

      А гидро-акустика это очень весело. Как по мне океаны еще интереснее чем космос. С удовольствием разглядываю снимки затонувших артефактов
      https://www.youtube.com/watch?v=oBOy9ywfmNs


  1. aabzel Автор
    00.00.0000 00:00

    Кто-нибудь понимает как вывели эту магическую формулу для Double-sided Two-way Ranging?
    https://www.youtube.com/watch?v=5KN4dJdkHUk&t=126s