如何使用信号强度计算与Wifi路由器的距离?

88

我想计算建筑物内移动设备的精确位置(没有GPS)。

我希望使用至少3个固定WiFi信号(3个已知位置的路由器)的信号强度(以dBm为单位)来实现此目的。

谷歌已经做到了这一点,我想知道他们如何基于这些数据计算出准确的位置。

请查看这篇文章以获取更多详细信息:http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets


这是您参考的链接:https://dev59.com/5VHTa4cB1Zd3GeqPSo0E - yokoyoko
4
这个问题似乎与电子工程有关,因此我建议将其迁移到http://electronics.stackexchange.com/。 - Danny Varod
@lhab Hajj,我的需求和你一样。你解决了吗?请分享你的想法,这样其他人也可以从中学习。谢谢。 - anddev
7个回答

49

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方程,可以使用以下公式计算自由空间路径损耗。

自由空间路径损耗 = 发射功率 - 发射电缆损耗 + 发射天线增益 + 接收天线增益 - 接收电缆损耗 - 接收灵敏度 - 衰落余量

通过上述两个自由空间路径损耗方程,我们可以计算出距离(单位为公里)。

Distance (km) = 10(Free Space Path Loss – 32.44 – 20log10(f))/20

弗雷涅尔区是指从天线离开后无线电波传播到视线范围周围的区域。为了保持信号强度,特别是对于2.4GHz无线系统,您需要一个清晰的视线。这是因为2.4GHz波被水吸收,例如树木中含有的水分。经验法则是弗雷涅尔区的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/


3
好的回答,我有一个跟进问题。这些测量结果有多准确?换句话说,我能得到以英寸/厘米为单位的精度吗? - Chiwda

39

要计算距离,您需要信号强度和信号频率。以下是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)
例如: 频率 = 2412MHz, 信号强度 = -57dbm, 结果 = 7.000397427391188米
这个公式是自由空间传输损耗(FSPL)公式的转换形式。这里的距离以米为单位,频率以兆赫为单位。对于其他测量,您必须使用不同的常数(27.55)。请阅读此处的常数。
有关更多信息,请阅读此处

谢谢您明确指出应该是信号电平的绝对值,我找了一段时间才发现我的错误! - Yiannis Tsimalis
这个答案中展示的例子完全错误。信号强度应该用dB而不是dBm来表示。这是两个完全不同的单位。 - fragon
@YiannisTsimalis 但是它基于哪个物理定律?FSPL不以dbm为单位,而是以db作为参数。正如我之前所写的那样,这两个单位完全不同。 - fragon
@6franek,我明白你写的意思了,也许那只是一个笔误,他可能是想说数据库(db)而不是分贝毫瓦(dbm)。我不知道这个定律的物理背景。 - Yiannis Tsimalis
1
我已经研究了这个公式相当长的时间,得出结论它是完全错误的!FSPL以db为单位测量,而signalLevel以dbm为单位测量。它可能会产生良好的估计,但当距离变得相当大时,结果很容易混乱。 - Ahmed Hammad
显示剩余5条评论

17
K = 32.44
FSPL = Ptx - CLtx + AGtx + AGrx - CLrx - Prx - FM
d = 10 ^ (( FSPL - K - 20 log10( f )) / 20 )

这里:

  • K - 常数(当 f 单位为 MHz,d 单位为 km 时为32.44,当 f 单位为 MHz,d 单位为 m 时为-27.55)
  • FSPL - 自由空间传输损耗
  • Ptx - 发射功率,单位为 dBm(最高可达20 dBm (100mW))
  • CLtx, CLrx - 发射端和接收端的电缆损耗,单位为 dB(如果没有电缆则为0)
  • AGtx, AGrx - 发射端和接收端的天线增益,单位为dBi
  • Prx - 接收灵敏度,单位为dBm(最低可达-100 dBm(0.1pW))
  • FM - 衰落余量,单位为dB(大于14 dB(正常)或者大于22 dB(好))
  • f - 信号频率,单位为 MHz
  • d - 距离,单位为 m 或 km(取决于 K 的值)

