开发接近(Proximity)相关的蓝牙(Bluetooth)应用时,开发者需要在不同的信号强度测量方法之间做出选择,比如我的应用是该采用RX还是RSSI呢?想要更好地理解这一问题,我们不妨先来回顾一下射频(RF)通信的基本概念。
RX和RSSI
RT通信(Real Time Communication,实时通信)使用RX和 RSSI(Received Signal Strength Indication,接收信号强度指示)来测量无线电信号强度。两者都是天线接收到的功率水平指标,差异在于RX的测量单位是毫瓦(mW)或分贝毫瓦(dBm),而RSSI是信号强度百分比,RSSI值越高表示信号越强。与RX不同的是,RSSI是一种相对的测量方法,大多由芯片制造商定义。RSSI并无标准的物理参数。例如,厂商甲的RSSI最大值可能为100,而厂商乙的RSSI区间可以为0到127。然而在某一特定的芯片上,其RSSI值与特定物理RX值之间的映射是已知的。对于某些平台,高层 API仅提供RSSI数据。
不同无线电芯片的RSSI有所不同
你可以会注意到,即便位置和距离固定,RSSI值也会出现变动,其原因之一可能就是硬件/无线电平台。例如,iOS设备的芯片组大多相同,RSSI值能够很精确地反映距离,同样的RSSI值在iPhone甲和iPhone乙上很可能表示相同的信号强度值。然而安卓设备种类多样,设备采用的芯片组也各有不同,RSSI的绝对值就无法精确地反映距离。同样的RSSI值在不同安卓手机上可能表示不同的信号强度。尽管如此,如果开发者能够了解RSSI值变化的趋势,那么对于接近应用仍十分有帮助。趋势也可以给你很多有用的数据。
接近应用中如何使用RSSI?
避免使用RSSI绝对值,而采用趋势
基于无线电信号的波动,我们可以了解到相对准确的RSSI趋势。了解信号的强弱变化并不难,因此可以判断用户是接近还是远离信号源。更理想的情况是,如果我们了解RSSI和特定接收设备位置之间的具体映射,就能对距离作出相对准确的判断。
以下就是RSSI与距离之间关系的举例:
RSSI 值随距离的改变
获取RSSI值时采用区间众数
RF通信的本质决定了RX和RSSI在很大程度上都会受到各种环境因素的影响。采用RSSI值时,环境因素还会引起一定范围内的值漂移。为了抵御这些影响,开发者可以设计一个采样算法,获取特定时段内RSSI样本集的众数(出现次数最多的值)。这样,数据就能更准确地反映实际信号强度,并滤过噪音。
结论
当接近应用选择使用RSSI时,开发者需要考虑不同芯片厂商的不同定义。不同无线电芯片的RSSI绝对值可能不同,但我们仍能从同一芯片的RSSI趋势中获取很多信息。为避免环境干扰,开发者可以定义自己的采样算法以去除噪音。