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

我想计算一个build筑物内的移动设备的确切位置(所以没有GPS接入)

我想用至less3个固定的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方程可以用下面的公式计算自由空间path损耗。

自由空间path损耗= Tx功率-Tx电缆损耗+ Tx天线增益+ Rx天线增益 – Rx电缆损耗 – Rx灵敏度 – 衰落余量

用上面的两个自由空间path损耗方程,我们可以找出以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] 

资料来源: http : //www.tp-link.com/en/support/calculator/

要计算距离,需要信号的强度和频率。 这里是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)

例如:频率= 2412MHz,信号电平= -57dbm,结果= 7.000397427391188m

这个公式是自由空间path损失(FSPL)公式的变换forms。 这里的距离是以米和频率来衡量的 – 以兆赫为单位。 对于其他措施,你必须使用不同的常数(27.55)。 在这里阅读常量。

欲了解更多信息,请阅读。

 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为单位时变为-27.55, d以m为单位)
  • FSPL – 自由空间path损失
  • Ptx – 发射机功率,dBm(高达20 dBm(100mW))
  • CLtxCLrx – 发射器和接收器的电缆损耗,dB(0,如果没有电缆)
  • AGtxAGrx – 发射机和接收机的天线增益,dBi
  • Prx – 接收灵敏度,dBm(低至-100 dBm(0.1pW))
  • FM – 衰落余量,dB(大于14 dB(正常)或大于22 dB(good))
  • 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信道)结果:FSPL = 47dB,d = 2.1865m

注意:FM(淡入边际)在这里似乎是不相关的,但是由于原来的公式,我将离开它。

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

例如:(以前的数据)+一个木墙(5 dB,从表中)。 结果:FSPL = FSPL – 5 dB = 44 dB,d = 1.548 m

另外请注意,天线增益不会增加功率,它描述了辐射模式的形状 (万向天线情况下是炸圈饼,定向天线情况下是齐柏林飞艇等)。

这些都不考虑信号reflection(不知道如何做到这一点)。 可能还有噪音。 所以这个math只适用于粗略估计。

你的问题的简单答案是三angular测量。 这本质上是所有GPS设备中的概念,我将阅读这篇文章,详细了解Google如何做到这一点: http : //www.computerworld.com/s/article/9127462/FAQ_How_Google_Latitude_locates_you_?taxonomyId=15&pageNumber= 2 。

根据我的理解,他们使用类似于Skyhook的服务, Skyhook是一个定位软件,根据您的wifi /手机信号来确定您的位置。 为了实现这些服务的准确性,这些服务拥有大量的数据库服务器,这些数据库在这些手机信号塔和无线接入点上存储位置信息 – 实际上他们正在调查大都市地区以保持最新状态。 为了达到类似的目的,我假设你必须使用像Skyhook这样的服务 – 你可以使用他们的SDK( http://www.skyhookwireless.com/location-technology/ )。

然而,如果你想做一些内部的事情(比如使用你自己的路由器的位置) – 那么你可能需要创build一个模仿Triangulation的algorithm。 你必须find一种方法来获得设备的signal_strengthmac_address ,并将这些信息与路由器的位置一起用来提供位置信息。 您可以通过执行类似于( http://www.makeuseof.com/tag/check-stealing-wifi/ )的方式来获取与路由器相关的设备信息。

距离(km)= 10 ^((自由空间path损失-92.45-20log10(f))/ 20)