leach和leach-c协议仿真
http://blog.csdn.net/codingkid/article/details/7215216
1.复制leach_test为leach-c_test,修改里面的文件夹和输出文件名。并且手动建立相应的文件夹。
很多教程说只修改文件名,没提到修改文件夹,如果同时运行两个协议会覆盖一部分实验结果的,而且是并行的就更难分解出是哪个协议的实验数据了。所以还是分开较好。
2.添加到test文件最后,后台运行的,需要等待。
3.写脚本分析实验数据。
- #计算不同时间剩余节点的数量
- BEGIN {
- countcyl=0;
- totalleft=0;
- lasttime=0;
- time[0]=0;
- node=0;
- total[0]=100;
- }
- {
- simtime = $1;
- nodeid = $2;
- statenode = $3;
- if (simtime>lasttime ) {
- countcyl++;
- lasttime=simtime;
- time[countcyl]=simtime;
- totalleft=0;
- }
- if (statenode==1)
- totalleft++;
- total[countcyl]=totalleft;
- }
- END {
- for(i=0;i<=countcyl;i++)
- printf( "%f %d\n",time[i],total[i]);
- }
- BEGIN {
- countcyl=0;
- packetsum=0; #当前时间发包且接收的总数
- lasttime=0;
- time[0]=0;
- sum[0]=0;
- }
- {
- simtime = $1;
- nodeid = $2;
- packet = $3; #读取当前时间,当前节点的发包且被成功接收的数目
- if (simtime>lasttime ) { #具体算法
- packtsum=0;
- countcyl++;
- lasttime=simtime;
- time[countcyl]=simtime;
- }
- if (simtime==lasttime ) {
- packetsum=packetsum+packet;
- sum[countcyl]=packetsum;
- }
- }
- END { #对应时段,打印发包总量。
- for(i=0;i<=countcyl;i++)
- printf ( "%f %f\n",time[i],sum[i]);
- }
- BEGIN {
- countcyl=0; #计数器,用来记录当前的轮数 或者当前的时段数
- energysum=0; #用来暂时储存当前时段的节点消耗能量总和
- lasttime=0; #记录当前最后的时间
- time[0]=0; #存储各(轮)分段的时间
- sum[0]=0; #存储各分段时间对应的消耗的能量
- }
- {
- simtime = $1; #文件中第一字段的值,当前时间
- nodeid = $2; #。。。第二字段的值,节点ID
- nodeenergy = $3; #。。。第三字段的值,当前节点使用的能量
- if (simtime>lasttime ) { #这里就是一个简单的方法来提取每个时间段,节点总共消耗了多少能量
- energysum=0;
- countcyl++;
- lasttime=simtime;
- time[countcyl]=simtime;
- }
- if (simtime==lasttime ) {
- if (nodeenergy<2.0) {
- energysum=energysum+nodeenergy;
- sum[countcyl]=energysum;
- }
- else if (nodeenergy>=2.0) { #节点初始的总能量为2
- energysum=energysum+2.0;
- sum[countcyl]=energysum;
- }
- }
- }
- END { #对应时间段,得出能量消耗量并打印
- for(i=0;i<=countcyl;i++)
- printf ( "%f %f\n",time[i],sum[i]);
- }
4.gnuplot来画图
- set multiplot
- set origin 0.0,0.5
- set size 0.5,0.5
- plot 'leach.alive.rst' with linespoint,'leach-c.alive.rst' with linespoint
- set origin 0.5,0.5
- set size 0.5,0.5
- plot 'leach.data.rst' with linespoint,'leach-c.data.rst' with linespoint
- set origin 0.33,0.0
- set size 0.5,0.5
- plot 'leach.energy.rst' with linespoint,'leach-c.energy.rst' with linespoint
得到如下图:

明显实验结果说明leach-c死亡节点比较早,虽然bs收到数据量大,但是能量消耗是leach协议更关心的问题。
修改bs坐标为(0,0),再次计算得到如下结果:

