|
PER--Packet Error Rate,中文我们暂且叫“误包率”吧,听起来没有“误码率”来得顺口,只是这个测试的基本单位是“数据包”,一个数据包又包含了N多的“码”,所以叫误包率应该更准确些。或者直接叫PER吧,本人也曾极度反对中国人和中国人用英文,不过有的时候似乎效率更高些。。。
在上一个例子中,用Basic RF实现了一个基本的点对点传输的实验。本例程仍然基于相同的平台,但关注的是一个对无线通讯来讲一个至关重要的参数,就是传输质量,上例中曾增加过RSSI值的显示,但这只是一个微观参数,我们最终关注的是在不同的传输速率下,数据包能不能完全接收?如果不能,失误率是多少--这个参数就叫PER。
[注:本文源自www.feibit.com--“飞比”Zigbee论坛,为尊重劳动者成果,如需转载请保留此行,并通知作者]
例2.基于Basic RF的传输质量(PER)测试
注:本例程的源代码来源于TI官方网站,为方便大家,请点此下载。代码解压后请进入..\ide\srf05_cc2530\iar,打开per_test工程文件进行编译、调试。另外,此例在Zstack2006中也有相同功能的例程,本教程均可适用。
[一]程序功能
本例程要求有两个节点,实现一个发送器、一个接收器的单向RF连接。在程序启动时,要对本节点做发送还是接收器进行设置。如果是发送器在使用前必须进行如下几个设置:
1. 传输频率
2. 发送器输出功率
3. 总共要发送的数据包个数
4. 发射速率(每秒种发送多少个包)
如果设置为接收器,是需要设置传输频率。但接收器会显示状态:PER/RSSI值及已收到数据包个数
[二]操作说明
将程序编译、下载至开发板后,按Reset键后,屏幕显示如下:
此时,按下“S1”键,进入设置菜单:
用摇杆(Joystick)左右键进行选择,“S1”键进行确认。具体需要设置的参数如下表所图:
屏幕显示 | 中文解释 | 备选参数及说明 | Channel | 传输频率选择 | 11 – 26 (2405 – 2480 MHz) | Operating Mode | 设备模式 | Receiver, Transmitter(接收器,发送器) | TX Output Power | 发射功率 | -3 dBm, 0 dBm, 4 dBm | Burst Size | 本次要发送的数据包个数,达到数量后发送会停止。 | 1K, 10K, 100K, 1M | Packet rate | 发射速率(每秒种发送多少个包) | 100, 50, 20,10 |
通过摇杆及S1键分别将两个节点设为发送器,及接收器,然后设置相应参数后,两个设置分别显示如下:
此时按发送器摇杆上的中间键,开始发送数据,如下所示:
接收端误包率及RSSI值显示:
注:接收器显示的PER/RSSI值可以通过按S1值进行重置。
[三]系统框架
与例1基本相同,请参考上一章。此处仅探讨下本例中计算PER和RSSI值的方法:
为了获取传输的性能参数,接收器中包含了如下几个数据(包含在rxStats变量中,其类型为perRxStats_t)
rxStats.expectedSeqNum 预计下一个数据包的序号,其值等于“成功接收的数据包”+“丢失的数据包”+1
rxStats.rssiSum 上32个数据包的RSSI值的和
rxStats.rcvdPkts 每次PER测试中,成功接收到的数据包的个数
rxStats.lostPkts 丢失数据包的个数
其中丢失数据包个数是通过数据包序号的“跳跃”来计算的,比如收到第10个数据包后,expectedSeqNum应该为11,但在收到下一个数据包后发现其序号为12,那就说明其中丢了一个包。所以“丢失数据包个数”只有在后一个数据包到达时才能知道。另外,有错误的数据包也被认为是丢失的。
PER值是用如下公式进行计算的:
PER = 1000* rxStats.lostPkts/ (rxStats. lostPkts+ rxStats. rcvdPkts)
(rxStats. rcvdPkts>=1)
RSSI的值包含在每个数据包"payload"后的第一个字节,但这个值并非实际的RSSI值,还要加上一个固定的偏移量,偏移量的大小可以从CC2530的数据手册中找到。并且程序指定用32个数据包的RSSI平均值作为最终的结果在屏幕上显示,程序中有一个先进先出的“环形”buffer来记录前32个包的RSSI值作为计算基准。
[四]网络结构及协议解析
请参考上一章。
[五]扩展思考
1. RSSI, SNR, LQI均与信号质量相关,他们是什么关系?LQI(连接质量指示)如何得到的?
2. 如何提高信号质量,降低误包率? |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|