注意:TP-Link支持站点的公式有误(缺少符号^)。

使用接收信号强度替换 Prx 可以得到从 WiFi AP 到达的距离。

例子:Ptx = 16 dBm,AGtx = 2 dBi,AGrx = 0,Prx = -51 dBm(接收信号强度),CLtx = 0,CLrx = 0,f = 2442 MHz(第七个802.11bgn信道),FM = 22。结果:FSPL = 47 dB,d = 2.1865 m。

注意:这里的 FM(衰落余量)似乎不相关,但我保留它是因为原始公式中包含了它。

您应该考虑到墙壁的影响,表格http://www.liveport.com/wifi-signal-attenuation可能会有所帮助。

例子:(上述数据)+一个木墙(来自表格的5 dB)。结果:FSPL = FSPL - 5 dB = 44 dB,d = 1.548 米

还请注意,天线增益并不会增加功率 - 它描述了辐射图案的形状(全向天线为圆环形,定向天线为卵形等)。

上述计算并未考虑信号的反射(不知道如何处理)。可能也缺少噪声。因此,这些数学只能用于粗略估算距离。


7
简单回答你的问题,答案是三角定位。这实际上是所有GPS设备的概念。我建议阅读这篇文章以了解Google如何实现这一点: http://www.computerworld.com/s/article/9127462/FAQ_How_Google_Latitude_locates_you_?taxonomyId=15&pageNumber=2
据我所知,他们使用类似于Skyhook的服务,这是一种基于wifi /手机信号确定您位置的位置软件。为了实现他们的准确性,这些服务拥有大型服务器数据库,存储这些基站和wifi接入点的位置信息-他们实际上会调查大都市地区以保持其最新状态。为了实现类似的功能,我认为您需要使用像Skyhook这样的服务-您可以使用他们的SDK(http://www.skyhookwireless.com/location-technology/)。

然而,如果你想做一些内部的事情(比如使用自己路由器的位置) - 那么你可能需要创建一个模仿三角定位的算法。你需要找到一种方法来获取设备的 signal_strengthmac_address 信息,并将该信息与你的路由器位置一起使用,以得出位置。你可以通过类似于这样的方式获取连接到你的路由器的设备的信息(http://www.makeuseof.com/tag/check-stealing-wifi/)。


这是一个棘手和具有挑战性的任务,你让我对位置服务的这个方面更加热衷于学习。请发布任何你在解决这个问题时得到的新信息/见解,我很想知道你是如何解决它的。 - Suvi Vignarajah

5

距离(公里)= 10^((自由空间损耗 - 92.45 - 20log10(f))/20)

注:此公式为计算无线电波在自由空间中传输时的信号衰减,其中 f 为频率,以 MHz 为单位。

1
一般来说,这是一种非常糟糕的做法,因为多径干扰。这绝对更像是一个射频工程问题而不是编码问题。
简而言之,wifi射频能量在反弹墙壁、人体和地面后会分散到不同的方向。仅凭三角定位无法确定你的位置,除非你在一个空房间里,wifi信标放置在恰当的位置。
谷歌能够做到这一点,因为他们可以将每个wifi SSID映射到GPS位置,当任何选择加入他们服务的Android用户进入范围时。那样,下次用户经过那里时,即使没有完美的GPS信号,谷歌母舰也可以知道你在哪里。通常,他们会与差劣的GPS信号一起使用。
我所见过的做法是使用Zigbee或BTLE设备的网格。如果你知道它们的布局,你可以利用组合RSS来确定相对接近哪些设备,然后从那里开始。

有关 Google 如何实现此功能的更多信息,请参阅 https://dev59.com/pXI-5IYBdhLWcg3wy72n?rq=1 - yhyrcanus

-7

不要在意你是否是管理员。我写的是给我的受众看的,而不是给技术作家看的。

你们所有人都需要学会使用早于GPS的工具进行导航。例如六分仪、八分仪、后桅杆或星盘。

如果你已经从三个不同的位置接收到信号,那么你只需要测量信号强度并从这些位置做出比率。简单的三角形计算公式a2+b2=c2,信号强度越强,设备离接收器越近。


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