仿真问题处理与解析:
(不用网上说的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文件夹下,)
输入命令: cdmit/leach_sims进入mit/leach_sims目录下
然后输入命令
gawk-ftest.awkleach.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'withlinespoints(wlinesp简写形式)
回车这时候会生成如下一个图
Leach仿真图ok成功。
解析:
(1)如果我们把init_energy2\改为init_energy10\
也就是节点的能量翻了5倍!那么,在270秒的时候是绝对没有节点死亡的!因为他们的能量消
耗最多的才消耗到2J
(2)Data.gnuplot画出的仿真图像横坐标代表的是时间,纵坐标代表的是当前节点的总数
(3)我们定义的是一百的节点,在前270秒的时候,节点总数总是100,直到有节点能量损耗
完毕,那个红点就会小于100!而你这个图在总体趋势上来看是个下降的走势!是符合我们的推
断的!所以你这个仿真是有效的
(4)awk修改的地方
printf("%f%d\n",time[i],total[i]);
这句%f和%d之间加了一个空格!