如何获取WiFi接入点和移动设备之间的距离

3

我正在开发一款Android应用程序,其中有一个模块可以搜索所有最近/检测到的WiFi热点。

我可以从搜索到的WiFi热点中获取所有详细信息,例如SSID、BSSID、能力、频率、电平和时间戳

有了这些信息,我还需要WiFi的距离(WiFi接入点与移动设备之间的距离)

我正在使用以下代码来获取距离。

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

这将返回以米为单位的距离。

我从许多网页上通过谷歌研究得到了这些代码。

但我认为我做错了,这段代码返回错误的距离。我也尝试过很多谷歌搜索,但没有得到准确的输出。

请帮助我,如何获取Wifi AP和移动设备之间的距离?


1
我认为这甚至都不可能。也许你可以根据信号的强度得出非常粗略的距离估计,但它将取决于如此多的参数(源的功率、墙壁、设备的方向等),以至于我怀疑它是否有任何用处。 - Orabîg
无线信号确实以一定速度传输,因此设备与最近点之间的延迟理论上可以计算出来吧?不过我不知道该如何计算,因为距离非常短,似乎几乎是瞬间的。 - G_V
如果您连续测量(比方说)10,000次,然后基于这些结果计算差异,您的结果会有所改善吗? - sschrass
@Ajay 你找到解决方案了吗? - Ihor Bykov
@LgorB:不是,但之后我改变了检查WiFi可用性的方式,通过每20到30秒ping一次来实现。 - Ajay
4个回答

5

以下是代码:

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

该代码假设两个各向同性天线之间的自由空间路径衰减,并且AP以20dBm的功率发射(即使数学上不正确;自由空间路径损耗的频率依赖性是不同的;但对于W-LAN使用的频段并不重要,修正在27.55中)。

实际上,您正在处理非各向同性天线、路径中的障碍物、绕射效应和AP根据需要节省能量而变化其输出功率。

换句话说:仅通过查看接收功率来获得可靠的距离数据是完全不切实际的。它可以给出一个大致的数量级,但不会给出任何远程准确的东西。这只是基本物理知识。

唯一可靠的测量距离的方法是飞行时间。为此,您必须测量设备和接入点之间的往返时间。由于我们处理的是光速和米级到100米(最高)的距离,因此这意味着测量纳秒。可以完成,但需要一些工作。请参阅SatelliteSD给您的链接(它是德语的,但图表和关键字应该是可以理解的)。


1

有可能,你可以使用飞行时间(Time-of-Flight)的方法。请记住,你不能依赖于收到的消息,而是要依赖于接收到的开销(例如ACK)。我只能提供这个参考链接(德语)信号运行时间的测量,从快速阅读中我认为这是一件非常繁琐的事情。


很遗憾,链接现在已经失效了 :( - Alexandr Zarubkin

0

不,这是不可能的。

您将无法找到当前设备位置与实际热点之间的距离。

似乎热点不报告它们的坐标。

请查看链接以获取更详细的信息。


该操作只需要距离,而不是位置。 - sschrass
@SatelliteSD 我的意思是设备的“位置”,已经更正了答案! - AADProgramming
根据一些研究,我认为我们可以从电平和频率中获取距离。 - Ajay
我不确定你能否得到非常准确的修复! - AADProgramming
@AADTechnical:是的,我无法获得准确的结果。 - Ajay
@Ajay:接收到的功率水平并不能告诉你与AP的距离。你可以假设自由空间路径衰减(取决于频率)和标准光源AP(假设所有AP都以参考电平发射),并且你的接收器与AP一样完全各向同性。但实际上,这些假设都不成立。 - datenwolf

-1

该操作需要一个距离,而不是一个位置。 - sschrass

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接