无线接收信号强度(RSSI)那些事儿

  本文由嵌入式企鹅圈原创团队成员黄鑫供稿。微信

  本文所述的原理适用于全部无线传输技术,只是用蓝牙来举例。应该说,嵌入式企鹅圈更加偏重于嵌入式和物联网、安卓技术原理方面的知识分享和传播,其次才是实践,尽管不少开发者都很浮躁地但愿可以马上得到例程源码。本人一直都认为,只有通晓理论,才能把实践作得更好,才能成为真正的专家级工程师,不然就永远都是码农一枚。网络

1、应用ui

  无线接收信号强度(RSSI)在距离测算方面的应用中须要用到。我们不说室内定位了,换个例子:学生考勤,因为获取的RSSI只有绝对值,没有方向性,因此须要在校门口的外面和里面各装一个AP接入点。假如是只有一个接入点,那就不知道这个学生究竟是进入学校仍是离开学校。spa

  如今有两个接入点,那它们可能同时检测到一个学生手环,但明显,若是是进入学校,那当学生在校外时,校外的AP得到的RSSI确定会高过校内的RSSI。当学生进入校内时,校内的AP得到的RSSI确定会高过校外的RSSI。换一种说法,校内和校外AP得到RSSI峰值的时间点是有先有后的。比较峰值时间便可断定是进入学校或者离开学校。blog

2、单位接口

       RSSI的单位是DBm,而不是DB。DB是输出和输入功率的比例值,而DBm确是一个绝对值。事件

  dbm是一个表示功率绝对值的单位,他的计算公式为10lg(功率值/1mw)。例如若是接收到的功率为1mw,按照dbm单位进行折算后的值应该为10lg 1mw/1mw=0dbm。固然在实际传输过程当中接收方是很难达到接收功率1mw的。由于还有接收端的天线增益,因此即便接收功率是0.00001mw(即-50db)时,RF射频的接收端也能很好地进行码元解码。开发

  可是,对于某种无线接口(就是802.xx定义的规格,对于蓝牙来讲就是IEEE 802.15.1)来讲,也是要保障接收功率在必定范围,才能正常工做。对于无线传感器网络来讲,低于-95db时信号是不可靠的。cmd

  从这里,咱们也能够看出,在安卓上利用BLE接口得到的RSSI值都是负数的,是由于它获取的就是以dbm为单位的。源码

  可是,为何咱们从蓝牙单芯片(如NRF52832,DA14580,或者TI 2541)平台来讲,咱们得到的RSSI数值确实正数的呢?

3、信号等级

       得到正数是由于各个蓝牙厂商本身根据自身的信道和信号经验值来给出信号等级。比如,咱们手机用户只须要知道电池电量是多个格就行了,无需知道电池电压值。

       从这里也能够看出,真正的RSSI信号dbm值和信号等级是厂家的自行进行映射的,并且是跟自家产品相关的,不是标准。就是说NRF52832的信号等级A和DA14580的信号等级A尽管数值同样,可是对应的真正的dbm是可能不同的。

4、如何得到RSSI

       1). 通常蓝牙主机在扫描到蓝牙设备时,底层协议栈会给上层一个报告事件,其携带的参数就有一个RSSI值。例如,DA14580平台会返回一个GAPM_ADV_REPORT_IND报告事件,其携带的参数是:

      

       2)当链接上设备以后,如何还想得到RSSI的话(记住,RSSI在每次链接事件时都会发生变化的),就必须想数据链路层(LLC)发送查询RSSI请求,LLC就会启动接收功率积分电路(物理层的事),当电路工做完成并准备好数据后再给上层一个完成事件,经过携带的参数便可得到RSSI。例如,DA14580平台的请求命令是:LLC_RD_RSSI_CMD,而返回的事件是LLC_RD_RSSI_CMP_EVT,携带的参数是:

       struct llc_rd_rssi_cmd_complete

{

    ///Status for command reception

    uint8_t status;

    ///Connection handle

    uint16_t conhdl;

    ///RSSI value

    uint8_t rssi;

};

  RSSI对于上层的开发知识就这么多,若是你想继续研究发篇高水平的论文也是能够的,例如根据RSSI的变化来调整发射功率,来达到节省功耗的目的。

          欢迎扫码关注微信公众号:嵌入式企鹅圈,获取上百篇物联网原创技术分享,资深工程师力做

相关文章
相关标签/搜索