Как рассчитать расстояние от Wifi-маршрутизатора, используя силу сигнала?
Я хотел бы рассчитать точное местоположение мобильного устройства внутри здания (так что никакого доступа к GPS)
Я хочу сделать это, используя силу сигнала (в дБм) не менее 3 фиксированных сигналов Wi-Fi (3 фиксированных маршрутизатора, из которых я знаю позицию)
Google уже делает это, и я хотел бы знать, как они определяют точное местоположение на основе этих данных
Проверьте эту статью для получения дополнительной информации: http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets
FSPL зависит от двух параметров: во-первых, частота радиосигналов, вторая – расстояние беспроводной передачи. Следующая формула может отражать взаимосвязь между ними.
FSPL (dB) = 20log10(d) + 20log10(f) + K d = distance f = frequency K= constant that depends on the units used for d and f If d is measured in kilometers, f in MHz, the formula is: FSPL (dB) = 20log10(d)+ 20log10(f) + 32.44
Из уравнения «Уклонение от поля» потеря свободного пробега может быть вычислена с помощью следующего уравнения.
Потеря свободного пробега в пространстве = потеря мощности Tx Power-Tx + усиление антенны Tx + усиление антенны Rx – потеря кабеля Rx – чувствительность Rx – маржа затухания
С приведенными выше двумя уравнениями ограничения свободного пробега пути мы можем узнать расстояние в км.
Distance (km) = 10(Free Space Path Loss – 32.44 – 20log10(f))/20
Зона Френеля – это область вокруг визуальной прямой видимости, в которую распространяются радиоволны после того, как они покидают антенну. Вы нуждаетесь в четкой видимости для поддержания силы, особенно для беспроводных систем 2,4 ГГц. Это объясняется тем, что волны 2,4 ГГц поглощаются водой, как вода, найденная в деревьях. Эмпирическое правило состоит в том, что 60% зоны Френеля должны быть свободны от препятствий. Как правило, 20% блокировки зоны Френеля вносит незначительную потерю сигнала в ссылку. После 40% -ной блокировки потеря сигнала станет значительной.
FSPLr=17.32*√(d/4f) d = distance [km] f = frequency [GHz] r = radius [m]
Для расчета расстояния вам потребуется мощность сигнала и частота сигнала. Вот код java:
public double calculateDistance(double signalLevelInDb, double freqInMHz) { double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(signalLevelInDb)) / 20.0; return Math.pow(10.0, exp); }
Используемая формула:
расстояние = 10 ^ ((27,55 – (20 * log10 (частота)) + signalLevel) / 20)
Пример: частота = 2412 МГц, signalLevel = -57dbm, result = 7.000397427391188m
Эта формула преобразуется в форму формулы свободного пробега пути (FSPL) . Здесь расстояние измеряется в метрах, а частота – в мегагерцах. Для других мер вы должны использовать разные константы (27.55). Читайте здесь константы.
Для получения дополнительной информации читайте здесь .
K = 32.44 FSPL = Ptx - CLtx + AGtx + AGrx - CLrx - Prx - FM d = 10 ^ (( FSPL - K - 20 log10( f )) / 20 )
Вот:
-
K
– постоянная (32,44, когдаf
в МГц иd
в км, изменяется на -27,55 приf
в МГц иd
в м) -
FSPL
– потеря свободного пробега -
Ptx
– мощность передатчика, дБм (до 20 дБм (Ptx
)) -
CLtx
,CLrx
– потеря кабеля в передатчике и приемнике, дБ (0, если нет кабелей) -
AGtx
,AGrx
– усиление антенны на передатчике и приемнике, дБи -
Prx
– чувствительность приемника, дБм (до -100 дБм (0,1 пВт)) -
FM
– коэффициент затухания, дБ (более 14 дБ (нормальный) или более 22 дБ (хороший)) -
f
– частота сигнала, МГц -
d
– расстояние, m или км (зависит от значения K)
Примечание: в формулах сайта поддержки TP-Link есть ошибка. (Mising ^
).
Замените Prx
с мощностью принятого сигнала, чтобы получить расстояние от WiFi AP.
Пример: Ptx = 16 дБм, AGtx = 2 дБи, AGrx = 0, Prx = -51 дБм (уровень принимаемого сигнала), CLtx = 0, CLrx = 0, f = 2442 МГц (7-й канал 802.11bgn), FM = 22. Результат: FSPL = 47 дБ, d = 2,1865 м
Примечание: FM (коэффициент затухания) кажется здесь неактуальным, но я оставляю его из-за исходной формулы.
Вы должны учитывать стены, стол http://www.liveport.com/wifi-signal-attenuation может помочь.
Пример: (предыдущие данные) + одна деревянная стена (5 дБ, из таблицы). Результат: FSPL = FSPL – 5 дБ = 44 дБ, d = 1,548 м
Также обратите внимание, что усиление антенны не добавляет силы – оно описывает форму диаграммы направленности (пончик в случае всенаправленной антенны, цепелин в случае направленной антенны и т. Д.).
Ничто из этого не учитывает отражения сигнала (не имеет понятия, как это сделать). Вероятно, шум также отсутствует. Таким образом, эта математика может быть хорошей только для оценки приблизительного расстояния.
простой ответ на ваш вопрос будет Триангуляция. По сути, это концепция всех устройств GPS, я бы прочитал эту статью, чтобы узнать больше о том, как Google это делает: http://www.computerworld.com/s/article/9127462/FAQ_How_Google_Latitude_locates_you_?taxonomyId=15&pageNumber= 2 .
По моему мнению, они используют сервис, похожий на Skyhook , который представляет собой программное обеспечение для определения местоположения, которое определяет ваше местоположение на основе ваших сигналов Wi-Fi / мобильного телефона. Чтобы достичь своей точности, эти службы имеют большие серверы баз данных, которые хранят информацию о местоположении на этих башнях сотовой связи и точках доступа Wi-Fi – они фактически просматривают городские районы, чтобы поддерживать их в актуальном состоянии. Для того, чтобы вы достигли чего-то подобного, я бы предположил, что вам придется использовать такую услугу, как Skyhook – вы можете использовать их SDK ( http://www.skyhookwireless.com/location-technology/ ).
Однако, если вы хотите сделать что-то внутреннее (например, с использованием местоположений ваших собственных маршрутизаторов), вам, скорее всего, придется создать алгоритм, который имитирует триангуляцию. Вам нужно будет найти способ получить signal_strength
и mac_address
устройства и использовать эту информацию вместе с местоположениями ваших маршрутизаторов, чтобы найти место. Вероятно, вы можете получить информацию об устройствах, подключенных к вашим маршрутизаторам, сделав что-то похожее на это ( http://www.makeuseof.com/tag/check-stealing-wifi/ ).
Расстояние (км) = 10 ^ ((потеря свободного пробега – 92.45 – 20log10 (f)) / 20)