Как стать автором
Обновить

Зачем Программисту Микроконтроллеров Математическая Статистика? (или так ли хороши UWB трансиверы?)

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров7.2K

Как обычно на 10+ году работы программистом микроконтроллеров мне наконец-то пригодилась математическая статистика из ВУЗ(овского) курса по теории вероятностей. Сейчас объясню почему...

Математическая статистика работает со случайными величинами. В данном случае случайной величиной является измеренное значение расстояния при помощи UWB трансиверов.

В этом тексте я изложил свой inside(рский) опыт работы с UWB. Тут я подвергнул тестированию модули DWM1000, исследовал показания расстояния, измеренные UWB трансиверами.

Зачем это всё надо?

Дело в том что UWB трансиверы надо калибровать. Просто из коробки DWM1000 не будут работать правильно. Надо знать значение смещения, чтобы вычитать его из результирующего измерения. Также можно прописать калибровочные константы в регистры компенсации запаздывания сигнала на керамических антеннах.

Все измерительные приборы неидеальные. Отклонения вызваны, в частности, нестабильностью техпроцесса производства компонентов из которых собирают разные экземпляры электронных устройств.

Определимся с терминологией

Точность - отдельные измерения могут сильно отличаться друг от друга. Это показывает ширина кривой распределения. Степень такого разброса данных и называется точностью измерения.

Погрешность - величина равная разности между истинным значением величины и измеренным значением.

Каков план?

Всё очень просто:

1--Установить 2 UWB трансивера на известном расстоянии D. Например D=107.5 сантиметра (+-3мм), как в моем случае.

2--Включить UWB поле. При помощи алгоритма (DS-TWR) непрерывно произвести N сырых измерений расстояний и запомнить все измерения в памяти microSD карты.

3--Вычислить математическое ожидание Mu для N измерений по формуле (1).

\mu = \frac{1}{N}\sum_{i=0}^{N-1} x_{i}  \;\;\;\;\;\;\;\;\;\;\;                (1)

4--Вычислить разницу (offset) между математическим ожиданием и реальным расстоянием D=107.5cm между UWB нодами.

OffSet=\mu-distance_{real}        \;\;\;\;\;\;\;\;\;\;\;                (2)

5--Прописать разницу OffSet как калибровочные данные для данного пары трансиверов в NVRAM память прошивки микроконтроллера и пользоваться далее этой константой. OffSet и будет выступать в качестве погрешности.

6--Вычислить среднеквадратическое отклонение (СКО) по формуле (3). СКО даст нам количественную характеристику для измерения точности измерений. Чем больше CКО, тем ниже точность. Чем меньше СКО, тем выше точность.

\mu = \frac{1}{N}\sum_{i=0}^{N-1} x_{i}  \;\;\;\;\;\;\;\;\;\;\;                (1) \\ \sigma = \sqrt{  \frac{1}{N-1}\sum_{i=0}^{N-1} (x_{i}-\mu)^{2} } \;\;\;\;\;\;\;\;\;\;\;                (3) \\

Практическая часть

UWB трансиверы на самом деле сами по себе не измеряют расстояние. UWB чипы всего лишь показывают время отправки и время приёма бинарного радио пакета. Вычисление длительности пролёта радиоволны (TOF) это уже задача прошивки микроконтроллера, к которому присоединён трансивер. Про то как устроен алгоритм прошивки можно почитать тут https://habr.com/ru/articles/723822/ . Далее, умножая TOF на скорость света (с) мы и получаем расстояние между устройствами.

Для сбора статистики мне, естественно, нужно оборудование. Это, минимум, UWB передатчик, приемник, SD-карта. Плюс самая базовая аппаратная отладка: UART, LED, кнопка. В результате кристаллизировалась вот такая схема макета.

Тут две UWB ноды измеряют между собой расстояние и записывают измеренные значения на SD карту в текстовый файл с расширением *.csv.

В связи с этим также пришлось написать драйвер SD карты по SPI, подключить поддержку файловой системы FAT-FS, написать весь необходимый MCAL: Flash, GPIO, Timer, SPI, UART, SPI, PWM. Драйвер UWB трансивера я взял как есть с сайта производителя Qorvo. Также пришлось написать NVRAM для хранения калибровочных данных в on-chip NOR-Flash.

К счастью у нас были разработаны и произведены полностью твердотельные электронные платы со всей необходимой аппаратной начинкой: MCU, UWB, SD-micro, LEDs, Buttons + NDAs. Для изучения технологии UWB.

Учебно-тренировочная электронная плата с UWB трансивером на борту
Учебно-тренировочная электронная плата с UWB трансивером на борту

C этими board(ами) и будем проводить все эксперименты.

Постановка эксперимента с UWB измерениями сопряжена с калейдоскопом разнообразных накладных расходов и целой кучей нюансов. Оказалось что тут надо не только программировать, но ещё необходимо начертить, изготовить соответствующий конструктив. Организовать производство custom(ных) пластиковых деталей. Также надо было найти и закупить нужные комплектующие: метизы, крепёж, кабели. Проложить проводку. Скомпоновать стенд.

изображение стенда калибровки UWB в натуре
изображение стенда калибровки UWB в натуре

Наконец собрав и подключив всю эту аппаратуру к электропитанию я произвел 2117 непрерывных измерений одного и того же расстояния 107,5см. Вот, собственно, сырые исходные данные этого эксперимента
https://docs.google.com/spreadsheets/d/1yM0hzInoK0XOBK7-548vcXkEuUn-qki3b7mLxi92MGg/edit#gid=268529087

