Leach协议

  为了实现leach 协议,对ns进行扩展。在ns中增加了一个事件驱动模拟器支持模拟无线传感器网络协议。这些扩展包括MAC协议,用于计算和交互的能量分配模型和leach协议的体系结构。

   网络拓扑结构可以通过简单的Nodes, Links, Agents和Applications 描述。Nodes相当于网络中的终端主机, Links 是用于Nodes交互的连接器,  Agent用来实现不同网络协议,是支持分组产生和丢弃的节点。Applications用来产生数据和实现不同的应用函数。一旦网络拓扑结构建立起来后,模拟通过启动节点上的Applications运行。

  为了在ns中支持无线传感器网络,在ns中增加了 mobile nodes, MAC协议和信道传播模型Channel 。

  Applications类的头文件用Tcl语言写的,节点中的其他函数功能用C++语言写成的。

数据包的发送过程:

Applications创建数据包(data packets),然后发送给Agent. Agent执行协议栈中运输层和网络层的功能,将数据包发送给CMUTrace,。 CMUTrace将packets的统计数据写到trace 文件,然后将packets发至Connector。Connector将数据包传送给用于数据链路处理的链路层(LL).经过一小段时间的延迟后,数据包由LL发送给Queue缓冲队列。如果是还没有传送过的数据包,Queue将以队列进行存储。然后Queue将数据包出队列,发送到MAC层。然后开始运行MAC(媒体访问控制)协议。最终,packets被发送到网络接口层(Network Interface),网络接口层将packets加上正确的传输能量,然后将packets发送到Channel. Channel将packets进行拷贝,并发往连接信道的每一个节点。

发送过程可参考如下图1

数据包的接收过程:

数据包被节点的网络接口接收,并被向上传送至MAC层,Link-Layer, Connector, CMUTrace, 和Agent 函数. Agent 对数据包进行判定,并将数据包到达的信息通知给Application.

  接收过程与发送过程传输的路径相反。

 使用语言gwak, 绘图工具gnuplot. 上述场景中生成的trace文件名为:trace.tr

去掉所有以N开头的行数,该行为统计数据,得到文件trace1.tr

  

  1. 单个节点能量变化统计:

以节点1为例,提取所有Ni等于1的节点的时间和相应能量,存入文件1.txt.

   在gawk环境中,输入代码如下:

gawk ‘$9==/1/{print $3,$17}’trace1.tr  >1.txt

得到统计数据如下:

 

0.007580973 10.000000

0.007580973 10.000000

0.007580973 10.000000

0.007605973 10.000000

2.461346376 9.963363

2.461371376 9.963363

2.461371376 9.963363

3.536372973 9.945803

3.536372973 9.945803

3.536372973 9.945803

3.536397973 9.945803

 

在gnuplot环境中输入:

gnuplot  ‘1.txt’ using 1:2

得到的能量变化图如下图所示:

Leach协议_第1张图片

              图6  节点1能量变化图

 

(2) 工作节点能量统计:

     从trace.tr文件中提取普通节点的数据。

      gawk  ‘$1~/N/ { print $3,$5,&7 }’ trace.tr  >n.txt   //第3列代表时间,第5列代表节点ID,第7列代表能量值

      gawk ‘$2!=0 { print $1,$3}’n.txt  >2.txt     //去掉sink节点,sink节点ID为0

 

      再从2.txt中进行能量统计,统计时间间隔为0.5秒

       gawk ‘{  if($1<0.5)  sum+=$2  };

                END { print sum }’ 2.txt  >3.txt

       gawk ‘{  if($1<1.0)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

       gawk ‘{  if($1<2.5)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

       gawk ‘{  if($1<3.0)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

       gawk ‘{  if($1<3.5)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

       gawk ‘{  if($1<4.0)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

       gawk ‘{  if($1<4.5)  sum+=$2  };

                END { print sum }’ 2.txt  >>3.txt

 

得到 文件3.txt的统计数据如下:

       0.5 3918.84

1.0 2937.01

2.5 1395.12

3.0 4700.22

3.5 5194.79

4.0 3271.12

4.5 1132.38  

 

全网间隔时间为0.5秒工作节点能量变化图:

Leach协议_第2张图片

                         图7 工作节点能量变化图

 

3.全网所有节点能量和变化统计

在gawk环境下输入:

gawk ‘$9!=0 { print $3,$9,$17}’trace1.tr  >4.txt       //提取普通节点的时间,ID,能量

 

将以下程序写入文件1.awk

BEGIN{

        FS=" "

        unit=0.5;

         ftime=0;

         time=0;

       for(i=1;i<=50;i++)

           { e[i]=10.0;

             sum+=e[i];

             }

         printf "%f ,%f\n",time,sum;

       time+=unit;

       }

     

     {   

        if(ftime<$1 &&$1

         {    k=$2;

             e[k]=$3;        

             }   

      }

       

    END {

       sum=0

      for(i=1;i<=50;i++)

          sum+=e[i]

       printf "%f,%f\n",time,sum;

         }

  在awk环境下,输入

     awk –f 1.awk trace1.tr >5.txt

   在5.txt文件中得到的是0到0.5秒之间全网的总能量。

   再不断地将每个时间间隔为0.5秒的数据写入文件5.txt(只需在文件5.txt 中不断追加统计数据)。最后可以得到0到4.5秒之间全网在每0.5秒的时间间隔内的总能量。

   最后得到的5.txt统计数据如下:

 

     0.000000 ,500.000000

0.500000,499.757217

1.000000,499.504800

1.500000,499.504800

2.000000,499.504800

2.500000,499.172733

3.000000,498.436798

3.500000,497.875816

4.000000,497.525730

4.500000,496.948944

 

在gnuplot环境下,输入命令:

gnuplot  ‘5.txt’ using 1:2 with lp

最后得到的全网能量变化情况如下图所示:

Leach协议_第3张图片

                          图8  全网能量统计图

4. 生成的簇头和簇内节点统计

 设置普通节点个数50,AP节点1个,仿真时间10秒,普通节点位置随机产生。生成TCL文件,运行该TCL文件将结果输出到2.tr文件中。

  在gawk环境中,输入下列命令:

   gawk ‘($1==”On”)&&($7==”at”){print $0}’ 2.tr >3.tr

   gawk ‘BEGIN {FS=” “}; {print $10,$11,$12,$13,$14,$15,$16}’ 3.tr > 3.txt

  在3.txt文件中得到以下数据:

   ClusterHead 11,ClusterNode: 47   

ClusterHead 23,ClusterNode: 10 28 16 35

ClusterHead 9,ClusterNode: 33 26  

ClusterHead 25,ClusterNode: 49 2 19 46

ClusterHead 24,ClusterNode: 41 29 36 7 21

ClusterHead 37,ClusterNode: 8   

ClusterHead 50,ClusterNode:    

ClusterHead 15,ClusterNode: 6 3 48 

ClusterHead 39,ClusterNode: 45 22 34 31 5

ClusterHead 18,ClusterNode: 30   

ClusterHead 40,ClusterNode: 44   

ClusterHead 42,ClusterNode: 32 17 14 

ClusterHead 13,ClusterNode: 38 27 4 12 20

ClusterHead 43,ClusterNode: 1   

5. 生成的nam图

Leach协议_第4张图片

       图9  nam图

你可能感兴趣的:(MATLAB,板块5:网络通信)