您的位置: 旅游网 > 爆料

一种无线传感器网络CSMA协议的设计与实2020年

发布时间:2020-01-26 02:21:27

一种无线传感器络CSMA协议的设计与实现 - 通信/络 - 电子工程

2.1 信道活动状态判断的基本规则

采样得到的RSSI值是一个有符号的振幅值,它只有一个字节。这样的值并不利于分析,所以统一将其值上升128,即对读出的RSSI值统一加上128,因此转换后的值都是为正的,后面提到的RSSI值指的都是转换后的值。

假设上层设定信道采样窗口数为N。为了完成连续的N次采样,需要使用一个采样定时器。CC2420的RSSI采样时间约为128 μs,再加上硬件延迟以及软件处理延迟时间,采样定时器设置为1 ms循环触发(这1 ms的采样在CSMA中称为“采样窗口”)。每次定时器触发后,就向CC2420发送命令读取当前信道的RSSI值,然后采用如下规则进行信道活动状态判断:

① 如果采样到的RSSI值大于等于阈值minSignal,那么就判定信道正被其他节点使用,即使采样未满N次也不再采样,并立即通知上层协议信道正被使用。反之如果该次采样监测岀的值小于或等于minSignal,那么本次采样不做任何判断,继续下次的采样。

② 如果一直采样到最后,且最后一次的RSSI值小于noiseLevel(噪声强度),那么就判定信道为空闲,并给出修改阈值标志,通知上层可以发送数据。注意,只要判定为信道空闲,就要给出更新阈值标志,原因将在后面的阈值维护中说明。

如上所述,只要采样值大于等于minSignal,就判定信道是繁忙的,而判定信道空闲时却要求所有的采样都小于minSignal,且最后一次的采样值要小于noiseLevel。然而上面两个规则并不完善,并不能处理任何情况,以下两种情况就不能得出结论: 最后一次采样岀错没有得到RSSI值,或者最后一次采样的RSSI值介于noiseLevel和minSignal之间。此时就必须使用扩展规则。

2.2 信道活动状态判断的扩展规则

扩展规则是为了处理基本规则不能解决的问题。扩展规则其实就是扩展m次采样,在这m次的扩展采样中使用对应的扩展规则来判定信道状态。扩展规则涉及一些统计的方法,需要维护一个extCSVal的统计变量。扩展规则如下:

① 扩展采样中,判定信道繁忙的规则与基本规则一样。只要检查到采样RSSI值大于等于minSignal,就判定为信道忙,然后结束扩展采样。

② 信道空闲的判定与基本规则不同,因为已经处于扩展采样,所以只要检查到采样RSSI值小于noiseLevel,就可判定信道为空闲,同时给出更新阈值的标志。

③ 如果在扩展采样中并没有出现以上两种情况,那么就必须要计算extCSVal来做判断。先说明赋给extCSVal的初值,如果最后一次基本采样的RSSI值介于两阈值之间,那么直接将这个RSSI值赋给extCSVal;如果最后一次基本采样读取RSSI失败,那么将第一次扩展采样得到的介于两阈值之间的RSSI值赋给extCSVal。如果extCSVal已经赋值,而扩展采样中又得到了介于两阈值之间的RSSI值,那么更新extCSVal值:extCSVal = (extCSVal + RSSI)?1(即取平均值)。

④ 如果m次扩展采样,依靠前两个规则仍然不能判断信道状态,且最后一次扩展采样的结果仍然介于两者之间,那就使用统计值extCSVal来辅助判断。规则如下:如果extCSVal = ((minSignal + noiseLevel)?1),那么就判定信道忙;反之,则判定信道空闲。

⑤ 最后是最坏的一种情况:当扩展采样的最后一次采样发生错误,读取RSSI值失败时,并不知道信道的实际状况,但也不能一直扩展下去,所以判断为信道繁忙以避免出错。

通过基本规则和扩展规则已经可以得出一个准确性较高的信道活动状态判定,扩展规则弥补了基本规则可能会出现的错误。在实际的测试中,如果两个阈值的初值选择得很合适,那么一般并不会进入扩展采样。若阈值初值选择得不贴切,如mingSignal初值过大,则noiseLevel初值过小时都会导致进入扩展采样。

这里还需要说明的是m的取值。本文中采样定时器设置为1 ms,即1 ms采样一次。扩展采样次数m取值越大,准确性自然就越高,但是整个络性能有所下降(花去的额外时间过多)。m的值也不能过小,不然extCSVal统计值就不能发挥其作用。由于本文使用的初始阈值是经过大量测试确定的精确值(参照信号强度阈值初值的选择),因此使用该初始阈值进行的测试结果显示: 只有极少情况进入扩展采样(约5 000次监测进入一次扩展采样)。鉴于这种实际情况,m的取值不需要很大,本文取其值为3。如果初始阈值不能精确设定,那么可将m值放大。

