|
以下内容为转载,感觉对于了解RSSI和LQI有益,特分享下,最后再次感谢原作者的分享精神
1.简介
RSSI:信号强度值
LQI:连接质量
在协议栈中中,LQI是可以直接从接收数据后的结构体中得到,例如接收数据使用的结构定义为pkt
:LQI = pkt->LinkQuality;
RSSI是通过读取max_rx.c文件中的数组rxBuf的第一位得到的,这里得到的信号强度值是以2进制补码的形式体现,具体使用可以参看CC2430 Data Sheet。
RSSI = rxBuf[0];
2.RSSI与LQI之间的转换关系如下:
RSSI = -(81-(LQI*91)/255)
3.补充
RSSI反映接收信号强度,LQI反映信号的连接质量,两者都可以通过读取芯片的寄存器得到。LQI虽然能够判断连接质量,但会因调制方式的不同而不同。
RSSI是判断两个节点距离的很好的参数。在从RSSI寄存器中读到数值后我们需要进行一系列转化,才能得到接收强度值。首先判断RSSI寄存器中的值RSSI dec是否大于128,如果成立,则:
如果小于128,则:
http://blog.sina.com.cn/s/blog_5581213b0100ppra.html
LinkQuality其实就是LQI值,通过这个公式RSSI = -(81-(LQI*91)/255)转换成了RSSI值,RSSI值再通过这个公式d=10^((ABS(RSSI)-A)/(10*n))得到距离了,至于精确度可以自己做实验测得对应曲线图,环境不一样精确度都会不一样的。
调试:(串口调试助手为十六进制显示)
在RefNode.c文件中通过UartTX_Send_String(rspMsg[LOCATION_XY_RSSI_RSSI_IDX]);语句向串口读取RSSI值。
由于rspMsg[LOCATION_XY_RSSI_RSSI_IDX]是一个int8类型的值,即有符号的8位二进制补码的形式,
因此在读取之前需要对其进行补码到原码的转换,
语句为:temp=~(rspMsg[LOCATION_XY_RSSI_RSSI_IDX]-1);
temp为rspMsg[LOCATION_XY_RSSI_RSSI_IDX]的原码的绝对值。
当参考节点与盲节点距离为1m时,RSSI的范围在-30dbm~-50dbm,即temp:00011110~00110010,1E~32.
但是,实际1m距离得到的temp值=98,与temp范围值不符。
于是,转向读取mac_rx.c文件中的pMacDataTx->internal.rssi= rssiDbm值
通过temp=~(pMacDataTx->internal.rssi-1)语句求出rssi的原码的绝对值
得到1m的temp值为29
*************************************************************************
![]()
|
|