ST意法半导体
直播中

王岩

7年用户 819经验值
私信 关注
[问答]

可以问一下如何将RAW RSSI值转换为dBm公式吗

尊敬的先生,
我是 STM32WB55 的新手,正在使用 STM32CubeMonitor-RF。
我们从 STM32CubeMonitor-RF 中 ACI_HAL_READ_RAW_RSSI 的 Command Complete 的 Value 参数中看到 RAW RSSI 的值,它产生了 RSSI dBm。
如:
(RAW RSSI) --> (RSSI dBm)
0x000006 --> -107.00 分贝
0x000007 --> -107.00 分贝
0x00000A --> -106 dBm
0x00000B --> -105.00 dBm
0x000012 --> -103.00 分贝
0x000014 --> -102.00 dBm
0x000017 --> -100.00 dBm
0x00001C --> -98.00 dBm
0x00001D --> -98.00 dBm
0x000021 --> -97.00 分贝
0x000024 --> -97.00 分贝
0x000029 --> -96.00 分贝
...
0x0001A9 --> -75.00 分贝
我们可以问一下将 RAW RSSI 值转换为 dBm 的公式吗?谢谢你。


回帖(1)

胡毅秉

2022-12-7 13:43:42
  int32_t rsi_dbm;


  •   uint32_t rssi_int16;
  •   uint32_t reg_agc;


  •    // extract the data rssi_int16 + agc
  •    rssi_int16 = ((rssi_level[0]) >> 16) & 0xFFFFU ;
  •    reg_agc = (rssi_level[1]) & 0xffU;


  •   // check if rssi is too low
  •    if((rssi_int16 == 0U) || (reg_agc > 0xbU))
  •    {
  •      rsi_dbm = 127 ;
  •    }
  •    else
  •    {
  •        rsi_dbm = (int32_t)reg_agc * 6 - 127 ;
  •        while(rssi_int16 > 30U)
  •        {
  •          rsi_dbm += 6 ;
  •          rssi_int16 = (rssi_int16 >> 1) ;
  •        }


  •       rsi_dbm += (int32_t)(uint32_t)((417U*rssi_int16 + 18080U)>>10) ;
  •    }
  •   
  •    // result is in rsi_dbm ;

例如)RSSI 级别:0x0701BF
rssi_int16 = 0x01BF(RSSI 级别值的低 2 字节)
reg_agc = 0x07(RSSI Level 值的高 1 字节)
结果 -> -33.00dBm
可以参考上面的公式。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分