现在的位置: 首页 > 综合 > 正文

LEACH&LEACH-C仿真分析(3)

2013年08月27日 ⁄ 综合 ⁄ 共 3774字 ⁄ 字号 评论关闭

转自 王子 空间 http://272387537.qzone.qq.com/

 

    对LEACH及LEACH-C的仿真结果产生的几个文件开始分析,具体的仿真步骤就不介绍了哈。自己看哦!

    leach.alive, leach.energy, leach.data, leach.err, leach.out我个人觉得有点价值的就是这5个文件。因为我的。TCL脚本文件没有记录.tr和.nam。

1。leach.err里面主要就是提示仿真过程中的一些错误信息,如果在仿真完成后,该文件中的内容是

INITIALIZE THE LIST xListHead
channel.cc:sendUp - Calc highestAntennaZ_ and distCST_
highestAntennaZ_ = 1.5, distCST_ = 222.8
SORTING LISTS ...DONE!

代表一切正常。

2。leach.out我目前觉得没有什么分析的价值,它好象是对整个仿真过程数据的一个记录过程,从初始化节点,创建节点。记录节点的坐标。一些警告信息,在每个时间间隔内,总的能量消耗,总的数据传输量,总的节点存活数。节点什么时候与BS传输信息等等。由于我的该文件有很多警告信息,所以不是很好看。也没分析。以后学习中可能会有个分析出炉。

3。leach.alive的分析。AWK文件在我前面的文章中有,这我就不重复介绍了。.alive 文件第一行是运行时间,第二行就节点ID,第三行记录的是节点状态,如果是1,表示该节点还存活,如果是0,则表示节点死亡

4。leach.energy的分析是我今天介绍的重点之一。因为之前的.awk文件都是在网上搜索的,只知道用该文件以及一定的命令就可以用它来对目标文件进行提取。今天自己看了看分析leach.alive文件的.awk文件。我自己写了个energy.awk文件如下:

energy.awk脚本文件

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]);
}

这个就是我的分析思路。具体gawk命令我就不再介绍了。

5。接下来的leach.data的分析和上面4。的分析基本上差不多,在这里我要介绍一下的是,.data文件第3个字段的涵义困扰了我很久。今天查了下原始英文资料是这样介绍的:

Leach produces many data files that are stored in the directory of leach_sims. In leach.data, the first column denotes the time, more precisly the time at the beginning of every round; the second column denotes the ID of a node; the third column stands for the number of packets that are sent by this node and sucessfully received by the base station.

我的理解是,第3列代表的意思是,节点当前时间内,节点发送且被BS成功接收的数据包的个数。

所以我就写了以下一个data.awk文件来记录每个时间段(可以理解为每轮),协议发包且成功接收的总数。如下:

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]);
}

    差不多都介绍完了吧!上图!



照片描述:与那张100,100是一样的,就是BS站的位置不一样!其他的分析脚本文件和环境参数全部一样!

     左上这个图我们已经很熟悉了,之前已经发过。现在我们来看看右上这个图(对.energy的对比分析),很明显可以看到,LEACH和LEACH-C的能量消耗曲线是交替上升,不好分出优劣。而在520秒左右的时候,节点能量先达到了200J(100个节点,每个节点2J)。过了80多秒左右后,LEACH-C的能量曲线才达到200。

     下面这个图,是对.data的对比分析。这个图可以很清晰的看到,在一直的过程中,LEACH-C发送的包都是比LEACH要多的,并且在520秒之后,LEACH所有节点全部死亡,LEACH-C仍有发包成功。我可以这样理解吧。相同的能量消耗,在相同特定环境下,最后使用LEACH-C采集到的数据包更多。

          最后附上我GNUPLOT的命令吧,如何画多图:

gnuplot> set multiplot                                           //设置多图模式
multiplot> set origin 0.0,0.5                             //设置第一个图的0,0点的坐标
multiplot> set size 0.5,0.5                                      //设置图大小
multiplot> plot 'l-a-2.gnuplot' with linespoint,'lc-a-2.gnuplot' with linespoint                        //画图
multiplot> set origin 0.5,0.5
multiplot> set size 0.5,0.5
multiplot> plot 'l-e-2.gnuplot' with linespoint,'lc-e-2.gnuplot' with linespoint
multiplot> set origin 0.33,0.0
multiplot> set size 0.5,0.5
multiplot> plot 'l-d-2.gnuplot' with linespoint,'lc-d-2.gnuplot' with linespoint

 

没有迈不过的坎,没有翻不过的山。学如此,人生亦如此!加油,一切都会好起来

抱歉!评论已关闭.