leach和leach-c协议仿真
2014-03-30 19:49
148 查看
1.复制leach_test为leach-c_test,修改里面的文件夹和输出文件名。并且手动建立相应的文件夹。
很多教程说只修改文件名,没提到修改文件夹,如果同时运行两个协议会覆盖一部分实验结果的,而且是并行的就更难分解出是哪个协议的实验数据了。所以还是分开较好。
2.添加到test文件最后,后台运行的,需要等待。
3.写脚本分析实验数据。
[plain]
view plaincopy
#计算不同时间剩余节点的数量
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]);
}
[plain]
view plaincopy
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]);
}
[plain]
view plaincopy
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来画图
[plain]
view plaincopy
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更优!
想知道为什么还需要看懂这两个协议喽。
接下来代码和理论分析。
很多教程说只修改文件名,没提到修改文件夹,如果同时运行两个协议会覆盖一部分实验结果的,而且是并行的就更难分解出是哪个协议的实验数据了。所以还是分开较好。
2.添加到test文件最后,后台运行的,需要等待。
3.写脚本分析实验数据。
[plain]
view plaincopy
#计算不同时间剩余节点的数量
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]);
}
[plain]
view plaincopy
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]);
}
[plain]
view plaincopy
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来画图
[plain]
view plaincopy
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更优!
想知道为什么还需要看懂这两个协议喽。
接下来代码和理论分析。
相关文章推荐
- leach和leach-c协议仿真
- leach协议matlab仿真代码
- leach和leach-c协议仿真
- ns2下leach协议的仿真
- ns2下leach和leach-c协议不同簇首个数仿真比较
- ns2下leach和leach-c协议不同基站位置仿真比较
- 【转】Leach协议学习(4)——Leach协议改进
- LEACH&LEACH-C 仿真分析(2)
- NS2.27上安装和分析leach协议
- NS 网络模拟和协议仿真黄化吉教材的修正——break用例P24
- 平台gpsr协议仿真步骤
- LEACH&LEACH-C仿真分析(3)
- 收藏 Leach协议学习(3)——Leach协议分析
- leach协议的nam过程实现!(转)
- 通信算法之十五:WIFI-802.11a,b,g,n协议物理层仿真
- OpenFlow协议及其简单仿真
- NS 网络模拟和协议仿真黄化吉教材的修正——continue用例P24
- NS2.27平台安装leach协议
- leach协议在NS2.33上的安装
- 【转】Leach协议学习(2)——简单仿真测试