zigbee提取RSSI值

来源:互联网 发布:毕业生就业数据 编辑:程序博客网 时间:2024/06/05 20:55

1.

  当接收到数据包后,数据包中就有RSSI信息,可以用 afIncomingMSGPacket_t结构体提取,里面有 byte LinkQuality

RSSI反映接收信号强度,LQI反映信号的连接质量,两者都可以通过读取芯片的寄存器得到。
RSSI:信号强度值
LQI:连接质量

在协议栈中中,LQI是可以直接从接收数据后的结构体中得到,例如接收数据使用的结构定义为pkt:LQI = pkt->LinkQuality;
RSSI是通过读取max_rx.c文件中的数组rxBuf的第一位得到的,这里得到的信号强度值是以2进制补码的形式体现,具体使用可以参看2430 或者1110/2510的Data Sheet。
  RSSI = rxBuf[0];
2.RSSI与LQI之间的转换关系如下:
  RSSI =  -(81-(LQI*91)/255)
3.补充
RSSI反映接收信号强度,LQI反映信号的连接质量,两者都可以通过读取芯片的寄存器得到。LQI虽然能够判断连接质量,但会因调制方式的不同而不同。RSSI是判断两个节点距离的很好的参数。在从RSSI寄存器中读到数值后我们需要进行一系列转化,才能得到接收强度值.

 

 

以“\C51RF-3演示程序\菜单综合测试程序”为例。

       printRSSI(receiveBuffer[length]);   //这个函数显示出RSSI值。


为什么RSSI寄存器值需要减去45?

CC2430有一个内置的接收信号强度指示器(RSSI),其数字值为8 位有符号的二进制补码,可以从寄存器位RSSIL.RSSI_VAI读出。


RSSI值总是通过8个符号周期内(128μs)取平均值得到。RSSI 寄存器值RSSI.RSSI_VAI在RF引脚上涉及电能P,由下式表示:

P = RSSI_VAL + RSSI_OFFSET [dBm]


式中:RSSI_OFFSET是一个系统开发期间得到的来自前端增益的经验值。RSSI_OFFSET近似值为-45。例如,从RSSI寄存器中读到的值是-20,那么RF的输入功率大约是-65dBm。


典型的作为输入功率功能的RSSI_VAI 如图所示。从图中可以看到,从CC2430中读出的RSSI 值线性极好,且具有大约100dB的动态范围。

在系统开发RSSI_OFFSET期间,被发现前端增益RSSI_OFFSET约为-45。


例如: 如果读值-20从接收信号强度指示登记,射频输入功率约为-65dBm的。

LinkQuality其实就是LQI值,通过这个公式RSSI = -(81-(LQI*91)/255)转换成了RSSI值,RSSI值再通过这个公式d=10^((ABS(RSSI)-A)/(10*n))得到距离了,至于精确度可以自己做实验测得对应曲线图,环境不一样精确度都会不一样的。

从程序包上看:

typedef struct
{
osal_event_hdr_t hdr;
uint16 groupId;
uint16 clusterId;
afAddrType_t srcAddr;
byte endPoint;
byte wasBroadcast;
byte LinkQuality;
byte SecurityUse;
uint32 timestamp;
afMSGCommandFormat_t cmd;
} afIncomingMSGPacket_t;

每个接收到的数据包里面都有byte LinkQuality;这个参数,只需要取出来就可以了!