【转】Leach协议学习(3)——Leach协议分析 收藏
转自:http://hi.baidu.com/jerry_916/blog/item/20f9a5cef942d534f9dc6131.html
$ ./test
结果文档在mit/uAMPS/sims文件夹下,分别为:wireless.alive wireless.energy wireless.data
wireless.alive第一行是运行时间,第二行就节点ID,第三行是如果是1,表示该节点还存活,如果是0,则表示节点死亡。wireless.energy和wireless.data也是同样的结构,对于leach产生的数据,可分为很多方面,如节点能量消耗,节点存活数量,速率,节点之间发送与接收数据等。
对于leach.alive,可分析节点存活数,gwak –v outfile=live –f getNodelive.awk leach.alive,其中getNodelive.awk需要自己编写;
getNodelive.awk文件如下:
BEGIN{
step=10; #间隔时间
time=0;
i=0;
j=0;
}
{if($3==0){ i++; }
j++;
if(j==20){
j=0;
printf"%d %d/n",time,20-i>>outfile;
time+=step;
i=0;
}
}
对于leach.energy,可分析节点的能量消耗,如
gawk ‘{if($2==18){ if($3>2) $3=2; print $1,$3>>18.data;} if($2==65){if($3>2) $3=2; print $1,$3>>65.data}}’ leach.energy (节点18和节点65)
对于leach.tr,可以分析的相当多,如分析节点间发送和接受数据关系
gawk -v src=8 -v dst=29 -v outfile1=node8 -v outfile2=node29 -f getNodeRecv1.awk leach-out.tr
getNodeRecv1.awk 文件如下:
# getNodeRecv1.awk
BEGIN {largest_seq=0;
packet_send++;
}
{
if($1=="s")
{
if($6>largest_seq)largest_seq=$6;
}
if($1=="s"&&$3==("_" src "_")&&$4=="AGT")
{
packet_send++;
send_time[$6]=$2;
}
if($1=="r"&&$3==("_" dst "_")&&$4=="MAC")
{
packet_rcvd++;
rcvd_time[$6]=$2;
}
}
END{
for(i=0;i<largest_seq;i++)
{if(rcvd_time[i]!=0)
{printf"%f %d/n",rcvd_time[i],i>>outfile2;}
if(send_time[i]!=0)
{printf"%f %d/n",send_time[i],i>>outfile1;}
}
}
getRatio1.awk文件如下:
# 速率
# 初始化设定
BEGIN {
sendLine = 0;
recvLine = 0;
fowardLine = 0;
}
# 应用层收到包
$0 ~/^s.* AGT/ {
sendLine ++ ;
}
# 应用层发送包
$0 ~/^r.* AGT/ {
recvLine ++ ;
}
# 路由层转发包
$0 ~/^f.* RTR/ {
fowardLine ++ ;
}
# 最后输出结果
END {
printf "cbr s:%d r:%d, r/s Ratio:%.4f, f:%d /n", sendLine, recvLine, (recvLine/sendLine),fowardLine>>outfile;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qq361301276/archive/2010/03/02/5337311.aspx