我想计算一个建筑物内移动设备的确切位置(所以没有GPS访问)
我想使用至少3个固定wifi信号的信号强度(以dBm为单位)(我知道位置的3个固定路由器)
谷歌已经这样做了,我想知道他们如何根据这些数据找出确切的位置
查看此文章了解更多详情:http://www.codeproject.com/Articles/63747/Exploring-GoogleGears-Wi-Fi-Geo-Locator-Secrets
答案 0 :(得分:43)
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
根据衰落余量方程,可以使用以下等式计算自由空间路径损耗。
自由空间路径损耗= Tx Power-Tx电缆损耗+ Tx天线增益+ Rx天线增益 - Rx电缆损耗 - Rx灵敏度 - 衰落余量
利用上述两个自由空间路径损耗方程,我们可以找出以km为单位的距离。
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]
答案 1 :(得分:29)
要计算距离,您需要信号强度和信号频率。这是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(频率))+ signalLevel)/ 20)
示例:frequency = 2412MHz,signalLevel = -57dbm,result = 7.000397427391188m
此公式是Free Space Path Loss(FSPL)公式的转换形式。这里的距离以米为单位,以频率为单位 - 以兆赫为单位。对于其他措施,您必须使用不同的常数(27.55)。读取常量here。
有关详细信息,请参阅here。
答案 2 :(得分:16)
K = 32.44
FSPL = Ptx - CLtx + AGtx + AGrx - CLrx - Prx - FM
d = 10 ^ (( FSPL - K - 20 log10( f )) / 20 )
下面:
K
- 常量(32.44,当f
以MHz为单位且d
以km为单位时,当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支持网站的公式出错(mising ^
)。
用接收到的信号强度替换Prx
以获得与WiFi AP的距离。
示例: Ptx = 16 dBm,AGtx = 2 dBi,AGrx = 0,Prx = -51 dBm(接收信号强度),CLtx = 0,CLrx = 0,f = 2442 MHz( 7#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 m
另请注意,天线增益不会增加功率 - 它描述了辐射模式的形状(全向天线的情况下的甜甜圈,定向天线情况下的齐柏林飞艇等)。
这些都不考虑信号反射(不知道如何做到这一点)。噪音也可能不见了。所以这个数学可能只适用于粗略的距离估计。
答案 3 :(得分:7)
你的问题的简单答案是三角测量。这本质上是所有GPS设备中的概念,我会阅读本文,以了解更多有关Google如何执行此操作的信息:http://www.computerworld.com/s/article/9127462/FAQ_How_Google_Latitude_locates_you_?taxonomyId=15&pageNumber=2。
根据我的理解,他们使用类似于Skyhook的服务,这是一种位置软件,可根据您的wifi /手机信号确定您的位置。为了实现这些服务的准确性,这些服务拥有大型数据库服务器,可以在这些手机信号塔和无线接入点上存储位置信息 - 他们实际上调查大都市区域以使其保持最新状态。为了让你获得类似的东西,我认为你必须使用像Skyhook这样的服务 - 你可以使用他们的SDK(http://www.skyhookwireless.com/location-technology/)。
但是,如果你想在内部做一些事情(比如使用你自己的路由器的位置) - 那么你可能不得不创建一个模仿三角测量的算法。您必须找到一种方法来获取设备的signal_strength
和mac_address
,并使用该信息以及路由器的位置来提供该位置。您可以通过执行与此类似的操作(http://www.makeuseof.com/tag/check-stealing-wifi/)来获取有关连接到路由器的设备的信息。
答案 4 :(得分:5)
距离(km)= 10 ^((自由空间路径损耗 - 92.45 - 20log10(f))/ 20)
答案 5 :(得分:1)
通常,由于multipath interference,这是一种非常糟糕的处理方式。这绝对是射频工程问题,而不是编码问题。
Tl; dr,从墙壁,人,地板等反弹后,wifi的RF能量会散布在不同的方向上。无法单独通过三角测量来告诉您所在的位置,除非您处于带有wifi的空房间中信标放置在正确的位置。
Google之所以能够摆脱困境,是因为当任何Android用户(选择加入其服务)进入范围时,他们基本上可以将每个WiFi SSID映射到GPS位置。这样,即使没有完美的GPS信号,下一次用户走到那里时,Google母舰也能告诉您您的位置。通常,他们会将其与糟糕的GPS信号结合使用。
我看到的是Zigbee或BTLE设备的网格。如果您知道这些元素的布局位置,则可以使用组合的RSS相对地找出最接近的元素,然后从那里去。
答案 6 :(得分:-2)
不在乎您是否是主持人。我不是以技术作家的身份向观众写文字的
所有人都需要学习使用GPS之前的工具进行导航。诸如六分仪,八分仪,后勤人员或星盘之类的东西。
如果您从3个不同的位置接收到信号,则只需要测量信号强度并从这些位置得出一个比率即可。简单三角形计算,其中a2 + b2 = c2。信号强度越强,设备离接收器越近。