Алгоритм трилатерації для n кількості балів


27

Мені потрібно знайти алгоритм, який може обчислити центроїд А (він же центр сили тяжіння, геометричний центр, центр маси) з рисунка, де кола T1, T2, T3, T4, T5, .., Tn перетинаються І довжиною лінії R від центроїда до найдаліший куточок згаданої фігури

Надається наступна інформація:

  • Ширина T1 = 56,999883 Довгота = 24,144473 Радіус = 943
  • Ширина T2 = 57,005352 Довгота = 24,151168 Радіус = 857
  • Ширина T3 = 57,005352 Довгота = 24,163356 Радіус = 714
  • Ширина T4 = 56,999042 Довгота = 24,168506 Радіус = 714
  • Ширина T5 = 56,994226 Довгота = 24,15709 Радіус = 771

Результат повинен виглядати так: Широта = XX.XXXXXXX Довгота = XX.XXXXXXX Радіус = XX

введіть тут опис зображення

Як ви, напевно, вже зрозуміли, я працюю над програмним забезпеченням, яке може знайти місцезнаходження пристрою за найближчими точками доступу до Wi-Fi або мобільними базовими станціями, оскільки кількість точок доступу або базових станцій може змінюватися, мені потрібен алгоритм, який може адаптуватися до невизначеної кількості балів .

Є деякі подібні питання тут і тут , але жоден з них точно не відповідає на моє запитання.


на якій мові ти працюєш?
WolfOdrade

Переважно PHP, трохи JavaScript. Напевно, я повинен був згадати це раніше, але я веб-розробник, і щоб зрозуміти відповідь Вюбера, мені доведеться знайти математика.
Карл Бауманіс

Чи виходять радіуси від відносної сили сигналу?
Кірк Куйкендалл

Так! Насправді радіуси знаходяться в дБм
Карл Бауманіс

1
@Reddox, почасти - мені вдалося обчислити це за допомогою php_exec (), використовуючи математику на стороні сервера.
Kārlis Baumanis

Відповіді:


29

Вимірювання радіуса, безумовно, піддаються деякій помилці. Я б очікував, що кількість помилок буде пропорційною самим радіусам. Припустимо, що вимірювання є інакше неупередженими. Тоді розумне рішення використовує зважені нелінійні розміри найменших квадратів з вагами, обернено пропорційними радіусам квадрата.

Це стандартний матеріал доступний в (серед іншого) Python, R, Mathematica , і багато повнофункціональні статистичні пакети, так що я просто проілюструвати. Ось деякі дані, отримані шляхом вимірювання відстаней з відносною помилкою 10% до п'яти випадкових точок доступу, що оточують розташування пристрою:

Таблиця даних

Mathematica потребує лише одного рядка коду та не вимірюваного часу процесора для обчислення придатності:

fit = NonlinearModelFit[data, Norm[{x, y} - {x0, y0}], {x0, y0}, {x, y}, Weights -> 1/observations^2]

Редагувати--

Для великих радіусів більш точні (сферичні або еліпсоїдальні) рішення можна знайти лише шляхом заміни евклідової відстані Norm[{x, y} - {x0, y0}]на функцію для обчислення сферичної або еліпсоїдальної відстані. У Mathematica це можна зробити, наприклад , через

fit = NonlinearModelFit[data, GeoDistance[{x, y}, {x0, y0}], {x0, y0}, {x, y}, 
        Weights -> 1/observations^2]

- закінчення редагування

Однією з переваг використання такої статистичної техніки є те, що вона може створювати довірчі інтервали для параметрів (які є координатами пристрою) і навіть одночасний еліпс довіри для розташування пристрою.

ellipsoid = fit["ParameterConfidenceRegion", ConfidenceLevel -> 0.95];
fit["ParameterConfidenceIntervalTable", ConfidenceLevel -> 0.95]

Таблиця інтервалу довіри

Доцільно побудувати дані та рішення:

