Вот настал третий за 12 лет случай, когда в профессии программист-микроконтроллеров понадобилось вспомнить школьную математику. В этом тексте я представил перевод AppNote(а) "The mathematics of two-way ranging". Также я добавил свои комментарии в те места, которые неочевидны при первом прочтении. Это нужно для определения расстояния между двумя радио трансиверами, которые могут определять моменты времени прихода и отправки радиоволны. Такое умеют делать UWB трансиверы, например DW1000. Есть два трансивера, которые могут посылать и принимать пакеты с данными и регистрировать моменты времени отправки  и приема.  Определить время распространения радиоволны для вычисления расстояния между трансиверами (Range=C*ToF).Вот, кстати, сама формула вычисления ToF (TimeOfFlight). На первый взгляд ни разу не очевидно почему именно так. Итак, перевод. Рисунок 2 показывает путешествие радиоволны при double-sided two-way ranging и определяет терминологию для временных интервалов для обоих устройств. Устройство  А и устройство B принимают участие в двустороннем обмене сообщений для измерения времени распространения радиоволны.  На рисунок 2 устройство А посылает сообщение P1 для устройства B. Устройство B вскоре получает это сообщение. Через время Db устройство В посылает сообщение Р2 обратно устройству А. Сообщение Р2 прибывает на устройство А в момент времени Ra. После этого устройство А посылает сообщение Р1. Согласно рис.2 получается временное соотношение:  Таким образом   На практике временные интервалы измеряются реальными часами на устройствах А и В, которые работают независимо друг от друга. Какие-то часы идут быстрее какие-то медленнее по сравнению с идеальными часами. Часы тактируются кварцевым резонатором на плате у которого разве, что постоянная частота.  Давайте предположим, что часы на устройстве А и на устройстве В идут соответственно ka kb раз быстрее по отношению к идеальным, правильным часам. И реальное время измеренное на реальных часах придется домножать на коэффициенты ka kb. Ввиду этого реальное время теперь придется измерять переменными с шляпками ^. и аналогично  Используя значения реальных времен со шляпками для формулы (2) мы получаем  Ошибка измеренного времени радиоволны в пути вычисляется по формуле (8) для физического уровня UWB  значения выражений (ka-1) и (kb-1) могут достигать 20 ppm. Это 20*10^(-6). Для точных измерений важно держать ошибку менее 100ps, что значит что запаздывание Db должно быть менее 5us. Это невозможно так как даже короткие UWB пакеты обычно дольше 100us. Решение состоит в том, чтобы использовать две задержки туда и обратно. Исходя из формулы (4) мы знаем что  И аналогично из (6) Затем из формулы (10) и (1) мы можем сказать что  если взять формулу 12 и до множить (12) с обеих сторон на ka, то согласно (3) получим (12а). Запомним это равенство, оно нам скоро пригодится. из (12) и (3) получается  и аналогично ввиду симметрии схемы радиопередачи Формулы (12) и (13) хороши тем, что содержат величины со шляпками, которые можно измерить на реальных неточных часах внутри трансиверов: Ra Rb Da Db. Но вот проблема, у нас нет способа измерить коэффициенты ka и kb. И ошибки в этих величинах затмевают значение Tf. Однако есть одна вещь, которую мы можем сделать. Если умножить Ra на Rb основная часть стоимости умножения будет произведение Da на Db. Для этого члена произведения константы 𝑘𝑎 и 𝑘𝑏 компенсируют друг друга. Тогда из (12) и (13) И из (16)  (13) (12а) получаем (17) Из правой части выносим за скобки 2Tf. Знаменатель правой части умножаем на 1  (kb/kb). Получаем  В правой части числитель и знаменатель получились одинаковые! Можно сократить. Удивительно. Так как kb близок к 1, то kb можно отбросить.  аналогично  Так как ka близок к 1, то  ka можно отбросить.  Сейчас у нас есть 2 формулы для оценки ToF. И так как ka kb очень близки к 1. 0,99999<ka,kb<1.00002 мы можем оценить ToF. Эти оценки очень близки к фактическому Tf, потому что ka и kb очень близки к единице и, что особенно важно, их точность не зависит от задержек отклика, используемых в устройствах A и B. Какую формулу использовать (20) или (21)? Это зависит от того чьи часы более точные. Например если известно, что на устройстве B более точные часы, то то надо использовать формулу (21).Обратите внимание, что числители в формулах  (20) и (21) одинаковые. В случае идеальных часов знаменатели будут равны. Если не известно чьи часы точнее, то для вычисления приближенного времени надо вычислить среднее арифметическое от знаменателей (20) и (21) и использовать его в финальной формуле.  И вот мы вывели неочевидную формулу для вычисления ToF в режиме DS-TWR. Для DS-TWR в общем подразумевается что Da и Db должны быть примерно одинаковые, чтобы общая ошибка была мала. Но это не является ограничением при использовании формул (20), (21) и (22). Это бремя снимается и не требуется одинаковое время ответа ка каждом конце.  Как видите вывод формулы определения времени прохождения радиоволны с учетом компенсации нестабильности кварцевого резонатора весьма трудоемкий. Словарь Акроним Расшифровка DS-TWR double-sided two-way ranging PPM parts per million Da^ измеренное время реакции на poll на устройстве А Db^ измененное время реакции на poll на устройстве B Ra^ измеренное время ожидания ответа на устройстве А Rb^ измеренное время ожидания ответа на устройстве B Da реальное время реакции на poll на устройстве А Db реальное время реакции на poll на устройстве B ToF TimeOf Flight. Время распространения радиоволны на расстояние между трансиверами UWB Ultra-wideband Rb реальное время ожидания ответа на устройстве B Ra реальное время ожидания ответа на устройстве А ka коэффициент близкий к 1 для компенсации нестабильности кварца на устройстве A kb коэффициент близкий к 1 для компенсации нестабильности кварца на устройстве B А какую математику приходилось использовать вам будучи программистом микроконтроллеров? Напишете, если не сложно, в комментариях.Linkshttp://latex.codecogs.com/eqneditor/editor.php https://habr.com/ru/post/719542/https://www.youtube.com/watch?v=5KN4dJdkHUkhttps://www.youtube.com/watch?v=5KN4dJdkHUk&t=126shttps://www.youtube.com/watch?v=zA27p0Pj30U  Embedded SW/Firmware Engineer