【发布时间】:2018-10-24 06:24:29
【问题描述】:
当我选择 Eddystone 协议到我的 Kontakt 信标时,我的距离有误。
对于 Kontakt,RSSI 值不同:
Tx Power RSSI for ibeacon @ 1m RSSI for Eddystone @ 0m
0 (-30dBm) -115 -74
1 (-20dBm) -84 -43
2 (-16dBm) -81 -40
3 (-12dBm) -77 -36
4 (-8dBm) -72 -31
5 (-4dBm) -69 -28
6 (0dBm) -65 -24
7 (4dBm) -59 -18
为什么使用 Eddystone 时所有距离都那么远,而我使用 iBeacon 时一切正常?
这是我的代码示例:
public static let signalLossAtOneMeter: Int = -41
public static func calculateDistance(rssi: Float, calibratedRssi: Float, calibratedDistance: Float, pathLossParameter: Float) -> Float {
return calculateDistance(rssi: rssi,
calibratedRssi: getCalibratedRssiAtOneMeter(calibratedRssi: calibratedRssi, calibratedDistance: calibratedDistance),
pathLossParameter: BeaconDistanceCalculator.pathLossParameter)
}
public static func getCalibratedRssiAtOneMeter(calibratedRssi: Float, calibratedDistance: Float) -> Float {
let calibratedRssiAtOneMeter: Float
if calibratedDistance == IBeacon.calibrationDistanceDefault {
calibratedRssiAtOneMeter = calibratedRssi
} else if calibratedDistance == Eddystone.calibrationDistanceDefault {
calibratedRssiAtOneMeter = calibratedRssi + Float(BeaconDistanceCalculator.signalLossAtOneMeter)
} else {
calibratedRssiAtOneMeter = -62
}
return calibratedRssiAtOneMeter
}
public static func calculateDistance(rssi: Float, calibratedRssi: Float, pathLossParameter: Float) -> Float {
return pow(10, (calibratedRssi - rssi) / (10 * pathLossParameter)) as Float
}
【问题讨论】:
-
只是一个疯狂的猜测......你在这两种情况下得到了什么 calibratedRssi 值,你是如何得到它们的?我只是在考虑这样一种情况:已经为 Eddystone 重新计算了 calibratedRssi @ 1m(通过您正在使用的库)并且您正在再次执行此操作
-
我从 UID 帧的第二个字节获取 calibratedRssi
-
另一个疯狂的猜测。您确定在 getCalibratedRssiAtOneMeter 中为 Eddystone 选择了正确的 if 分支吗?不是因为其他地方的编码错误而添加了-62而不是-41吗?
-
是的,我查过了
标签: ibeacon beacon rssi eddystone kontakt.io