Эти логи случайной величины записывались непрерывно 24 часа подряд! Получилось, что каждые 40 секунд производилось одно UWB измерение расстояние согласно алгоритму DS-TWR.

Скормив получившийся *.СSV файл в google-spreadsheets и построив там гистограмму я увидел, что измерения выстроились похожими на нормальное распределение плотности вероятности. Кто бы мог подумать что так будет!...

Гистограмма UWB измерений. X-метры, Y количество измерений в интервале. Шаг: 0.0001m
Гистограмма UWB измерений. X-метры, Y количество измерений в интервале. Шаг: 0.0001m

Как видно, измерения расстояния из одного интервала оказываются более вероятны, чем значения измерений из другого интервала. А это та же гистограмма, но при шаге 5см.

Гистограмма UWB измерений. X-метры, Y количество измерений в интервале.
Гистограмма UWB измерений. X-метры, Y количество измерений в интервале.


то же в виде таблицы

Теперь настало время вычислить математическое ожидание по формуле (1). На языке Си это будет выглядеть так.

bool statistics_expected_value(RandomVariable_t* const Node){
    bool res = false;
    if(Node) {
        Node->sum = 0.0;
        uint32_t i = 0;
        for (i=0; i<Node->size; i++) {
            Node->sum += Node->value[i];
        }
        Node->expected_value = Node->sum / Node->size;
        LOG_INFO(STATISTICS, "ExpectedValue %f", Node->expected_value);
        res = true;
    }
    return res;
}

Код вычисления среднеквадратического отклонения.

#define POW_TWO(ARG)    ((ARG)*(ARG))

bool statistics_standard_deviation(RandomVariable_t* const Node){
    bool res = false;
    if(Node){
        uint32_t i = 0;
        double sum_of_squares = 0.0;
        for (i=0;i<(Node->size);i++) {
            sum_of_squares += POW_TWO(Node->value[i]-Node->expected_value);
        }
        Node->variance = sum_of_squares/(Node->size-1);
        LOG_INFO(STATISTICS, "Variance: %f", Node->variance);
        Node->standard_deviation = sqrt(Node->variance);
        LOG_INFO(STATISTICS, "StandardDeviation %f", Node->standard_deviation);
        res = true;
    }
    return res;
}

Результат вычисления программы. Неоткалиброванная пара UWB трансиверов приводит к вычислению расстояния в 155.11608 метров, когда как на самом деле расстояние всего лишь 1.075 м. У UWB трансиверов по умолчанию огромная погрешность. СКО же получилось чуть менее 5см.

Глядя на эту гистограмму можно сказать, что с вероятностью 95% точность UWB измерения составляет +-10см

А это анализ другой случайной величины связанной с UWB. Максимальная непрерывность UWB потока. Это количество непрерывно принятых пакетов до первого потерянного пакета. По распределению видно, что в среднем 11 пакетов приходят без потерь.

Идеи проектов на UWB

1--Всяческая in-door навигация. Поиск предметов на складах. Автоматическое наведение прожекторов на человека на сцене. Квест комнаты и т.п.

2--СКУДы. Автоматическое открытие дверей. Регистрация по ID.

3--Автоматическое включение электро-приборов (кондиционер, радио) при приближении. Автоматическое отключение при удалении.

Помимо измерения времени прихода/отправки радиоволны UWB трансиверы могут еще и передавать бинарные данные. Поэтому по UWB можно также обновлять прошивку, транслировать радиокоманды и пр.

Итоги

При работе с UWB можно рассчитывать на

Параметр

Значение

Единицы измерения

Среднеквадратическое отклонение

0.049915465

m

погрешность

154.041080

m

Разброс значений

0.62282

m

Точность в 95% случаев

+-0.1

m

UWB измерения подчиняются нормальному распределению. Если Вас этот результат устраивает, что UWB Вам подойдет.

Link/URL

Принцип Определения Дальности Между UWB Трансиверами (Конечный Автомат Для DS-TWR)

Tabular Data Laboratory

Исходные данные моего UWB измерения.

https://latex.codecogs.com/eqneditor/editor.php

Принцип Определения Дальности Между UWB Трансиверами

Модуль DWM1000 https://www.qorvo.com/products/p/DWM1000

ASIC DW1000 https://www.qorvo.com/products/p/DW1000

APS013: APPLICATION NOTE, The implementation of two-way ranging with the DW1000, 15 pages, https://www.qorvo.com/products/d/da008448

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы работали с UWB трансиверами?
26.92% да7
73.08% нет19
Проголосовали 26 пользователей. Воздержались 3 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вам пригождались в программировании микроконтроллеров методы математической статистики?
70% да14
30% нет6
Проголосовали 20 пользователей. Воздержались 3 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Вы работали с трансивером DWM1000?
31.82% да7
68.18% нет15
Проголосовали 22 пользователя. Воздержались 3 пользователя.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Какое у вас было максимальное среднеквадратическое отклонение при UWB изменениях расстояния?
60% меньше 5 см3
20% от 5 см до 10 см1
20% от 10 см до 20 см1
0% от 20 см до 40 см0
0% больше 40 см0
Проголосовали 5 пользователей. Воздержались 17 пользователей.
Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+12
Комментарии23

Публикации

Истории

Работа

Программист С
32 вакансии
Data Scientist
78 вакансий

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань