LEACH仿真问题处理与解析(1)

仿真问题处理与解析:

(不用网上说的zz 直接用leach本身带的 test leach_test

(1)     打开cygwin   输入命令 startxwin.bat回车 进入X ~ 环境下。

(2)     进入。。/ns-2.27目录下

(3)     然后 输入命令 ./test

./test后生成许多文件。结果文档同样在mit/uAMPS/sims文件夹下,分别为:wireless.alive, wireless.energy, wireless.data
wireless.alive
第一行是运行时间,第二行就节点ID,第三行记录的是节点状态,如果是1,表示该节点还存活,如果是0,则表示节点死亡。其他文件都是差不多的结构。模拟完成后,就需要分析结果。

(4)去leach_sims文件夹下面;不要打开LEACH_ALIVE那些文件只是刷新,看那些文件是不是慢幔的在变大 不断的刷新(刷新是为了更直观的看见文件在变化 其实不必非得刷新 它自己一直在变化呢 TDMAschedule.240.txt 文件也在增多 变到TDMAschedule.520.txt 就结束了),直到它不变化了。生成好多 TDMAschedule 文件 大概LEACH_ALIVE文件大小为 47k 时 不在变化 (等待 500秒 ) 具体数字只供参考 最重要的是 直到它不变化 就可以了

(5) 在ns-allinone-2.27/ns-2.27/mit/leach_sims文件夹下,我们新建一个test.awk的文件,然后把以下代码复制进去,利用awk,编写脚本,提取自己需要的信息,提取leach.alive文件中的数据信息。

{在网上搜索到了一个现成的——leach协议剩余节点和时间关系的awk脚本(来自于http://blog.baisi.net/?105639/viewspace-3105}
“BEGIN {

   countcyl=0;         //
计数器 记录????(不太确定是不是轮)

totalleft=0;          //
计数器 暂时记录当前时段(轮)存活的节点总数

   lasttime=0;      
//记录当前最后的时间
   time[0]=0;
       //存储各分段的时间
   node=0;      
   total[0]=100; //
记录各个时刻的剩余节点数 初始值为100
}       ;#
这些代码是在处理leach.alive数据之前执行的,其实就是将一些数据初始化。初始化只执行一次 begin后的action(语句体)

{

simtime              = $1;           
//文件的第一栏的值,运行时间
nodeid             = $2;             
//文件的第二栏的值,节点ID
statenode          = $3;        
//文件的第三栏的值,节点状态

if (simtime>lasttime ) {
countcyl++;
lasttime=simtime;
time[countcyl]=simtime;
totalleft=0;
   }                  //
将当前轮的运行时间simtime赋给lasttime 直到下一轮simtime变化时 才满足条件simtime>lasttime,并执行 花括号里的语句

if (statenode==1)
    totalleft++;
    total[countcyl]=totalleft;
}
#这些代码,处理leach.alive每一行,都执行一次。其大意为在total[i]存储第i轮时的剩余节点个数(存活节点数)time[i] 是第i轮对应的时间值。
END {
for(i=0;i<=countcyl;i++)
printf ( "%f %d/n",time[i]
,total[i]);
} ;#
这个代码,是在处理完leach.alive最后一行之后执行的,就是在这里,将数据写到了输出文件中。

注意:printf ( "%f %d/n",time[i],total[i]);

这句%f和%d之间加一个空格
(6) 这个AWK文件主要是用来处理leach.alive文件的,(我们记得在CD 到ns-allinone-2.27/ns-2.27/mit/leach_sims文件夹下,)

输入命令: cd mit/leach_sims 进入mit/leach_sims 目录下

然后输入命令

gawk -f test.awk leach.alive>data.gnuplot 该命令就是用AWK文件去处理leach.alive文件,处理结果存入data.gnuplot

(7) 接下来就是我的最后一步,用gnuplot来画图!注意:gnuplot画图是startxwin下运行的。

(还是在刚才的目录(ns-allinone-2.27/ns-2.27/mit/leach_sims) 下不变,)

输入命令 gnuplot回车

gnuplot> 后输入命令plot 'data.gnuplot' with linespointsw linesp 简写形式) 回车 这时候会生成如下一个图

Leach 仿真图 ok 成功。


 

 

 

 

解析:

 

1)如果我们把init_energy 2 /改为init_energy 10 /

也就是节点的能量翻了5倍!那么,在270秒的时候是绝对没有节点死亡的!因为他们的能量消耗最多的才消耗到2J

(2)Data.gnuplot 画出的仿真图像 横坐标代表的是时间,纵坐标代表的是当前节点的总数

(3)我们定义的是一百的节点,在前270秒的时候,节点总数总是100,直到有节点能量损耗完毕,那个红点就会小于100!而你这个图在总体趋势上来看是个下降的走势!是符合我们的推断的!所以你这个仿真是有效的

 

(4)awk修改的地方

printf ( "%f %d/n",time[i],total[i]);

这句%f和%d之间加了一个空格!

 

    这里需要感谢一个好朋友的帮助,好多结果都是在我们的共同讨论下得出来的。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值