CC2530显示终端信号强度 RSSI LQI
2016-04-17 02:14
316 查看
转载
http://bbs.feibit.com/thread-8836-1-1.html
(出处: 飞比ZigBee智能家居及照明(物联网方案与教育平台专家))
一、什么是RSSI LQI
摘自葵花宝典3.2.4(OUTMAN):
3.2.4 连接质量指示――LQI
还记得电脑的WIFI指示吧,我也不了解WIFI协议,但我想这应该是相同的东西吧。在802.15.4中,有两种检测连接质量的方法,一个是检测“接收信号强度”――RSS,另外一个是检测“信噪比”――SNR。RSS值是通过检测接收到的信号的全部能量情况来判断的。
又有人举手了?这位同学有什么问题?――什么,这是怎么做到的?
呃、、、这个我真不懂,不过我知道肯定有个寄存器来读的。至于这个值是怎么来的,你还是问下做IC的人,或者你找个不是那么忙的教授,说不定他知道~~~不过这位小同学啊,看你问这个问题,我得多说你几句了。你这么“叫真”不好,倒不是打击你,我知道你说不定能成个人物,不过,学习是要讲“深度”和“广度”并举的,如果什么事情都一头钻进去,你会迷路的。。。
我们继续,那“信噪比”SNR,顾名思义,就是信号除以噪声的比率了。当然,值越大表示信号质量越好。
每一个接收到的数据包都会做一个LQI的测量,它至少有八个等级。这个测量是物理层很重要的一个任务,因为这个值不但他的直属领导-MAC层要用到,他的上几层领导-网络层和应用层都用得到。比如说网络层(NWK)在选择路由的时候,LQI就是一个很重要的指标,LQI值高的路径当然要优先考虑,当然,这也只是一个因素,比如说这个LQI高的路径里的设备都是电池供电的,那么在频繁选择这个路径的同时,必然会导致这些设备电池寿命缩短。所以,一定要多方面权衡――这就体现了“领导”的作用。。。
二、如何实现?
其实很简单,我们收到每个数据包的时候,RSSI和LQI已经打包好,我们只需要读出来就行了!
typedef struct
{
osal_event_hdr_t hdr; /* OSAL Message header */
uint16 groupId; /* Message's group ID - 0 if not set */
uint16 clusterId; /* Message's cluster ID */
afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
it's an InterPAN message */
uint16 macDestAddr; /* MAC header destination short address */
uint8 endPoint; /* destination endpoint */
uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */
uint8 LinkQuality; /* The link quality of the received data frame */
uint8 correlation; /* The raw correlation value of the received data frame */
int8 rssi; /* The received RF power in units dBm */
uint8 SecurityUse; /* deprecated */
uint32 timestamp; /* receipt timestamp from MAC */
afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;
这里我把程序贴出来,大家可以试验看一下
gEnableRssi是一个全局变量,默认是0,不打印RSSI,我们可以通过串口控制它:
收到RSSI和LQI后,可以用公式算一下,我试验的结果是基本相近:
串口收到:00 01 BC 24
网络地址:0x0001
RSSI: BC转换十进制是188, 188-255= -67dBm
LQI:24转换十进制 是36
RSSI=-(81-(LQI*91)/255) = -68.153dBm
http://bbs.feibit.com/thread-8836-1-1.html
(出处: 飞比ZigBee智能家居及照明(物联网方案与教育平台专家))
一、什么是RSSI LQI
摘自葵花宝典3.2.4(OUTMAN):
3.2.4 连接质量指示――LQI
还记得电脑的WIFI指示吧,我也不了解WIFI协议,但我想这应该是相同的东西吧。在802.15.4中,有两种检测连接质量的方法,一个是检测“接收信号强度”――RSS,另外一个是检测“信噪比”――SNR。RSS值是通过检测接收到的信号的全部能量情况来判断的。
又有人举手了?这位同学有什么问题?――什么,这是怎么做到的?
呃、、、这个我真不懂,不过我知道肯定有个寄存器来读的。至于这个值是怎么来的,你还是问下做IC的人,或者你找个不是那么忙的教授,说不定他知道~~~不过这位小同学啊,看你问这个问题,我得多说你几句了。你这么“叫真”不好,倒不是打击你,我知道你说不定能成个人物,不过,学习是要讲“深度”和“广度”并举的,如果什么事情都一头钻进去,你会迷路的。。。
我们继续,那“信噪比”SNR,顾名思义,就是信号除以噪声的比率了。当然,值越大表示信号质量越好。
每一个接收到的数据包都会做一个LQI的测量,它至少有八个等级。这个测量是物理层很重要的一个任务,因为这个值不但他的直属领导-MAC层要用到,他的上几层领导-网络层和应用层都用得到。比如说网络层(NWK)在选择路由的时候,LQI就是一个很重要的指标,LQI值高的路径当然要优先考虑,当然,这也只是一个因素,比如说这个LQI高的路径里的设备都是电池供电的,那么在频繁选择这个路径的同时,必然会导致这些设备电池寿命缩短。所以,一定要多方面权衡――这就体现了“领导”的作用。。。
二、如何实现?
其实很简单,我们收到每个数据包的时候,RSSI和LQI已经打包好,我们只需要读出来就行了!
typedef struct
{
osal_event_hdr_t hdr; /* OSAL Message header */
uint16 groupId; /* Message's group ID - 0 if not set */
uint16 clusterId; /* Message's cluster ID */
afAddrType_t srcAddr; /* Source Address, if endpoint is STUBAPS_INTER_PAN_EP,
it's an InterPAN message */
uint16 macDestAddr; /* MAC header destination short address */
uint8 endPoint; /* destination endpoint */
uint8 wasBroadcast; /* TRUE if network destination was a broadcast address */
uint8 LinkQuality; /* The link quality of the received data frame */
uint8 correlation; /* The raw correlation value of the received data frame */
int8 rssi; /* The received RF power in units dBm */
uint8 SecurityUse; /* deprecated */
uint32 timestamp; /* receipt timestamp from MAC */
afMSGCommandFormat_t cmd; /* Application Data */
} afIncomingMSGPacket_t;
这里我把程序贴出来,大家可以试验看一下
gEnableRssi是一个全局变量,默认是0,不打印RSSI,我们可以通过串口控制它:
收到RSSI和LQI后,可以用公式算一下,我试验的结果是基本相近:
串口收到:00 01 BC 24
网络地址:0x0001
RSSI: BC转换十进制是188, 188-255= -67dBm
LQI:24转换十进制 是36
RSSI=-(81-(LQI*91)/255) = -68.153dBm
相关文章推荐
- win8更新后mysql服务无法启动
- ASIHTTPRequest的使用——库文件的导入与设置
- 结对编程——我的噩梦
- 今天学习到的Myeclipse快捷键
- #1093 : 最短路径·三:SPFA算法 hihocoder SPFA
- Hibernate学习总结:ManyToMany双向关联
- System.err与System.out的区别
- 生成m3u8索引文件和TS媒体分片
- Iocomp控件教程之Percent Bar——百分比工具条控件
- 用Maven创建第一个项目
- Unicode字符编码的认识(不做任何代码的应用)
- 解析域名的时候不同的项目代表什么含义?主机记录、记录类型、线路类型、记录值、MX优先级、TTL
- 北漂这两年
- Hibernate学习总结:ManyToMany单向关联
- Iocomp控件教程之Pie Chart——饼状图控件
- CocoaPods安装使用及配置私有库
- AsyncTask的缺陷和问题
- JAVA技术开发规范(4)——JASMP平台的开发代码规范
- vim基本操作及其常用指令
- Hibernate学习总结:OneToMany/ManyToOne双向