как получить расстояние между точкой доступа Wi-Fi и мобильным устройством

Я разрабатываю приложение для Android, в котором есть модуль для поиска всех ближайших/обнаруженных точек доступа Wi-Fi.

я могу получить всю информацию из найденной точки доступа Wi-Fi, например, SSID, BSSID, возможности, частоту, уровень и отметку времени

с этой информацией мне также нужно расстояние Wi-Fi (расстояние между точкой доступа Wi-Fi и мобильным устройством)

я использую строки ниже, чтобы получить Distance.

double exp = (27.55 - (20 * Math.log10(freqInMHz)) + Math.abs(levelInDb)) / 20.0;
double distanceM = Math.pow(10.0, exp);

это вернет расстояние в метрах.

я получил этот код по поиску в Google со многих страниц.

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

Пожалуйста помогите. как я могу получить расстояние между точкой доступа Wi-Fi и мобильным устройством?


person Ajay    schedule 30.01.2015    source источник
comment
Я не думаю, что это даже возможно. Может быть, вы можете получить очень, очень грубую оценку расстояния на основе уровня сигнала, но это будет зависеть от стольких параметров (мощность источника, стены, ориентация устройства...), что я сомневаюсь в этом. может быть какая-то польза.   -  person Orabîg    schedule 30.01.2015
comment
возможный дубликат Как рассчитать расстояние от маршрутизатора Wi-Fi с помощью Signal Сила?   -  person Selvin    schedule 30.01.2015
comment
Беспроводные сигналы перемещаются с определенной скоростью, поэтому теоретически можно рассчитать задержку между устройством и ближайшей точкой, я полагаю? Я понятия не имею, как, хотя расстояния настолько короткие, что кажется почти мгновенным.   -  person G_V    schedule 30.01.2015
comment
улучшатся ли ваши результаты, если вы измеряете (скажем) 10 000 раз подряд, а затем вычисляете разницу на основе этих результатов?   -  person sschrass    schedule 30.01.2015
comment
@Ajay Аджай Ты нашел какое-то решение?   -  person Igor Bykov    schedule 01.04.2016
comment
@LgorB: Нет, но после этого я изменил способ проверки доступности Wi-Fi, проверяя связь каждые 20-30 секунд.   -  person Ajay    schedule 01.04.2016


Ответы (4)


Этот код:

double exp = (27,55 - (20 * Math.log10(freqInMHz)) + Math.abs(levelInDb)) / 20,0; двойное расстояниеM = Math.pow(10.0, exp);

Работает в предположении затухания на трассе в свободном пространстве между двумя изотропными антеннами и точкой доступа, передающей при мощности 20 дБм (и математика даже неверна; частотная зависимость потерь на трассе в свободном пространстве другая; это не имеет значения для диапазонов W-LAN, использует, исправление в 27,55).

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

Или, другими словами: совершенно непрактично получить надежное значение расстояния, просто взглянув на полученную мощность. Это может дать вам примерное значение порядка величины, но не что-то отдаленно точное. Это просто элементарная физика.

Единственным надежным способом измерения расстояния является время полета. Для этого необходимо измерить время прохождения сигнала между устройством и точкой доступа. Поскольку мы имеем дело со скоростью света и расстояниями порядка метров до 100 м (вверху), это означает измерение в наносекундах. Можно сделать, но требует некоторой работы. См. ссылку, которую дал вам SatelliteSD (она на немецком языке, но диаграммы и ключевые слова должны быть понятны).

person datenwolf    schedule 30.01.2015

Возможно, вы могли бы использовать подход Time-of-Flight. Имейте в виду, что вы не можете полагаться на полученные сообщения, но на полученные служебные данные (например, ACK) я могу найти только эту ссылку (на немецком языке) измерение времени работы сигнала Из беглого чтения я думаю это очень утомительное занятие.

person sschrass    schedule 30.01.2015
comment
К сожалению, ссылка устарела :( - person Alexandr Zarubkin; 23.04.2017

Нет, это невозможно.

Вы не сможете определить расстояние между точками доступа от текущего местоположения вашего устройства до фактической точки доступа.

Похоже, точки доступа не сообщают свои координаты.

Проверьте ссылку с более подробной информацией.

person AADProgramming    schedule 30.01.2015
comment
оператору нужна только дистанция, а не позиция. - person sschrass; 30.01.2015
comment
@SatelliteSD Я имею в виду местоположение устройства, исправил ответ! - person AADProgramming; 30.01.2015
comment
согласно некоторым исследованиям, я думаю, что мы можем получить расстояние от уровня и частоты. - person Ajay; 30.01.2015
comment
Я не уверен, что вы можете получить серьезно точное исправление!! - person AADProgramming; 30.01.2015
comment
@AADTechnical: да, я не могу получить точные результаты. - person Ajay; 30.01.2015
comment
@Ajay: полученный уровень мощности ничего не говорит вам о расстоянии до точки доступа. Вы можете сделать предположение о затухании на пути в свободном пространстве (которое зависит от частоты) и стандартной свечной точке доступа (при условии, что все точки доступа передают на опорном уровне), а ваш приемник совершенно изотропен, как и точка доступа. Но на практике ни одно из этих предположений не выполняется. - person datenwolf; 30.01.2015

Существует метод под названием «триангуляция», но в этом случае у вас есть как минимум 3 точки доступа. Вы можете подробно ответить в этом pdf.

http://www.see.ed.ac.uk/~slig/papers/ITM2010.pdf

person Cüneyt    schedule 30.01.2015
comment
th op хочет дистанцию, а не позицию. - person sschrass; 30.01.2015