我想计算建筑物内移动设备的精确位置(没有GPS)。
我希望使用至少3个固定WiFi信号(3个已知位置的路由器)的信号强度(以dBm为单位)来实现此目的。
谷歌已经做到了这一点,我想知道他们如何基于这些数据计算出准确的位置。
请查看这篇文章以获取更多详细信息:http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets
我想计算建筑物内移动设备的精确位置(没有GPS)。
我希望使用至少3个固定WiFi信号(3个已知位置的路由器)的信号强度(以dBm为单位)来实现此目的。
谷歌已经做到了这一点,我想知道他们如何基于这些数据计算出准确的位置。
请查看这篇文章以获取更多详细信息: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
根据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]
要计算距离,您需要信号强度和信号频率。以下是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);
}
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
- 发射端和接收端的天线增益,单位为dBiPrx
- 接收灵敏度,单位为dBm(最低可达-100 dBm(0.1pW))FM
- 衰落余量,单位为dB(大于14 dB(正常)或者大于22 dB(好))f
- 信号频率,单位为 MHzd
- 距离,单位为 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 米
还请注意,天线增益并不会增加功率 - 它描述了辐射图案的形状(全向天线为圆环形,定向天线为卵形等)。
上述计算并未考虑信号的反射(不知道如何处理)。可能也缺少噪声。因此,这些数学只能用于粗略估算距离。
然而,如果你想做一些内部的事情(比如使用自己路由器的位置) - 那么你可能需要创建一个模仿三角定位的算法。你需要找到一种方法来获取设备的 signal_strength
和 mac_address
信息,并将该信息与你的路由器位置一起使用,以得出位置。你可以通过类似于这样的方式获取连接到你的路由器的设备的信息(http://www.makeuseof.com/tag/check-stealing-wifi/)。
距离(公里)= 10^((自由空间损耗 - 92.45 - 20log10(f))/20)
注:此公式为计算无线电波在自由空间中传输时的信号衰减,其中 f 为频率,以 MHz 为单位。不要在意你是否是管理员。我写的是给我的受众看的,而不是给技术作家看的。
你们所有人都需要学会使用早于GPS的工具进行导航。例如六分仪、八分仪、后桅杆或星盘。
如果你已经从三个不同的位置接收到信号,那么你只需要测量信号强度并从这些位置做出比率。简单的三角形计算公式a2+b2=c2,信号强度越强,设备离接收器越近。