3 信号强度阈值的选择和更新维护

从信道监测的基本规则和扩展规则可以看出,信号强度的两个阈值对信道状态的判定十分重要,因此这两个阈值的初始值选择必须十分慎重;而且必须要根据当前信道状态动态更新阈值的机制。

3.1 信号强度阈值的更新机制

阈值的动态更新必须使用大量的实时RSSI值作为统计值,且需要把RSSI值分为两类: 一类是信道繁忙时的RSSI,本文称为busyRSSI;另一类是信道空闲时的RSSI值,本文称为noiseRSSI。这两个值可以在物理层每接收到一个数据包时获取,因为CC2420接收到一个数据包时将在数据包的倒数第二个字节(FCS域)自动填充接收时的RSSI值,因此busyRSSI值就无条件地得到了;而在刚接收完数据包后信道一般都是空闲的,所以这时立即读取当前的RSSI值,就可以得到noiseRSSI值。为避免例外,可将得到的noiseRSSI值与minSignal进行比较,如果大于等于minSignal就丢弃。

在获得busyRSSI和noiseRSSI后就对其进行统计操作,为实现这个目的需要维护一个统计变量avgSignal,用来统计所有的busyRSSI值。avgSignal的初值等于minSignal的初值即初始阈值,并按1/4的权重进行统计,即avgSignal = (avgSignal?1) + ((avgSignal + busyRSSI)?2)。noiseRSSI的值并不需要统计,这是因为读出noiseRSSI的值很稳定几乎不变。

noiseLevel阈值的更新相对简单,因为噪声信号强度十分稳定,因此不必对noiseRSSI做统计,每次读取noiseRSSI后可直接对noiseLevel进行更新。更新规则也是采用1/4权重,即noiseLevel = (noiseLevel ? 1) + ((noiseLevel + noiseRSSI) ? 2)。

minSignal阈值需要针对两种互补的情况来进行更新调整。第一种情况是一段时间内的采样结果全是信道空闲,说明所有的采样值都小于minSignal,因此有可能minSignal的值过高,应对其调整将其适当降低。该情况在监测信道结果为空闲时触发更新,更新方法是直接利用当前的busyRSSI来更新;只要busyRSSI的值小于当前的minSignal值,那么就将busyRSSI的值作为最新的minSignal值。这样做是因为在busyRSSI的信号强度下已经能够接收数据了,而busyRSSI又比当前的minSignal要小,所以更接近实际的阈值。

第二种情况是对第一种情况的补充。在做了第一种情况的修改后,如果长时间内监测到的都是信道繁忙(如载波监听几次回退后都返回繁忙),那么就可能是minSignal的值设置得太低,因此要适当调高该值,以避免使用第一种更新方式后由于设置的minSignal值太低而导致不能使用信道的情况。该情况提供一个接口由上层(MAC层)来调用更新。更新需要借助统计量avgSignal,更新的伪代码如下(其中initBusySingal指的是minSignal的最初值)://如果minSignal大于或等于初值,就说明没有进行第一种更新,所以没有进行第二种更新的必要

if (minSignal initBusySignal){//更合理地提高minSignal值,不能一下将minSignal大幅度提高,且要保证更新后minSignal比initBusySignal小

if (avgSignal initBusySignal){

minSignal = (minSignal + avgSignal) ? 1;

}

else{

minSignal = (minSignal + initBusySignal) ? 1;

}

}

initBusySignal的选择将在后面介绍,它的选择对更新机制尤为重要。因为minSignal的更新机制建立的基础就是initBusySignal非常接近实际临界值。initBusySignal本身也是经过大量测试后选择的一个信道活动最小强度值,而它肯定会大于(最小等于)实际的临界值,所以minSignal更新后应该比initBusySignal小才对。

3.2 信号强度阈值初始值的选择

信号强度阈值的初始值必须根据实际测试岀的大量强度值来设定,如果设置失误,将导致信道状态判断不准确。本文假设两个初值分别是initNoiseSignal和initBusySignal。下面给出部分测试强度的数据,如表1所列。测试时使用两个节点,且两个节点都是使用新电池(即电源充沛)。表中,“阻隔”指的是一堵大约10 cm厚的墙。

表1 信号强度测试数据

活血化瘀活血舒筋
糖尿病胃轻瘫腹胀吃啥好
初期脑梗怎么治疗
糖尿病胃轻瘫消化不好的治疗
他达拉非实际使用效果
猜你会喜欢的
猜你会喜欢的