使用 RSSI 计算近似距离
Calculate approximated distance using RSSI
我正在从事一个旨在测量单个 Raspberry PI 和附近智能手机之间的近似距离的项目。
项目的最终目标是检查树莓派的同一个房间里是否有智能手机。
我想到了两种实现方式。第一个是使用 RSSI 值测量距离,第二个是从室内和室外的许多地方在第一时间校准设置并获得阈值 RSSI 值。
我读到智能手机即使在禁用 wi-fi 时也会发送 wi-fi 数据包,我想使用此功能从传输智能手机获取 RSSI 值(被动使用 kismet)并检查它是否在房间内。我也可以使用蓝牙RSSI。
如何使用 RSSI 计算距离?
这是一个悬而未决的问题。基本上,根据理想状态下的 RSSI 测量距离很容易,主要挑战是减少由于多径和反射 RF 信号及其干扰而产生的噪声。无论如何,您可以通过以下代码将 RSSI 转换为距离:
double rssiToDistance(int RSSI, int txPower) {
/*
* RSSI in dBm
* txPower is a transmitter parameter that calculated according to its physic layer and antenna in dBm
* Return value in meter
*
* You should calculate "PL0" in calibration stage:
* PL0 = txPower - RSSI; // When distance is distance0 (distance0 = 1m or more)
*
* SO, RSSI will be calculated by below formula:
* RSSI = txPower - PL0 - 10 * n * log(distance/distance0) - G(t)
* G(t) ~= 0 //This parameter is the main challenge in achiving to more accuracy.
* n = 2 (Path Loss Exponent, in the free space is 2)
* distance0 = 1 (m)
* distance = 10 ^ ((txPower - RSSI - PL0 ) / (10 * n))
*
* Read more details:
* https://en.wikipedia.org/wiki/Log-distance_path_loss_model
*/
return pow(10, ((double) (txPower - RSSI - PL0)) / (10 * 2));
}
我正在从事一个旨在测量单个 Raspberry PI 和附近智能手机之间的近似距离的项目。
项目的最终目标是检查树莓派的同一个房间里是否有智能手机。
我想到了两种实现方式。第一个是使用 RSSI 值测量距离,第二个是从室内和室外的许多地方在第一时间校准设置并获得阈值 RSSI 值。 我读到智能手机即使在禁用 wi-fi 时也会发送 wi-fi 数据包,我想使用此功能从传输智能手机获取 RSSI 值(被动使用 kismet)并检查它是否在房间内。我也可以使用蓝牙RSSI。
如何使用 RSSI 计算距离?
这是一个悬而未决的问题。基本上,根据理想状态下的 RSSI 测量距离很容易,主要挑战是减少由于多径和反射 RF 信号及其干扰而产生的噪声。无论如何,您可以通过以下代码将 RSSI 转换为距离:
double rssiToDistance(int RSSI, int txPower) {
/*
* RSSI in dBm
* txPower is a transmitter parameter that calculated according to its physic layer and antenna in dBm
* Return value in meter
*
* You should calculate "PL0" in calibration stage:
* PL0 = txPower - RSSI; // When distance is distance0 (distance0 = 1m or more)
*
* SO, RSSI will be calculated by below formula:
* RSSI = txPower - PL0 - 10 * n * log(distance/distance0) - G(t)
* G(t) ~= 0 //This parameter is the main challenge in achiving to more accuracy.
* n = 2 (Path Loss Exponent, in the free space is 2)
* distance0 = 1 (m)
* distance = 10 ^ ((txPower - RSSI - PL0 ) / (10 * n))
*
* Read more details:
* https://en.wikipedia.org/wiki/Log-distance_path_loss_model
*/
return pow(10, ((double) (txPower - RSSI - PL0)) / (10 * 2));
}