无线传感器网络实验报告Contiki mac协议与xmac协议的比较1.简介无线传感器网络(wireless sensor networks,WSN)节点由电池供电,其能力非常有限,同时由于工作环境恶劣以及其他各种因素,节点能源一般不可补充。
因而降低能耗、延长节点使用寿命是所有无线传感器网络研究的重点。
WSN中的能量能耗主要包括通信能耗、感知能耗和计算能耗,其中通信能耗所占的比重最大,因此,减少通信能耗是延长网络生存时间的有效手段。
同时,研究表明节点通信时Radio模块在数据收发和空闲侦听时的能耗几乎相同,所以要想节能就需要最大限度地减少Radio模块的侦听时间(收发时间不能减少),及减小占空比。
传统的无线网络中,主要考虑到问题是高吞吐量、低延时等,不需要考虑能量消耗,Radio模块不需要关闭,所以传统无线网络MAC协议无法直接应用于WSN,各种针对传感器网络特点的MAC协议相继提出。
现有的WSN MAC协议按照不同的分类方式可以分成许多类型,其中根据信道访问策略的不同可以分为:X-MAC协议X-MAC协议也基于B-MAC协议的改进,改进了其前导序列过长的问题,将前导序列分割成许多频闪前导(strobed preamble),在每个频闪前导中嵌入目的地址信息,非接收节点尽早丢弃分组并睡眠。
X-MAC在发送两个相邻的频闪序列之间插入一个侦听信道间隔,用以侦听接收节点的唤醒标识。
接收节点利用频闪前导之间的时间间隔,向发送节点发送早期确认,发送节点收到早期确认后立即发送数据分组,避免发送节点过度前导和接收节点过度侦听。
X-MAC还设计了一种自适应算法,根据网络流量变化动态调整节点的占空比,以减少单跳延时。
优点:X-MAC最大的优点是不再需要发送一个完整长度的前导序列来唤醒接收节点,因而发送延时和收发能耗都比较小;节点只需监听一个频闪前导就能转入睡眠。
缺点:节点每次醒来探测信道的时间有所增加,这使得协议在低负载网络中能耗性比较差。
而且分组长度、数据发送速率等协议参数还需进一步确定X-MAC原理图如图3所示:ContikiMAC协议一.ContikiMAC协议中使用的主要机制:1.时间划分2.快速睡眠3.锁时优化ContikiMAC只使用了异步的机制,没有标识信息也没有附加的消息头,它的数据也都是普通的链路层消息。
时间划分:ContikiMAC协议具有一个基于传输过程中精确时间度量的、能量高效的唤醒技术。
的唤醒技术利用一种价格低廉的CCA(空闲信道检测)机制来实现这种机制使用无线电收发器的RSSI(接收信号强度指示值)来判断指定信道的状态。
ContikiMAC中的时间划分必须满足一系列的限制。
如图4:图4ContikiMAC中的时间划分要求:ta+td<ti<tc<tc+2tr<tsti:每次数据传输之间的时间间隔tr:进行一次稳定的RSSI指示所需要的时间tc:两次CCA检测之间的时间间隔ta:手段数据包和发送ACK消息的时间间隔td:从接收节点那里成功检测到一个ACK消息所需的时间在IEEE802.15.4标准下,不等式中一些变量被固化,如IEEE802.15.4标准定义的ta值为12个时间点我,在802.15.4中,一个时间单位是4/250ms.然后td=40/250,tr是由cc2420无线收发器的特性决定的,tr=0.192ms,不等式变为:0.352<ti<tc<tc+0.384<ts给出了ts的下限,0.736ms(0.352+0.384),这也为我们的能传输的最小报文长度设了限制。
对其它参数,contiki系统中使用时间参数配置为:ti=0.4ms tc=0.5ms ts=0.884ms快速睡眠:contikiMAC中的并不实质性地检测数据传输,而只是检测无线信道的信号强度是否在特定的门限值之上。
如果一个邻居节点在向当前的接收节点发送数据,接收节点应该保持唤醒状态来保证接收到完整的数据包,然后需要发送一个回执。
检测到该数据包的其它节点则可以快速切换回睡眠状态。
然而,潜在的接收节点并不能立即回去睡眠,因为它们必须保证接收到完整的数据包。
在检测之后,最安全的保持唤醒状态的时间是tl+ti+tl这里表示最长数据包所需的传输时间。
当由于检测到错误的无线噪声而唤醒时,的快速睡眠机制使潜在的接收节点可以早些进入休眠状态。
这种优化机制利用了中的特定传输模式。
1.若CCA检测到活动,但信道活动状态的时间比tl还要长,说明CCA检测到的是噪声,节点返回睡眠2.如果信道活动状态过程之后有一段比ti更长的静止,则返回睡眠。
3.若活动状态后有一段正确的静止长度,但接收节点检测不到任何数据报文头,返回睡眠。
快速睡眠如图5所示:图5快速睡眠锁时优化(phase-lock):该机制类似于Wise-MAC,假设传感器网络中的每个接收节点都有一个周期的、稳定的唤醒时间间隔,则发送节点可利用接收节点的唤醒时间来优化传输过程,这就是锁时优化机制。
当发送节点检测到从接收节点返回的回执消息时,它会记录下检测到的时间,并以此判断出接收节点的唤醒时间。
由于接收节点必须保持唤醒状态来保证完整地接收报文,则发送节点可假设收到消息意味着发送节点在接收节点唤醒状态的时间窗内成功向其发送了一个数据包,由此发送节点便可以知道其唤醒时间。
在发送节点了解其唤醒时间之后,发送节点便可以在接收节点应该是唤醒状态的时候向其传输数据包。
Cooja仿真实验1.我分别测试4、8、12、16个节点时,contikimac和xmac在能量消耗和丢包率两方面的特点。
2.以下是4个节点时的截图:ContikiXmac 3.以下是八个节点的截图:Contikixmac 4.以下是12个节点时的截图:ContikiXmac 5.以下是16个节点时的截图:contikiXmac6.将文件中的数据导出,然后用下列程序分析:1.(void)setDownloadProgressBlock:(void(^)(NSUInteger bytesRead,long long totalBytesRead,long long totalBytesExpectedToRead))block;方法,在block中计算数目。
[html]view plain copy1.在计算sending和got数目需要自己写一个downTask类,负责记录。
downTask主要代码来源网<a target=_blank href="/conslee/archive/126370.html">点击打开链接</a>或/conslee/archive/126370.html [html]view plain copy1.<span style="font-family:Arial,Helvetica,sans-serif;">connectionOperation=[[AFURLConnectionOperation alloc]initWithRequest:request];</span> [html]view plain copy1.[connectionOperation setDownloadProgressBlock:^(NSUInteger bytesRead,long long totalBytesRead,long long totalBytesExpectedToRead){2.//NSLog(@"bytesRead:%zi",bytesRead);3.//NSLog(@"totalBytesRead:%zi",totalBytesRead);4.//NSLog(@"totalBytesExpectedToRead:%zi",totalBytesExpectedToRead);5.6.weakSelf.downTask.totalReadPeriod+=bytesRead;7.weakSelf.downTask.totalRead+=bytesRead;8.NSDate*currentDate=[NSDate date];9.if([currentDate timeIntervalSinceDate:weakSelf.downTask.oldDatePeriod]>=1){10.double speed=[weakSelf.downTask getSpeedWithDate:currentDate];11.12.[weakSelf.gaugeView setGaugeValue:speed animation:YES];13.NSString*unit=nil;14.if(speed>RATIO){15.unit=@"M";16.speed=speed/RATIO;17.}18.else{19.unit=@"KB";20.speed=speed;21.}22.NSLog(@"current speed:%f%@",speed,unit);bSpeed.text=[NSString stringWithFormat:@"%.2f%@",speed,unit];24.//NSLog(@"totalBytesRead:%zi",totalBytesRead);25.}26.27.}];7.之后我发现其实不用程序直接用记事本计数就可,并且还有很多简便方法。
8.实验得到的结果数据如下:9.能量消耗部分截图.10.总结实验描述了无线传感器网络协议的ContikiMAC和xmac的区别。
本次试验表明,Sink 节点的能量消耗比其他的节点的要大,平均消耗并没有很大变化;随着节点的增多,两个协议的丢包率都增高,表现优于contiki似乎要优于xmac,所以细节和实验论证MATLAB 绘图有些许瑕疵,但是实验的大体和步骤都做了一遍,实验锻炼了动手能力,感觉这门课有趣。