从各方面来说c都比leach更优,有人说若bs在节点区域内部,则leach更优,若在外部则leach-c更优!
想知道为什么还需要看懂这两个协议喽。
接下来代码和理论分析。
- 顶
- 0
- 踩
leach和leach-c协议仿真的更多相关文章
- 基于eNSP的NAT/NAPT协议仿真实践
一. 基本原理 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的.可扩展的.图形化 操作的网络仿真工具平台,主要对企业网络路由器.交换机进行软 ...
- ICMP 协议仿真及ping命令用途
1.实验目的 加深对 IPv4 协议首部各定义域的理解,掌握路由表的结构和基本配置命令,熟悉 ICMP 的调试操作. 2.实验原理 IPv4 协议定义,网络层协议的相关 RFC 定义和描述. 3.实验 ...
- 工业以太网EtherNet/IP协议安全分析整理
1. EtherNet/IP : 设备可以用户数据报协议(UDP)的隐式报文传送基于IO的资料 ,用户传输控制协议(TCP)显示报文上传和下参数,设定值,程式 ,用户主站的轮询 从站周期性的更 ...
- ns2.34 移植MFLOOD协议时出现的问题
安全按照<NS网络模拟核协议仿真>第11章的步骤进行修改,但是make的时候出现了一下错误: make[1]: 正在进入目录 `/home/wang/ns/ns-allinone-2.34 ...
- MLD协议测试——网络测试仪实操
一.简介 1. MLD简介 MLD · Multicast Listener Discovery Protocol · 组播侦听者发现协议 功能 · 在终端主机和与其直接相邻的组播路由器之间建立/维护 ...
- PPPoE协议测试——网络测试仪实操
前言: 与传统的接入方式相比,PPPoE具有较高的性能价格比,它在包括小区组网建设等一系列应用中被广泛采用,目前流行的宽带接入方式 ADSL 就使用了PPPoE协议. 随着低成本的宽带技术变得日益流行 ...
- BGP协议测试—信而泰网络测试仪实操
关键词 BGP; 协议仿真; 测试原理. 前言:当前信息化时代之下,数据传输已经成为了日常工作和生活必不可少的重要组成部分,网络服务的易得性和可靠性也因此得到广泛关注.这其中负责网络正常工作的诸多协 ...
- leach协议matlab仿真代码
http://www.ilovematlab.cn/thread-177006-1-1.html LEACH協議clear;%清除內存變量 xm=100;%x軸範圍ym=100;%y軸範圍 sink. ...
- 前端MVVM框架avalon揭秘 - HTML编译器
MVVM试图更加清晰的讲用户界面(UI)开发从应用程序的业务逻辑与行为中心分离,因为,很多这样的模式的实现都需要利用声明式数据绑定来实现讲View(视图)工作从其他层分离 所以出现了一大堆自定义的声明 ...
随机推荐
- Java反射机制的学习
Java反射机制是Java语言被视为准动态语言的关键性质.Java反射机制的核心就是允许在运行时通过Java Reflection APIs来取得已知名字的class类的相关信息,动态地生成此类,并调 ...
- 在 WinForm 中使用 Direct2D
在 C# 的 WinForm 应用中,界面的绘制使用的是 GDI+.不过在一些特别的应用中,可能需要用硬件加速来提高绘制的效率.下面就来介绍两种在 WinForm 应用中嵌入 Direct2D 的方法 ...
- 突然想起android与mfc差异
两者都可以算作是客户端程序,都是做上位机用的.而且都是被动执行. 相同点: 1.MFC中,它是由 project的名字 里面的某个成员函数来初始化,窗体,以及窗体里面的变量. 后面都是监听消息循环.数 ...
- ajax中加上AntiForgeryToken防止CSRF攻击
经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击 在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可. Html.A ...
- Android完美禁用Home键
重写Activity的onAttachedToWindow 方法 @Override public void onAttachedToWindow() { System.out.println(&qu ...
- Xml命名空间浅析
XML实例 在介绍xml命名空间之前,我们先来看段xml代码: <?xml version="1.0" encoding="UTF-8"?> < ...
- 如何抛出未认证(Unauthorized=401)异常代码
throw new System.ServiceModel.Web.WebFaultException<string>("\"mes\":\"认证信 ...
- HoloLens开发手记 - Unity之Gestures手势识别
手势识别是HoloLens交互的重要输入方法之一.HoloLens提供了底层API和高层API,可以满足不同的手势定制需求.底层API能够获取手的位置和速度信息,高层API则借助手势识别器来识别预设的 ...
- Scala学习笔记(八):基本类型和操作
基本类型: 整数类型=>数类型 字面量:字面量就是直接写在代码里的常量值 字面量是指由字母.数字等构成的字符串或者数值,它只能作为右值出现,所谓右值是指等号右边的值,如:int a=123这里的 ...
- Android新组件RecyclerView介绍,其效率更好
今天我们首先来说为什么要介绍这个新组件RecyclerView,因为前几天我发布了一个常用面试题ListView的复用及如何优化的文章,介绍给一些开发者,但是我看到有关的反馈说:现在都不再用listv ...