Graphics[{Opacity[0.2], EdgeForm[Opacity[0.75]], White, Disk[Most[#], Last[#]] & /@ data, 
  Opacity[1], Red, ellipsoid, 
  PointSize[0.0125], Blue, Point[source], Red, Point[solution],
  PointSize[0.0083], White, Point @ points}, 
  Background -> Black, ImageSize -> 600]

Карта

  • Білі точки - це (відомі) місця доступу.

  • Велика синя крапка - це справжнє місце розташування пристрою.

  • Сірі кола являють собою виміряні радіуси. В ідеалі вони б перетиналися в справжньому місці пристрою, але, очевидно, цього немає, через помилку вимірювання.

  • Велика червона крапка - орієнтовне місце розташування пристрою.

  • Червоний еліпс визначає 95% довіру для розташування пристрою.

Форма еліпса в цьому випадку представляє інтерес: локальна невизначеність найбільша по лінії NW-SE. Тут відстані до трьох точок доступу (до ПП та ЮЗ) ледь змінюються і спостерігається компроміс помилок між відстанями до двох інших точок доступу (на північ і південний схід).

(Більш точна область довіри може бути отримана в деяких системах як контур вірогідної функції; цей еліпс є лише наближенням другого порядку до такого контуру.)

Коли радіуси вимірюються без помилок, усі кола матимуть принаймні одну точку взаємного перетину і - якщо ця точка є унікальною - це буде унікальне рішення.

Цей метод працює з двома або більше точками доступу. Три або більше потрібні для отримання довірчих інтервалів. Коли є лише дві, вона знаходить одну з точок перетину (якщо вони існують); в іншому випадку він вибирає відповідне місце між двома точками доступу.


3
Молодець Білл!

1
@Reddox В принципі, так: будь-яка мова, що закінчується, може робити буквально будь-які обчислення. Але PHP може знизити список бажань як цільової мови. Навіть посібник із PHP визнає стільки: "PHP, мабуть, не найкраща мова для створення настільного додатку з графічним інтерфейсом користувача, але якщо ви дуже добре знаєте PHP і хотіли б використовувати деякі розширені функції PHP на вашій клієнтській основі програми, які ви також можете використовувати PHP-GTK для написання таких програм. "
whuber

1
@Reddox Дякую за посилання. Я бачу, як це забезпечує обчислення геометрії. У цій обставині вони насправді не потрібні: єдиний такий розрахунок - це застосування теореми Піфагора для отримання відстаней у вигляді кореневих сум квадратів (заклик до Normмого коду). Вся робота бере участь у зваженому нелінійному розмірі найменших квадратів, але я не вірю, що бібліотека GEOS надає цю можливість. Можливо, GEOS може бути корисною, коли потрібні точні еліпсоїдальні відстані.
whuber

2
Якщо я читаю це правильно, @BenR, здається, ви зважуєте дані пропорційно радіусам квадрата, а не обернено пропорційним. Що відбувається, коли ділишся на, square(data[2])а не множиш на нього?
whuber


1

У цьому випадку кожне коло перетинає всі інші кола, і тому ми можемо визначати точки перетину таким чином:

Спочатку визначте всі n * (n-1) точок перетину. Назвемо безліч цих точок перетину I . Візьміть список точок T, який містить найглибші точки. Потім для кожної точки p в I перевірте, чи p всередині кожного кола. Якщо p всередині кожного кола, то це точка на найпотаємнішому перетині. Додайте таку точку в списку T .

Тепер у вас є бажані координати перетину. Я можу придумати щонайменше два способи прогнозування місця розташування:

  1. Просто обчисліть центроїд (використовуйте відстань у вазі?) Полігону, утвореного Т, а центроїд - бажане місце.
  2. Обчислити мінімальний коло , який містить кожну точку Т . Тоді центр цього кола - бажане місце. Обчислення R повинно бути прямим після цього.

Ще одна примітка: спочатку перетворіть силу сигналу на відстань, використовуючи модель вільного простору (або варіації). Я вважаю: у вас є будь-який навчальний набір даних, ви повинні спробувати знайти показник втрати шляху, використовуючи якусь методику навчання, а не використовувати n = 2 або n = 2,2 як фіксовану величину.


що таке T ... "найпотаємніші точки" - якщо у мене є 5 вузлів ... скільки "найпотаємніших точок" я повинен перевіряти?
чарівник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.