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

来源:互联网 发布:潭州淘宝旗舰店靠谱吗 编辑:程序博客网 时间:2024/05/19 22:58

 LEACH仿真问题处理与解析(1) 收藏
转自:http://blog.csdn.net/xinxiuz/archive/2010/03/10/5364814.aspx

仿真问题处理与解析:

(不用网上说的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 linespoints(w 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之间加了一个空格!

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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xinxiuz/archive/2010/03/10/5364814.aspx

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq361301276/archive/2010/05/31/5638125.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq361301276/archive/2010/05/31/5638125.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq361301276/archive/2010/05/31/5638125.aspx

原创粉丝点击