Z-Stack中RSSI和LQI值的获取
时间:10-02
整理:3721RD
点击:
以下内容为转载,感觉对于了解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
*************************************************************************
中的RSSI_dec是指的寄存器中的rssi值?RSSI_dBm是指的最后实际应用的rssi值?另外,用作补偿的RSSI_offset是多少啊?"RSSI值再通过这个公式d=10^((ABS(RSSI)-A)/(10*n))得到距离了,至于精确度可以自己做实验测得对应曲线图,环境不一样精确度都会不一样的。"
我测试时在1m或者2m或3m等固定节点时,静止情况下,采样200次,rssi值一直在上下波动,最好的情况下波动范围是5dB左右,怎样取值比较好?
后来我直接用这些采样的平均值计算。但是多个节点处的rssi值进行拟合对数曲线、得到对数公式后,将平均rssi代入rssi公式,与真正的距离差别很大,
有其他比较好的处理方法吗?
另外,那个小于128情况下的链接http://blog.sina.com.cn/s/blog_5581213b0100ppra.html失效了,
还有原文地址吗?麻烦您再发一下,或者我的邮箱:acd8040@qq.com,谢谢
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
*************************************************************************
谢谢分享!
您好,您的这个公式
中的RSSI_dec是指的寄存器中的rssi值?RSSI_dBm是指的最后实际应用的rssi值?另外,用作补偿的RSSI_offset是多少啊?"RSSI值再通过这个公式d=10^((ABS(RSSI)-A)/(10*n))得到距离了,至于精确度可以自己做实验测得对应曲线图,环境不一样精确度都会不一样的。"
我测试时在1m或者2m或3m等固定节点时,静止情况下,采样200次,rssi值一直在上下波动,最好的情况下波动范围是5dB左右,怎样取值比较好?
后来我直接用这些采样的平均值计算。但是多个节点处的rssi值进行拟合对数曲线、得到对数公式后,将平均rssi代入rssi公式,与真正的距离差别很大,
有其他比较好的处理方法吗?
另外,那个小于128情况下的链接http://blog.sina.com.cn/s/blog_5581213b0100ppra.html失效了,
还有原文地址吗?麻烦您再发一下,或者我的邮箱:acd8040@qq.com,谢谢
感谢分享。
非常感谢分享