Как рассчитать расстояние от маршрутизатора Wi-Fi, используя силу сигнала?

Я хотел бы рассчитать точное местоположение мобильного устройства внутри здания (поэтому нет доступа к GPS)

Я хочу сделать это, используя уровень сигнала (в дБм) как минимум 3 фиксированных сигналов Wi-Fi (3 фиксированных маршрутизатора, из которых я знаю положение)

Google уже делает это, и я хотел бы знать, как они выясняют точное местоположение на основе этих данных

Проверьте эту статью для получения дополнительной информации: http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets

5 ответов

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

Из уравнения Fade Margin, потеря пути в свободном пространстве может быть вычислена с помощью следующего уравнения.

Потери в свободном пространстве =Tx Power-Tx Cable Lox +Tx Antenna Gain+Rx Antenna Gain - Rx Cable Loss - Rx Sensitivity - Fade Margin

С помощью двух приведенных выше уравнений потери свободного пространства мы можем определить расстояние в км.

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]

Источник: http://www.tp-link.com/en/support/calculator/

Для расчета расстояния вам понадобится сила сигнала и частота сигнала. Вот код 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(частота)) + уровень сигнала)/20)

Пример: частота = 2412 МГц, уровень сигнала = -57 дБм, результат = 7.000397427391188 м

Эта формула представляет собой преобразованную форму формулы потери свободного пространства (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 дБм (100 мВт))
  • CLtx, CLrx - потери в кабеле на передатчике и приемнике, дБ ( 0, если нет кабелей)
  • AGtx, AGrx - усиление антенны на передатчике и приемнике, дБи
  • Prx - чувствительность приемника, дБм (до -100 дБм ( 0,1 пВт))
  • FM - запас на замирание, дБ (более 14 дБ (нормальный) или более 22 дБ (хороший))
  • f - частота сигнала, МГц
  • d - расстояние, м или км (зависит от значения K)

Примечание: в формулах с сайта поддержки TP-Link есть ошибка (ошибка ^ ).

Замена Prx с силой принятого сигнала, чтобы получить расстояние от точки доступа WiFi.

Пример: 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)

В общем, это действительно плохой способ работы из-за многолучевых помех. Это, безусловно, больше инженерный вопрос, чем вопрос кодирования.

Tl;dr, радиочастотная энергия Wi-Fi рассеивается в разных направлениях после отражения от стен, людей, пола и т. Д. Невозможно определить, где вы находитесь, используя только триангуляцию, если только вы не находитесь в пустой комнате с маяками Wi-Fi, размещенными в точно в правильном месте.

Google может обойтись без этого, потому что, по сути, они могут сопоставить, где каждый SSID Wi-Fi находится в местоположении GPS, когда любой пользователь Android (который подключается к их сервису) входит в зону действия. Таким образом, в следующий раз, когда пользователь будет проходить мимо, даже без идеального сигнала GPS, материнское устройство Google может определить ваше местоположение. Как правило, они будут использовать это в сочетании с дерьмовым сигналом GPS.

То, что я видел, это сетка устройств Zigbee или BTLE. Если вы знаете, где они расположены, вы можете использовать объединенный RSS-канал, чтобы выяснить, к каким из них вы ближе всего, и перейти оттуда.

Не волнует, если вы модератор. Я написал свой текст для моей аудитории, а не как технический писатель

Все, что вы, ребята, должны научиться ориентироваться с помощью инструментов, предшествующих GPS. Что-то вроде секстанта, октанта, бэкстаффа или астролябии.

Если вы получили сигнал из 3 разных мест, вам нужно только измерить уровень сигнала и составить соотношение из этих мест. Простой расчет треугольника, где a2+b2=c2. Чем сильнее уровень сигнала, тем ближе устройство к приемнику.

Другие вопросы по тегам