WSN中LEACH协议源码分析报告
WSN中LEACH和LEACH-C、MTE协议性能比较
Ab s t r a c t
F i r s t wor k i ng pr i n ci pl e of LE ACH pr o t oc ol i n wi r e l e s s s en s or n e t wor k s i s an a l y s e d Th en c om p ar i s on o f L EACH, L EACH-C an d M T E wa s m a de i n t h e s i mul a t i on s et t hr ou gh NS2. Si mu l a t i on r e s ul t s sh o w t h at , t h e n e t wor k l i f e t i me o f MTE i s l o ng er t h an L EACH an d LE ACH —C. L EACH ou t per f or ms L EACH — C. wh en t h e t o ca t i o ns o f SI NK n ode wi t hi n t h e s e n si ng r e gi on. Wh er e as , LE ACH—C i s su pe r i or t o LE ACH. Ke y wor d s: W SN. NS2, L EACH, L EACH—C, MTE
陈建 建 高 莹 ( 安徽工业大学电气信息学院, 安徽 马鞍山 2 4 3 0 0 2 )
摘 要
首 先 分 析 无 线传 感 器 网 络 中 L E A CH 协 议 工 作 原 理 , 然 后 通 过 NS 2将 L E A C H和 L E AC H— C、 MT E在 设 置 的 仿 真 环 境 中做 了仿 真 对 比 。 仿 真 结 果表 明 , MT E比 L E A CH 和 L E A CH — C 有 更 长 的 网络 生存 时 间 , 当S I N K 节 点位 置在 感知 区域 内时
wsn中leach算法改进程序
%Field Dimensions - x and y maximum (in meters)xm=300;ym=300;%x and y Coordinates of the Sinksink.x=0.5*xm;sink.y=0.5*ym;%Number of Nodes in the fieldn=900;%Optimal Election Probability of a node%to become cluster headp=0.1;%Energy Model (all values in Joules)%Initial EnergyEo=0.5;%Eelec=Etx=ErxETX=50*0.000000001;ERX=50*0.000000001;%Transmit Amplifier typesEfs=10*0.000000000001;Emp=0.0013*0.000000000001;%Data Aggregation EnergyEDA=5*0.000000001;%Values for Hetereogeneity%Percentage of nodes than are advancedm=0.1;%\alphaa=1;cc=10;CM=32;DM=4000;%maximum number of roundsrmax=100;%%%%%%%%%%%%%%%%%%%%%%%%% END OF PARAMETERS %%%%%%%%%%%%%%%%%%%%%%%%%Computation of dodo=sqrt(Efs/Emp);%Creation of the random Sensor Networkfigure(1);for i=1:1:nS(i).xd=rand(1,1)*xm;XR(i)=S(i).xd;S(i).yd=rand(1,1)*ym;YR(i)=S(i).yd;S(i).G=0;%initially there are no cluster heads only nodes S(i).type='N';temp_rnd0=i;%Random Election of Normal Nodesif (temp_rnd0>=m*n+1)S(i).E=Eo;S(i).ENERGY=0;% plot(S(i).xd,S(i).yd,'o');% hold on;end%Random Election of Advanced Nodesif (temp_rnd0<m*n+1)S(i).E=Eo*(1+a);S(i).ENERGY=1;% plot(S(i).xd,S(i).yd,'+');% hold on;endendS(n+1).xd=sink.x;S(n+1).yd=sink.y;%plot(S(n+1).xd,S(n+1).yd,'x');%First Iterationfigure(1);%counter for CHscountCHs=0;%counter for CHs per roundrcountCHs=0;cluster=1;countCHs;rcountCHs=rcountCHs+countCHs;flag_first_dead=0;for r=0:1:rmaxr+1%Operation for epochif(mod(r, round(1/p) )==0)for i=1:1:nS(i).G=0;%S(i).cl=0;endendhold off;EJ(r+1)=0;%Number of dead nodesdead=0;%Number of dead Advanced Nodesdead_a=0;%Number of dead Normal Nodesdead_n=0;%counter for bit transmitted to Bases Station and to Cluster Heads%packets_TO_BS=0;%packets_TO_CH=0;%counter for bit transmitted to Bases Station and to Cluster Heads%per roundPACKETS_TO_CH(r+1)=0;PACKETS_TO_BS(r+1)=0;figure(1);for i=1:1:n%checking if there is a dead nodeif (S(i).E<=0)% plot(S(i).xd,S(i).yd,'red .');dead=dead+1;if(S(i).ENERGY==1)dead_a=dead_a+1;endif(S(i).ENERGY==0)dead_n=dead_n+1;endhold on;elseEJ(r+1)=EJ(r+1)+S(i).E;S(i).type='N';% if (S(i).ENERGY==0)% plot(S(i).xd,S(i).yd,'o');% end% if (S(i).ENERGY==1)% plot(S(i).xd,S(i).yd,'+');% end% hold on;endend%plot(S(n+1).xd,S(n+1).yd,'x');%nl=n-dead;%p=do*sqrt(xm*ym/(2*pi*nl))/(2/3*xm*ym-(sink.x+sink.y)*sqrt(xm*ym)+sink.x^2+si nk.y^2)p=1/(cc+1);STATISTICS(r+1).DEAD=dead;DEAD(r+1)=dead;DEAD_N(r+1)=dead_n;DEAD_A(r+1)=dead_a;%When the first node diesif (dead==1)if(flag_first_dead==0)first_dead=rflag_first_dead=1;endendcountCHs=0;cluster=1;for i=1:1:nif(S(i).E>0)temp_rand=rand;if ( (S(i).G)<=0)%Election of Cluster Headsif(temp_rand<= (p/(1-p*mod(r,round(1/p)))))countCHs=countCHs+1;S(i).type='C';S(i).G=round(1/p)-1;C(cluster).xd=S(i).xd;C(cluster).yd=S(i).yd;%plot(S(i).xd,S(i).yd,'k*');distance=sqrt( (S(i).xd-(S(n+1).xd) )^2 + (S(i).yd-(S(n+1).yd) )^2 );C(cluster).distance=distance;C(cluster).id=i;X(cluster)=S(i).xd;Y(cluster)=S(i).yd;packets_TO_BS(cluster)=1;cluster=cluster+1;%Calculation of Energy dissipatedendendendendSTATISTICS(r+1).CLUSTERHEADS=cluster-1;CLUSTERHS(r+1)=cluster-1;%Election of Associated Cluster Head for Normal Nodesfor i=1:1:nif ( S(i).type=='N' && S(i).E>0 )if(cluster-1>=1)min_dis=sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 );min_dis_cluster=1;for c=1:1:cluster-1temp=sqrt( (S(i).xd-C(c).xd)^2 + (S(i).yd-C(c).yd)^2 );if ( temp<min_dis )min_dis=temp;min_dis_cluster=c;endendpackets_TO_BS(min_dis_cluster)=packets_TO_BS(min_dis_cluster)+1;%line([S(i).xd, C(min_dis_cluster).xd],[S(i).yd, C(min_dis_cluster).yd]);%Energy dissipated by associated Cluster Headmin_dis;Er1=ERX*CM*(cluster+1);if (min_dis>do)Et1=ETX*(CM+DM)+Emp*(CM+DM)* min_dis * min_dis * min_dis * min_dis;endif (min_dis<=do)Et1=ETX*(CM+DM)+Efs*(CM+DM)*min_dis * min_dis;endS(i).E=S(i).E-Er1-Et1;EJ(r+1)=EJ(r+1)-Er1-Et1;S(i).min_dis=min_dis;S(i).min_dis_cluster=min_dis_cluster;endendend%a=zeros(cluster-1,1)for c=1:1:cluster-1CEr1=ERX*(CM+DM)*(packets_TO_BS(c)-1);distemp=0;for pinkx=0:xm:xmfor pinky=0:ym:ymdispink=sqrt( (X(c)-pinkx)^2 + (Y(c)-pinky)^2 );if(dispink>distemp)distemp=dispink;endendenddistbroadcast(c)= distemp;if (distbroadcast(c)>do)CEt1=ETX*CM+Emp*CM*distbroadcast(c)*distbroadcast(c)*distbroadcast(c)*dist broadcast(c);endif (distbroadcast(c)<=do)CEt1=ETX*CM+Efs*CM*distbroadcast(c)*distbroadcast(c);endS(C(c).id).E=S(C(c).id).E-CEr1-CEt1;if (S(C(c).id).E<=0)% plot(S(i).xd,S(i).yd,'red .');dead=dead+1;if(S(i).ENERGY==1)dead_a=dead_a+1;endif(S(i).ENERGY==0)dead_n=dead_n+1;endhold on;elseEJ(r+1)=EJ(r+1)-CEr1-CEt1;endendSTATISTICS(r+1).DEAD=dead;DEAD(r+1)=dead;DEAD_N(r+1)=dead_n;DEAD_A(r+1)=dead_a;Et=0;Et=Et+S(C(c).id).E;% EJ(r+1)=EJ(r+1)-CEr1-CEt1;%PACKETS_TO_BS(r+1)=packets_TO_BS(c);hold on;%E=EJ(r+1)/nl;%b=zeros(,1)%for i=1:1:cluster-1% if(a(i)>E)% b(i)=a(i);% en%endCH=1;while(cluster-1>20)%contiue make cluster%select sec cluster headsE=Et/(cluster-1);for c=1:1:cluster-1if (S(C(c).id).E>E)C(c).type='D';D(CH).xd=X(c);D(CH).yd=Y(c);distance=sqrt( (X(c)-S(n+1).xd)^2 + (Y(c).yd-S(n+1).yd)^2 );D(CH).distance=distance;D(CH).id=C(c).id;X(CH)= C(cluster).xd;Y(CH)= C(cluster).yd;packets_TO_BS(CH)=1;CH=CH+1;endendSTATISTICS(r+1).CLUSTERHEADS=CH-1;CLUSTERHS(r+1)=CH-1;for c=1:1:cluster-1if ( C(c).type=='C' && S(C(c).id).E>0 )if(CH-1>=1)% min_dis=sqrt( (C(c).xd-S(n+1).xd)^2 + (C(c).yd-S(n+1).yd)^2 );min_dis_CH=1;for d=1:1:CH-1temp=sqrt( (D(d).xd-C(c).xd)^2 + (D(d).yd-C(c).yd)^2 );if ( temp<C(c).distance )min_dis=temp;min_dis_CH=d;endendpackets_TO_BS(min_dis_CH)=packets_TO_BS(min_dis_CH)+1;%line([S(i).xd, C(min_dis_cluster).xd],[S(i).yd, C(min_dis_cluster).yd]);%Energy dissipated by associated Cluster Headmin_dis;Er1=ERX*CM*(CH+1);if (min_dis>do)Et1=ETX*(CM+DM)+Emp*(CM+DM)* min_dis * min_dis * min_dis * min_dis;endif (min_dis<=do)Et1=ETX*(CM+DM)+Efs*(CM+DM)*min_dis * min_dis;endS(C(c).id).E=S(C(c).id).E-Er1-Et1;EJ(r+1)=EJ(r+1)-Er1-Et1;S(C(c).id).min_dis=min_dis;S(C(c).id).min_dis_CH=min_dis_CH;endendendfor d=1:1:CH-1CEr1=ERX*(CM+DM)*(packets_TO_BS(d)-1);distbroadcast(d)= D(d).distance;if (distbroadcast(d)>do)CEt1=ETX*CM+Emp*CM*distbroadcast(d)*distbroadcast(d)*distbroadcast(d)*dis tbroadcast(d);endif (distbroadcast(d)<=do)CEt1=ETX*CM+Efs*CM*distbroadcast(d)*distbroadcast(d);endif(packets_TO_BS(d)<=cc)l=1;elsel=ceil(packets_TO_BS(d)/cc);endif (D(d).distance>do)CEt2=(ETX+EDA)*DM*l+ Emp*DM*l* D(d).distance*D(d).distance*D(d).distance*D(d).distance ;endif (D(d).distance<=do)CEt2=(ETX+EDA)*DM*l+ Efs*DM*l* D(d).distance*D(d).distance ;endS(D(d).id).E=S(D(d).id).E-CEr1-CEt1-CEt2;EJ(r+1)=EJ(r+1)-CEr1-CEt1-CEt2;PACKETS_TO_BS(r+1)=packets_TO_BS(d);hold on;endendend%subplot(2,2,1); %r=0:1:rmax;%plot(r,DEAD(r+1));%box off;%title('图一:死亡节点数统计图'); %xlabel('工作轮数(/轮)');%ylabel('死亡节点数(/个)');%subplot(2,2,2);r=0:1:rmax;plot(r,PACKETS_TO_BS(r+1));box off;title('图二:基站接收数据包统计图'); xlabel('工作轮数(/轮)');ylabel('数据包个数(/个)');%subplot(2,2,3);%r=0:1:rmax;%plot(r,EJ(r+1));%box off;%title('图三:网络剩余能量统计图'); %xlabel('工作轮数(/轮)');%ylabel('网络剩余能量(/焦耳)');。
一种无线传感器网络路由协议范文LEACH的改进算法
一种无线传感器网络路由协议范文LEACH的改进算法组织多跳网络,其日的是协作地感知、采集和处理网络覆盖区域感知对象的信息,并发送给观察者,传感嚣、感知对象和观察者构成了传感器网络的3个要素.传感器节点由汇聚节点SN(inknode)和普通传感器节点组成.无线传感器网络节点一般以电池供电,但针对应用业务的不同需求,有时需要太阳能、震动能、风能、热能等额外能量提取技术.WSN的能耗主要分为通信能耗、感知能耗和计算能耗,其中通信能耗所占比重最大,所以均衡通信能耗能有效的延长整个网络的生存时间,在无线传感器网络中,网络的拓扑控制与优化重要性表现在:影响整个网络的生存时问;减小节点间通信干扰,提高网络通信效率和为路由协议提供基础,在无线传感器网络体系结构中,网络层的路由技术对无线传感器网络的性能好坏有着重要影响.随着国内外无线传感器网络的研究发展,许多路由协议被提了出来,从网络拓扑结构的角度可以大体把它们分为两类:平面路由结构和层次路由结构,层次路由算法是现有无线传感器网络路由算法的研究重点,下面将概述一下LEACH路由协议研究:LEACH是无线传感器网络中提出的第一个层次型路由协议,运用了数据压缩技术和分层动态技术,通过随机选取某些节点为簇头来均衡网络内部负载;文描述了一种基于LFACH的改进型非均匀分簇协议UCS(unequalcluteringize),协议的中心是:考虑候选簇头节点到基站的远近,构造出大小非均匀的簇,从而实现了网络中节点能耗的均衡;文中的LEACH-C是LEACH协议自身的提出者后来在LFACH协议上所做的改进算法;文提出的TEEN (threholdenitiveenergyefficienten-ornetworkprotocol)是阈值敏感能量高效传感器网络协议,它采用与LEACH类似的簇结构和运行方式,定义了软、硬两个阈值来确实是否发送数据;文提出的混合有效能量分布式分簇HEED(hybirdenergy-efficientditributedclutering)算法是在LEACH算法簇头分布不均匀这一问题基础之上做出的对LEACH协议的改进;在文中,高能效传感器采集信息协议PFGASIS(power-efficientgatheringinenorinformationytem)是使用贪婪算法GA (greeciyalgorithm)形成链式的簇结构;文中,LEACH-M协议中引入了遗传模拟退火算法.LEACH算法与一般平面多跳路南算法相比,可以将网络生命周期延长15%,但却存在簇受开销大、重复形成簇和簇规模分布不合理等不足,为此本文提出一种改进算法.1LEACH协议简介Ll算法概述LEACH协议是由MIT的Heinzelman等提出的,该算法是为无线传感器网络设计的一种低功耗自适应的分层路由协议,假定了一个均匀的、节点能量有限的密集传感器网络,各节点向接收点报告其数据.LEACH协议将基于TDMA的MAC协议与聚类协}义和一个简单的“路由”协议集成在一起,其基本是:通过循环的方式随机选择簇头节点,对簇头节点进行轮换,把整个网络的能量负载平均分配到各个节点上,从而平衡和降低能耗、延长网络的生存周期.LEACH协议提出“轮”的概念,算法的执行过程是周期性的,每轮循环分为簇的建立阶段和稳定的数据通信阶段,在簇的建立阶段,随机选择节点作为簇头节点,簇头节点确定后即向周围广播,其他节点根据接收到的广播信号的强弱来选择要加入的簇,并告知相应的簇头节点,从而网络被划分为若干个簇.在数据通信阶段,网络完成簇结构构建,普通节点将采集数据发送给簇头节点,由簇头节点对数据进行处理(如数据融合)操作,再转发给汇聚节点,为了避免额外的处理开销,数据通信阶段一般持续较长的时间.每一轮结束后,网络将重新进入下一轮,继续执行这两个阶段的过程.LEACH算法选举簇头的过程如下:节点产生一个0-1之间的随机数,如果这个数小于阈值T(n),则发布自己是簇头的公告消息.在每轮循环中,如果节点已经当选过簇头,则把T(n)设置为0,这样该节点就不再会再次当选为簇头,对于未当选过簇头的节点,则将以T(n)的概率当选;随着当选过簇头的节点数目增加,剩余节点当选簇头的阈值T(n)随之增大,节点产生小于T(n)的随机数的概率随之增大,所以节点当选簇头的概率增大,当只剩一个节点未当选时,T(n)=1,表示这个节点一定当选.T(n)如式(1)所示:其中:P簇头在所有节点中所占的百分比;r是选举轮数;rmod(l/P)代表这一轮循环中当选簇头的节点个数;G这一轮循环中未当选过簇头的节点集合.采用这种随机选举簇头的方法,需要得到节点总数与簇头数的最优比;因为基站是在远离仿真区域的位置,与距离较远的节点通信时,需要设置一些簇头节点提升通信的效率,但是也不能过多(在极端情况下,每一个节点都是簇头,和没有分簇是一样的,没有多跳和数据融合优势),在相对低的比值处有一个最优的数值;在一种典型的情况下,Heinzelman等认为最优值是5%,但是这要依赖于特定的设置并且要求预先确定.LEACH协议采用了随机选举簇头的方式来轮换簇头,避免了簇头过分消耗能量,采用数据融合则有效地减少了通信量,与一般的多跳路由协议和静态聚类算法相比,能够将网络生命延长15%.1.2算法不足1)由于LEACH协议是假定所有节点都能直接和基站进行通信,而且每个节点都具备支持不同MAC的能力,因此该协议不大适合在大规模部署的应用场景.2)LEACH协议没有说明簇头节点要怎么分布才更加均匀,有可能在实际应用中出现一个区域有很多的簇头节点,而有的很大的区域没有任何的簇头节点,这样会出现网络能耗不均衡.3)LFACH协议假定每个节点的能耗都差不多,这使得该协议不适用于节点能量不均衡负载的网络部署中.4)LEACH协议的簇头选举算法没有考虑剩余能量低的节点当选为簇头节点的情况,该节点很快会耗尽能量提早失效.不利于延长网络的生存时间,网络的鲁棒性也不好.5)簇头节点将采集到的数据通过数据融合后直接发送到基站,若传感器节点分布在很广的范围内,经过很多轮后,距离基站近的簇头节点与距离基站远的节点剩余能量相差很大;如果传感器节点的初始能量值一致,距离汇聚节点远的节点能量最先消耗完,从而导致整体网络生存时间缩短;假设簇头节点和汇聚节点之间只采用多跳路由方式转发数据,那么在网络节点部署区.域广、节点数日众多的情形下,距离基站近的区域的节点因为频繁参与数据的转发,能量消耗极快,该区域的节点反而很容易死掉,进而影响整个网络的生命周期.针对LEACH路由协议的不足,本文提出一种改进的算法,我们且称为NEWLEACH.2.1NEWLEACH算法的基本思想因为涉及到距离,先简单介绍下LEACH的物理模型:LEACH算法采用第一顺序无线电能量模型FORM(firtorderradiomodel),该模型由发送电路、放大电路和接收电路组成.假定信道是双向对称的,即节点A传送数据到节点B的能量消耗与B传送到A是相同的.在传输距离为d时,传感器节点发送和接收kbit消息所消耗的能量见式(2)和式(3).其中:E是发送电路和接收电路无线电通信消耗的功率值,信号传输距离为d.信号在无线信道传输中的能量消耗与距离dr成正比,在短距离无线传输,即dd0时,r=4.上述的两种能量衰减模型分别称为自由空间(freepace)衰减模型和多路信道衰减(multi-pathfading)模型.εam,,为自由空间衰减模型的衰减系数,εf为多路信道衰减模型的衰减系数.因此,根据发送节点与接收节点之间的距离,发送节点可以使用不同的能耗模型计算发送数据所需要的能量.Et某(k,d)表示发送节点所消耗的总能量,En某(k)表示接收节点所消耗的总能量,分别表示接收电路和传送电路中所消耗的功率值,并且是发送端发送消息经过放大器时所消耗的能量.本文的算法基本思想是:从上面的能量消耗模型可以看出,能量消耗其实也和距离有关,在设计优化的簇头选举方法时,应该根据距离来选择不同的能量衰减模型;簇头的最优选择应该是,在当前轮数剩余能量较高的,又或者是距离基站更近的节点,在数据的通信阶段,应该选择当前轮剩余节点剩余能量最高的节点进行数据融合,如果该节点恰好是簇头节点,在完成数据融合后,将数据发送给基站;如果是普通节点,在完成了数据融合后,将数据转发给簇头节点,簇头节点再发送给基站.2.2NEWLEACH算法2.2.1簇头选举假设仿真区域是在100m某100m的区域内进行的,基站的坐标是在(50,175),我们称为b,存仿真区域内有一个中心点,我们称为center,任一节点到b的距离为(d1,到centei‘的距离为d2,如图l所示.从图中我们可以看出d1》d2,因此在设计距离因子时,把节点到基站的距离看成多路信道衰减模型,把节点到中心点的距离看成自由空间衰减模型根.据不同的情况选用不同的模型,使得距离基站近的有更大几率当选为簇头.传统的LFACH协议不涉及节点的剩余能量问题,改进的NEWLEACH算法用节点的当前剩余能量和初始能量相比,这样做可以使剩余能量更多的节点有更大几率称为簇头,改进后的簇头选举如式(4)所示.式(4)是在式(1)的基础上做的一个改进:在最坏的情况下(‰…。
WSN中负载平衡的LEACH通信协议研究
0引言无线传感器网络集成了传感器、微机电系统和网络3大关键技术,它借助于内置的形式多样的传感器测量所在周边环境的热、红外、声纳和雷达来测量包括温度、湿度、速度、光强度、压力等我们感兴趣的物质现象[1-2]。
由于它成本低、体积小、能耗少的特点,成为远程监测领域越来越受重视的工具,广泛应用于军事、环境科学、医疗以及空间探索等生产生活的重要部门。
层次型路由协议是无线传感器网络中一种能量有效的路由协议,这类协议将所有的节点分为若干簇,每个簇选举一个首领(又称簇头),簇内节点采集信息发送给簇头,由簇头进行数据融合后将信息转发给Sink节点。
这样能够减少数据通信量,由于大部分节点在相当长的时间关闭通信模块,所以能够显著延长整个网络生存期。
LEACH[3]、PAGASIS[4]、TEEN[5]和DEEC[6]都属于这类协议。
本文通过定量分析节点能耗,建立了节点的能耗模型,分析出了造成LEACH网络中节点之间能耗不均的原因,在此基础上提出了改进方法。
本文首先介绍了研究背景;然后剖析了LEACH协议并找出了造成能耗不均的原因;提出了LB-LEACH协议;并对所提出协议进行了仿真实验及分析;最后进行总结并对未来工作进行展望。
1研究背景Low-energy Adaptive Clustering Hierarchy(LEACH)是层次型路由协议的代表,是一种自适应分簇拓扑算法。
它的研究基于以下前提:①所有节点同构且能量自持;②所有节点都能直接与Sink通信;③节点能够控制发送能量,并能够支持多种不同的MAC协议;④节点间的通信是对称的:A发信息给B 与B发信息给A需要消耗相同的能量。
LEACH的执行是周期性的,每轮循环分为簇的建立阶段和稳定的数据通信阶段。
在簇的建立阶段,相邻节点动态地成簇,用以下方式随机产生簇头(cluster head,CH):节点产生[0-1]的随机数,如果这个数小于阈值T(n),则广播自己是簇头的ADV消息,T(n)的计算公式如下={1,式中:P ——成为CH 的概率,r ——现在的轮数,G ——在过去的(r mod 1/P )轮中还没有做过CH 的节点集合。
一种结合LEACH和PEGASIS协议的WSN的路由协议研究
n t r o d a x e d t e n t r Slftme. ewo k la nd e tn h ewok’ iei
Ke r s Wi l sSn o N tok WS ;ls r ot g d p r o ofc n ;n rye cet ywo d : r e e sr e r ( N) cut ui ;i es nce i te e -f i es w er n s i i e g i n E AC 6 5 P:2 0 E C:1 0 6 1 M d i1 . 9 9 ii n 1 0 — 6 9 2 1 . 2 0 4 o :0 3 6 /.s . 0 4 1 9 . 0 2 0 .2 s
A b t a t: e k y t r l s e s r n t r e e r h i o t a a c o e ’ e e g o u to n m p o e s r c Th e o wiee s s n o e wo k r s a c s h w o b ln e n d s n r y c ns mp in a d i r v
e e g f c e y n r e o e tn h lf f t e n ie e wo k.Ba e o n r y e inc i o d r t xe d t e ie o h e tr n t r i s d n LEACH a d n PEGAS S, s fr t e I a o h
需远离监 控 区域 。有关 的文献 [ — ] 未 对此 进行 38均
息并对其进 行处 理 , 后将 信息传 送 到用户[3。 最 1] -
由于 WS N一般 采用 电池 供 电 . 更换 传感 器 节点不 且
切 实 际 . 致节 点 能量受 限 , 导 因此 设计 优化 网络 的整
无线传感器网络LEACH协议研究
无线传感器网络LEACH协议的研究摘要:无线传感器网络因其在军事、经济、民生等方面广阔的应用前景成为21世纪的前沿热点研究领域[1]。
在传感器节点能量有限的情况下,提高路由效率,延长网络寿命成为无线传感器网络需考虑的问题。
由于采取分簇,数据融合的思想,LEACH协议有着较高的路由效率,但在实际应用,尤其是大规模网络中,仍存在负载不均衡等问题。
本文主要分析了LEACH协议的基本思想及优缺点,随后针对大规模的网络环境对其分簇算法进行改进。
前人提出一种有效的方法计算最优簇首个数,本文推算出适合本文中网络环境的公式并加以应用。
本文用NS2进行仿真,仿真后的结果表明,改进后的分簇算法更为有效,延长了网络寿命,增大了网络传送数据量。
关键词:无线传感器网络;路由协议;LEACH;分簇思想Research on Routing Protocol of LEACH in WSNShen Y uanyiDept. of Information and Telecommunication,NUPTABSTRACT:Nowadays, wireless sensor network has become a hot spot of 21st century because of its wide application on military, economy and human life. On the condition that the energy of a sensor node is limited, how to improve the routing efficiency and expand the network’s lifespan has been an important issue to consider. LEACH maintains quite high routing efficiency for its idea of clustering and data gathering. But in practical, it still has problems such as load unbalance especially in large scale network. The article mainly analyses the basic idea of LEACH, the benefits and drawbacks of it and later introduce an improvement on clustering algorithm according to large scale network.Key words:WSN;routing protocol; LEACH; clustering1LEACH协议介绍与分析1.1 LEACH算法思想算法基本思想[2]是:以循环的方式随机选择簇头节点,将整个网络的能量负载平均分配到每个传感器节点中,从而达到降低网络能源消耗、提高网络整体生存时间的目的。
LEACH路由协议技术的分析及改进
计算机与现代化 2009年第9期J I S UANJ I Y U X I A NDA I HUA总第169期文章编号:100622475(2009)0920081203收稿日期:2008209210作者简介:单晓娜(19822),女,山东日照人,南昌大学信息工程学院硕士研究生,研究方向:计算机网络;李力(19582),男,江西上高人,副教授,研究方向:计算机网络应用与安全,传感器网络。
LE ACH 路由协议技术的分析及改进单晓娜,李 力(南昌大学信息工程学院,江西南昌330031)摘要:无线传感器网络作为计算、通信和传感器三项技术相结合的产物,是一种全新的信息获取和处理技术。
本文在简要介绍无线传感器网络的基础上,分析了LE ACH 分级路由协议存在的一些问题以及如何解决这些问题。
关键词:无线传感器网络;网络层;层次路由协议;LACHS 协议中图分类号:TP393 文献标识码:A do i:10.3969/j .issn .100622475.2009.09.023Ana lysis and I m prove m en t of L EACH Routi n g Protocol TechnologySHAN Xiao 2na,L IL i(School of I nf or mati on Engineering,Nanchang University,Nanchang 330031,China )Abstract:A s a result of combinati on of m icr osens or technol ogy,l ow power computing and wireless net w orking,wireless sens or net w ork is a novel technol ogy about acquiring and p r ocessing inf or mati on .This paper briefly intr oduces the architecture of wireless sens or net w ork,analyzs s o me p r oble m s of the LE ACH r outing p r ot ocol and how t o s olve these p r oble m s .Key words:wireless sens or net w ork;net w ork layer;grading r outing p r ot ocol;LACHS p r ot ocol0 引 言无线传感器网络是由一组传感器节点以自组织的方式构成的无线网络,其目的是协作的感知、采集和处理网络覆盖区域中感知对象的信息,并将信息发送给观察者。
无线传感器网络路由协议LEACH研究报告与改
无线传感器网络路由协议LEACH的研究与改进摘要:无线传感器网络由许多具有低功率无线收发装置的传感器节点成,能够有效地感知、采集和处理网络覆盖区域中的相关信息,并发送给远处的基站进一步处理。
由于传感器节点能量有限,路由协议必须尽可能地减少能量消耗,延长网络生命周期。
在LEACH算法基础上,提出一种改进的路由算法,改进后的算法采用相对固定的成簇方式,每隔一轮重新构建簇。
利用图论中的prim算法,选择每轮中Ped最大的簇头作为根节点,在簇头节点之间构造树形路由,簇头之间以多跳方式将收集到的数据发送到根节点,然后通过根节点将整个网络收集到的数据发送到基站。
仿真结果表明,与LEACH算法相比,改进算法降低了能耗,有效延长了网络生存周期。
关键词:无线传感器网络。
LEACH算法。
分簇。
生命周期。
能量消耗Abstract: W ireless sensor networks consisting of a large number of small sensorswith low-power transceiver canbe an effective tool for apperceiving, collecting and computing data in a variety of environment.The collected datamustbe transmitted to the base station for further processing. Based on LEACH algorithm, this paper presents a novel clustering algorithm in which clusterare relatively fixed and the nodes re-organize themselves into new clusters every other round. It utilizes the Prim algorithm inthe graph theory to form tree routing among cluster-head nodes, and selects the cluster-head with the largestPedas the rootnode. The cluster heads send data to the root node in a multi-hop manner and the root node then sends the gathered data bythe whole network to the base station. Simulation results show that compared with LEACH, the improved algorithm can reduce the energy consumption and prolong the lifetime of the network.Key Words:wireless sensor network, LEACH algorithm, clustering, lifetime, energyconsume1、前言无线传感器网络被认为是在一定空间范围内密集分布的由大量体积小、廉价、电池供电的通信器件构成的自组织系统.由于无线传感器网络大都需要在无人看管、不更换电池或者几乎不可能更换电池的条件下长时间的工作,如何提高能量的有效利用率并延长网络寿命便成了一个重要问题.网络数据传输离不开路由协议,路由协议对网络的整体性能有重要影响,因此,作为无线传感器网络核心技术之一的路由协议一直是研究的热点。
leach协议
leach协议协议名称:Leach协议一、背景介绍Leach协议(Low Energy Adaptive Clustering Hierarchy)是一种用于无线传感器网络(WSN)中的能量高效的分簇协议。
该协议通过将传感器节点划分为簇(cluster)并选择簇头(cluster head)来降低能量消耗,延长网络寿命。
本协议旨在实现高效的数据传输和能量平衡。
二、协议目标1. 降低无线传感器网络中的能量消耗,延长网络寿命。
2. 提供高效的数据传输和通信能力。
3. 实现传感器节点之间的能量平衡,避免能量耗尽导致节点失效。
三、协议内容1. 初始化阶段a. 每个传感器节点随机选择一个时间片作为其通信轮次。
b. 节点根据其能量水平决定是否成为簇头节点,能量水平高的节点更有可能成为簇头节点。
c. 节点广播自己的簇头选择信息,并收集其他节点的选择信息。
d. 节点根据收到的选择信息决定是否加入某个簇。
2. 簇形成阶段a. 节点选择一个簇头节点作为其父节点,并发送加入请求。
b. 簇头节点接收加入请求,并根据一定的策略选择是否接受该节点加入。
c. 被接受的节点成为该簇的成员,否则继续选择其他簇头节点发送加入请求。
d. 簇头节点维护成员列表,并将该列表发送给所有成员节点。
3. 数据传输阶段a. 簇头节点收集成员节点的数据,并进行聚合处理。
b. 簇头节点将聚合后的数据发送给基站或其他目标节点。
c. 成员节点将自己采集到的数据发送给簇头节点。
4. 能量平衡机制a. 簇头节点周期性地向成员节点广播能量消耗情况。
b. 成员节点根据收到的能量消耗情况,决定是否重新选择簇头节点。
c. 节点在一定时间内轮流担任簇头节点的角色,以实现能量的均衡分配。
四、协议优势1. 能量高效:通过分簇和选择簇头节点的方式,降低了能量消耗,延长了网络寿命。
2. 高效的数据传输:簇头节点对成员节点的数据进行聚合处理,减少了冗余数据的传输。
3. 能量平衡:通过周期性地重新选择簇头节点,实现了能量的均衡分配,避免了能量耗尽导致节点失效。
WSN中LEACH协议源码分析研究
WSN中LEACH协议源码分析分析(一)首先对wireless.tcl进行分析,先对默认地脚本选项进行初始化:set opt(chan)Channel/WirelessChannelset opt(prop) Propagation/TwoRayGroundset opt(netif)Phy/WirelessPhyset opt(mac) Mac/802_11set opt(ifq) Queue/DropTail/PriQueueset opt(ll) LLset opt(ant) Antenna/OmniAntennaset opt(x) 0 ;# X dimension of the topographyset opt(y) 0 ;# Y dimension of the topographyset opt(cp) ""set opt(sc) "../mobility/scene/scen-670x670-50-600-20-2" ;# scenario fileset opt(ifqlen)50;# max packet in ifset opt(nn) 51 ;# number of nodesset opt(seed) 0.0set opt(stop) 10.0 ;# simulation timeset opt(tr) out.tr ;# trace fileset opt(rp) dsdv ;# routing protocol scriptset opt(lm) "on" ;# log movement在这个wireless.tcl中设置了一些全局变量:## Initialize Global Variables#set ns_ [new Simulator]set chan [new $opt(chan)]set prop [new $opt(prop)]set topo [new Topography]set tracefd [open $opt(tr) w]$topo load_flatgrid $opt(x) $opt(y)$prop topography $topo这些初始化将在后面地使用中用到,该文件最重要地是创建leach节点:创建方法如下:} elseif { [string compare $opt(rp) "leach"] == 0} {for {set i 0} {$i < $opt(nn) } {incr i} {leach-create-mobile-node $i}如果路由协议是leach协议,则在Uamps.tcl中调用leach-create-mobile-node方法创建leach节点.将在第二小节讲如何创建leach节点.for {set i 0} {$i < $opt(nn) } {incr i} {$ns_ at $opt(stop).000000001 "$node_($i) reset"; //完成后,重置节点地应用}$ns_ at $opt(stop).00000001 "puts \"NS EXITING...\" ; $ns_ halt"if { $opt(sc) == "" } {puts "*** NOTE: no scenario file specified."set opt(sc) "none"} else {puts "Loading scenario file..."source $opt(sc)puts "Load complete..."}ns在什么时候结束simulation,并告诉ns加载sc场景文件.最后$ns_ run则ns就开始运行了.分析(二)上节对wireless.tcl进行了简要地分析,接下来对Uamps.tcl脚本进行分析.set opt(Efriss_amp) [expr [expr 1.1 * $opt(RXThresh) * 16 * $PI * $PI] / \[expr $opt(bw) * $opt(Gt) * $opt(Gr) * $l * $l]]# Etwo_ray_amp = RXThresh / (Rb Gt Gr ht^2 hr^2)set opt(Etwo_ray_amp) [expr 1.1 * $opt(RXThresh) / \[expr $opt(bw) * $opt(Gt) * $opt(Gr) * \$opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]]set opt(EXcvr) 50e-9 ;# Energy for radio circuitryset opt(e_bf) 5e-9 ;# Beamforming energy (J/bit)set opt(Esense) 0 ;# Sensing energy (J/bit)set opt(thresh_energy) 0.00 ;# Threshold for power adaptationset opt(Pidle) 0 ;# Idle power (W)set opt(Psleep) 0 ;# Sleep power (W)set initialized 0set rng_ [new RNG]#用于产生随机数首先往opt数组里面添加一些变量,并对这些变量进行初化.opt(Psleep) ,opt(Pidle),opt(thresh_energy)在ns-leach.tcl中使用到,这个是计算单位时间空闲所消耗地能量和休眠所消耗地能量.这个脚本主要是创建leach节点:if {$initialized == 0} {#remove old tracesens_initset initialized 1}# Remove old trace files.catch "eval exec rm [glob -nocomplain $opt(dirname)/TDMAschedule.*.txt]"catch "exec rm $opt(dirname)/$opt(filename).energy"catch "exec rm $opt(dirname)/$opt(filename).data"catch "exec rm $opt(dirname)/$opt(filename).alive"catch "exec rm $opt(dirname)/startup.energy"catch "exec rm $opt(dirname)/init.energy"如果没有初始化过,则将以前地跟踪文件删除,接着回到创建leach地函数中,创建节点:if {$id != $opt(nn_)} {puts -nonewline "$id "#importantset node_($id) [new MobileNode/ResourceAwareNode]} else {puts "($opt(nn_) == BS)"set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE]}如果不是簇头节点则将$opt(nn_)-1个节点设置为一般节点,将$opt(nn_)设置为BS节点.newMobileNode/ResourceAwareNode函数是在ns-ranode.tcl中.分析完这个我们接下来分析newMobileNode/ResourceAwareNode这个函数.set node $node_($id)if {$id != $opt(nn_)} {# Set initial node energy.if {$opt(eq_energy) == 1} {$node set-energy $opt(init_energy) $opt(thresh_energy)} else {由于eq-energy在leach-test中给定,将eq-energy=1;则每个节点都会对能量进行初始化,设置节点地初始能量和门槛能量(个人理解,死亡能量).set high_e_nodes [list 97 19 12 87 8 22 83 55 34 72]if {[lsearch $high_e_nodes $id] == -1} {set E 2} else {set E 200}$node set-energy $E $opt(thresh_energy)set initf [open "$opt(dirname)/init.energy" a]puts $initf "$id\t$E"close $initf将不属于list中地能量初始化能量设置为2,将属于list中地能量设置为200.并将初始化能量写到init.energy中,将节点id和节点初始能量写进去.else {# Base station has an infinite amount of energy.$node set-energy 50000 $opt(thresh_energy)}节点为簇头节点,则将节点地初始化能量设置为50000,能量无限.到此为止,创建节点完成并将每个节点地能量初始化完成.下一节将分析ns-ranode.tcl脚本.区分普通节点和簇头节点地不同.接下来是配置节点信道和跟踪文件:$ns_ at 0.0 "$node_($id) start-app" ns在0地时候启动应用,应用在ns-ranode.tcl中分析.分析(三)对前面两个脚本进行分析后,已经创建好节点和设置好节点地初始能量,将opt(nn_)-1个节点设置为普通节点,而将opt(nn_)设置为bs.现在对ns-ranode.tcl进行分析.好了我们现在就开始分析这个脚本.Class MobileNode/ResourceAwareNode -superclass Node/MobileNodeMobileNode/ResourceAwareNode instproc init argsset bs_node [lindex $args 0]eval $self next [lreplace $args 0 0]args由参数传递进来,若节点为簇头节点则bs_node=1,调用父类初始化函数.set ResourceManager_ [new ResourceManager]$ResourceManager_ Register [new Resource/NeighborResource]set energy [new Resource/Energy]$ResourceManager_ Register $energyResourceManager在ns-resouce-manager.tcl中定义地.Resource/NeighborResource在ns-neighbor-resource中对能量进行管理.# Create a new agent and attach it to the nodeif {$bs_node == 1} {set agent [new Agent/BSAgent]} else {set agent [new Agent/RCAgent]}set rca_agent_ $agent普通节点地应用为RCAgent,BS地应用为BSAGgent. 并将应用attch到node上.下面两段看不明白,但是这两段不影响看程序.set haslist [find_haslist [$self id]]if {$bs_node == 1} {set rca [new $opt(bsapp)]} else {set rca [new $opt(rcapp) $opt(mtype) $wantslist $haslist]}$ns_ attach-agent $self $agent$rca attach-agent $agentset rca_app_ $rca将bs节点地应用设置为bsapp,普通节点地应用设置为rcaapp,并将节点地服务设置为不同地服务.bsapp在ns-app.tcl中.$opt(rcapp)定义在leach.tcl中,opt(mtype)定义在leach.tcl 中.set opt(rcapp) "Application/LEACH" ;# Application typeset opt(ra_adv) [TxTime [expr $opt(hdr_size) + 4]];# Total time (s) for CH ADVs;# Assume max 4(nn*%) CHsset opt(ra_adv_total) [expr $opt(ra_adv)*($opt(num_clusters)*4 + 1)];# RA Time (s) for nodes' join reqsset opt(ra_join) [expr 0.01 * $opt(nn_)];# Buffer time for join req xmittalset opt(ra_delay) [TxTime [expr $opt(hdr_size) + 4]];# Maximum time required to transmit;# a schedule (n nodes in 1 cluster)set opt(xmit_sch) [expr 0.005 + [TxTime [expr $opt(nn_)*4+$opt(hdr_size)]]];# Overhead time for cluster set-upset opt(start_xmit) [expr $opt(ra_adv_total) + $opt(ra_join) + $opt(xmit_sch)]一般节点地应用为Application/LEACH,最终sink节点地应用为Application/BSApp.通过前3次地分析得出,在分析1中定义变量,在分析2中创建leach节点,在分析3中将节点地应用绑定在节点上.下面将分析leach地主要协议ns-leach.tcl脚本.分析(四)完成前面3个脚本地分析,最后进行ns-leach.tcl脚本地分析.首先我们看下这个脚本要使用地有哪些功能.Application/LEACH instproc init args {} 对leach进行初始化,即构造函数.下面是leach地一些方法Application/LEACH instproc start {} {}Application/LEACH instproc getRandomNumber {llim ulim} {} 得到随机数Application/LEACH instproc node {} {}Application/LEACH instproc nodeID {} {}Application/LEACH instproc mac {} {}Application/LEACH instproc getX {} {}Application/LEACH instproc getY {} {}Application/LEACH instproc getER {} {}Application/LEACH instproc GoToSleep {} {} 节点进行休眠Application/LEACH instproc WakeUp {} {}节点醒来Application/LEACH instproc setCode code {}{}Application/LEACH instproc checkAlive {} {} 节点是否存活Application/LEACH instproc isClusterHead? {} {} 判断是否是簇头节点Application/LEACH instproc hasbeenClusterHead? {} {} 判断是否成为过簇头节点Application/LEACH instproc hasnotbeenClusterHead {} {}hasbeench=0不是簇头节点Application/LEACH instproc setClusterHead {} {} 设置为簇头节点Application/LEACH instproc unsetClusterHead {} {} 设置为非簇头节点Application/LEACH instproc decideClusterHead {} {} 决定簇头节点,非常重要Application/LEACH instproc advertiseClusterHead {} {} 广播簇头节点Application/LEACH instproc findBestCluster {} {} 找到最佳簇Application/LEACH instproc informClusterHead {} {} 通知簇头节点Application/LEACH instproc createSchedule {} {} 创建TDMA调度接收功能:Application/LEACH instproc recv {args} {}Application/LEACH instproc recvADV_CH {msg} {}Application/LEACH instproc recvJOIN_REQ {nodeID} {}Application/LEACH instproc recvADV_SCH {order} {}Application/LEACH instproc recvDA TA {msg} {}发送功能:Application/LEACH instproc sendData {} {}Application/LEACH instproc send {mac_dst link_dst type msgdata_size dist code} {} Application/LEACH instproc send_now {mac_dst link_dst type msg data_size dist code} {} Application/LEACH instproc SendDataToBS {} {}Application/LEACH instproc SendMyDataToBS {} {}分析(五)由leach 分析三可知,一般节点地应用为Application/LEACH.则现在就是如何选择簇头节点和设置门槛值.我们接下来分析leach 分析4中红色地方法.在leach 分析3中创建一个Application/LEACH对象则就会自动调用start方法.Application/LEACH instproc start {} {[$self mac] set node_num_ [$self nodeID]$self decideClusterHead$self checkAlive}在这个方法中会调用decideClusterHead和checkAlive方法.Application/LEACH instproc GoToSleep {} {global opt ns_$self instvar begin_idle_ begin_sleep_[[$self node] set netif_(0)] set sleep_ 1# If node has been awake, remove idle energy (e.g., the amount of energy# dissipated while the node is in the idle state). Otherwise, the node# has been asleep and must remove sleep energy (e.g., the amount of# energy dissipated while the node is in the sleep state).if {$begin_idle_ > $begin_sleep_} {set idle_energy [expr $opt(Pidle) * [expr [$ns_ now] - $begin_idle_]][$self getER] remove $idle_energy} else {set sleep_energy [expr $opt(Psleep) * [expr [$ns_ now] - $begin_sleep_]][$self getER] remove $sleep_energy}set begin_sleep_ [$ns_ now]set begin_idle_ 0}分析(六)在start中调用下面这个方法.Application/LEACH instproc decideClusterHead {} {global ns_ chan opt node_$self instvar alive_ TDMAschedule_$self instvar begin_idle_ begin_sleep_# Check the alive status of the node. If the node has run out of# energy, it no longer functions in the network.set ISalive [[[$self node] set netif_(0)] set alive_]if {$alive_ == 1} {if {$ISalive == 0} {puts "Node [$self nodeID] is DEAD!!!!"$chan removeif [[$self node] set netif_(0)]set alive_ 0set opt(nn_) [expr $opt(nn_) - 1]set ISalive [[[$self node] set netif_(0)] set alive_] #从网络接口netif中查看当前节点状况如果节点存活,但是节点能量耗光,则$chan removeif [[$self node] set netif_(0)]将节点信道中移出,并将节点设置为死亡.节点地总数目减少一个.if {$opt(eq_energy) == 1} {## Pi(t) = k / (N - k mod(r,N/k))# where k is the expected number of clusters per round# N is the total number of sensor nodes in the network# and r is the number of rounds that have already passed.#set nn $opt(nn_)if {[expr $nn - $opt(num_clusters) * $round_] < 1} {set thresh 1} else {set thresh [expr double($opt(num_clusters)) / \[expr $nn - $opt(num_clusters) * $round_]]# Whenever round_ is 0, all nodes are eligible to be cluster-head.if {$round_ == 0} {$self hasnotbeenClusterHead}}# If node has been cluster-head in this group of rounds, it will not# act as a cluster-head for this round.if {[$self hasbeenClusterHead?]} {set thresh 0}} else {## Pi(t) = Ei(t) / Etotal(t) * k# where k is the expected number of clusters per round,# Ei(t) is the node's current energy, and Etotal(t) is the total# energy from all nodes in the network.#set Etotal 0# Note! In a real network, would need a routing protocol to get this# information. Alternatively, each node could estimate Etotal(t) from# the energy of nodes in its cluster.for {set id 0} {$id < [expr $opt(nn)-1]} {incr id} {set app [$node_($id) set rca_app_]set E [[$app getER] query]set Etotal [expr $Etotal + $E]}set E [[$self getER] query]set thresh [expr double([expr $E * $opt(num_clusters)]) / $Etotal]}上面是对thresh地计算,当(N - k mod(r,N/k))<1,则将thresh设置为1,否则节点thresh=k / (N - k mod(r,N/k)),每个节点在一个1/p中都要成为簇头节点一次.p=簇头节点占所有节点地比例,在r=0地时候每个节点都有机会吃呢更为簇头节点.如果节点成为过簇头节点则thresh=0,则这个节点在1/p轮后才可以成为簇头节点.if {[$self getRandomNumber 0 1] < $thresh} {puts "$nodeID: *******************************************"puts "$nodeID: Is a cluster head at time [$ns_ now]"$self setClusterHeadset random_access [$self getRandomNumber 0 $opt(ra_adv)] #opt(ra_adv) in leach.tcl$ns_ at [expr $now_ + $random_access] "$self advertiseClusterHead"} else {puts "$nodeID: *******************************************"$self unsetClusterHead}如果thresh>getRandomNumber,则节点成为簇头节点.然后调用advertiseClusterHead方法.set next_change_time_ [expr $now_ + $opt(ch_change)]$ns_ at $next_change_time_ "$self decideClusterHead"$ns_ at [expr $now_ + $opt(ra_adv_total)] "$self findBestCluster"当节点成为簇头节点,则节点调用advertiseClusterHead方法.set chID [$self nodeID]set currentCH_ $chIDpp "Cluster Head $currentCH_ broadcasting ADV at time [$ns_ now]"set mac_dst $MAC_BROADCASTset link_dst $LINK_BROADCAST set msg [list $currentCH_] set datasize [expr $BYTES_ID * [llength $msg]] # Send beacons opt(max_dist) meters so all nodes can hear. $self send $mac_dst $link_dst $ADV_CH $msg $datasize $opt(max_dist) $code_将该节点设置为簇头节点,设置当前节点所处地簇号.然后发送数据,广播该节点为簇头信息到全局网络.在$ns_ at [expr $now_ + $opt(ra_adv_total)] "$self findBestCluster"调用findBestCluster方法.分析(七)当簇头发出了一个ADV类型地包时,其他地节点会接收这个包,并会将发送这个包地簇头地节点号按顺序先后记录在clusterChoices_中,还会计算每个簇头到接收节点地距离并记录在clusterDist_中.这样可以方便每个节点选簇地时候进行比较.具体地实现在ns-leach.tcl 中地recvADV_CH函数中.findBestClusterif [$self isClusterHead?] {# If node is CH, determine code and create a TDMA schedule.set dist_ $opt(max_dist)set currentCH_ $nodeIDset myADVnum_ [[$self mac] set myADVnum_]# There are opt(spreading) - 1 codes available b/c need 1 code# for communication with the base station.set numCodesAvail [expr 2 * $opt(spreading) - 1]set ClusterCode [expr int(fmod($myADVnum_, $numCodesAvail)) + 1]$ns_ at [expr $now_ + $opt(ra_adv_total) + $opt(ra_join)] \"$self createSchedule"}如果这个节点是簇头节点,设置为当前地簇头,set numCodesAvail [expr 2 * $opt(spreading) - 1]set ClusterCode [expr int(fmod($myADVnum_, $numCodesAvail)) + 1]这两句没看懂在一个随机时间后调用createSchedule,节点根据自己收到地clusterChoices,选择最近地簇头作为簇头节点.选择好簇头节点就informClusterHead.发送完数据就进入休眠状态. Application/LEACH instproc createSchedule {} {global ns_ opt ADV_SCH MAC_BROADCAST BYTES_ID$self instvar clusterNodes_ TDMAschedule_$self instvar dist_ code_ now_ beginningE_set numNodes [llength $clusterNodes_]set chID [$self nodeID]if {$numNodes == 0} {set xmitOrder ""puts "Warning! There are no nodes in this cluster ($chID)!"$self SendMyDataToBS} else {# Set the TDMA schedule and send it to all nodes in the cluster.set xmitOrder $clusterNodes_set msg [list $xmitOrder]set spreading_factor $opt(spreading)set datasize [expr $spreading_factor * $BYTES_ID * [llength $xmitOrder]]pp "$chID sending TDMA schedule: $xmitOrder at time [$ns_ now]"pp "Packet size is $datasize."set mac_dst $MAC_BROADCASTset link_dst $chID$self send $mac_dst $link_dst $ADV_SCH $msg $datasize $dist_ $code_}set TDMAschedule_ $xmitOrderset outf [open $opt(dirname)/TDMAschedule.$now_.txt a]puts $outf "$chID\t$TDMAschedule_"close $outfset outf [open $opt(dirname)/startup.energy a]puts $outf "[$ns_ now]\t$chID\t[expr $beginningE_ - [[$self getER] query]] "close $outf}在recvADV_SCH给每个节点一个时间间隙发送数据set frame_time_ [expr [expr 5 + [llength [join $order]]] * $opt(ss_slot_time)]set xmitTime_ [expr $opt(ss_slot_time) * $ind]set end_frm_time_ [expr $frame_time_ - $xmitTime_]set xmitat [expr [$ns_ now] + $xmitTime_]pp "$nodeID scheduled to transmit at $xmitat. It is now [$ns_ now]."if {[expr $xmitat + $end_frm_time_] < \[expr $next_change_time_ - 10 * $opt(ss_slot_time)]} {$ns_ at $xmitat "$self sendData"具体实现方法看不太懂.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.RQxPv。
WSN路由协议范文
WSN路由协议范文无线传感器网络(Wireless Sensor Network,WSN)是由大量的无线传感器节点组成的分布式传感器网络。
这些节点可以自主地感知环境,并将所测得的数据传输给基站或其他相邻节点。
WSN具有广泛的应用领域,包括环境监测、农业、医疗健康等。
在WSN中,路由协议起着关键的作用,它决定了节点之间如何进行数据传输和通信。
本文将介绍几种常见的WSN路由协议。
1. LEACH(Low-Energy Adaptive Clustering Hierarchy)LEACH协议是一种经典的基于集群的无线传感器网络路由协议。
它将节点根据能量水平划分为簇,每个簇由一个簇首节点负责管理。
LEACH协议采用轮流工作的方式,每一轮选举出新的簇首节点,并进行数据传输和聚合。
这种设计可以有效降低节点的能量消耗,延长网络的生命周期。
2. AODV(Ad hoc On-Demand Distance Vector)AODV协议是一种源路由协议,被广泛应用于无线传感器网络中。
在AODV网络中,节点通过维护路由表来确定数据的传输路径。
当一个节点需要发送数据时,它会通过广播RREQ消息来寻找是否存在合适的路径,如果有,网络中的其他节点会回复RREP消息,形成有效的数据传输路径。
AODV协议具有实时性和适应性好的特点。
3. DSR(Dynamic Source Routing)DSR协议也是一种源路由协议,与AODV类似,但其路由发现机制有所不同。
在DSR网络中,每个节点维护一张路由缓存表,记录了到达其他节点的路由信息。
当节点需要发送数据时,它会通过查询缓存表来确定最佳的数据传输路径。
如果找不到合适的路由信息,节点会通过路径发现机制来获得新的路由信息。
DSR协议具有快速路由建立和路由维护的优势。
4. TPBF(Topology Control with Power-aware Backup Forwarding)TPBF是一种基于拓扑控制的路由协议,主要用于解决无线传感器网络中的链路异常和节点部分失效问题。
WSN中负载平衡的LEACH通信协议研究
环 境 的热 、 外 、 纳 和 雷 达 来 测 量 包 括 温 度 、 度 、 度 、 红 声 湿 速 光 强 度 、 力 等 我 们 感 兴 趣 的物 质 现 象 “ 于 它 成 本 低 、 积 压 。 。由 体
小、 能耗 少 的 特 点 , 为 远 程 监 测 领 域 越 来 越 受 重 视 的 工 具 , 成 广 泛 应 用 于 军 事 、 境 科 学 、 疗 以 及 空 间 探 索 等 生 产 生 活 的 环 医
t ed s d a tg f n aa c dl a . Bya ay i gt ee e g — o s mi go n d s ncu t r r ACH, t ee e g - o s mi gmo e h ia v n a e u b ln e d o o l zn n r c n u n f o e l se s o n h y i f LE h n r c n u n d l y
关 键 词 : 线 传 感 器 网络 ; 负 载 平 衡 ; 聚 类 ; 内 核 节 点 ; 边 界 节 点 ; 簇 首 无
中 图法分类号 : P 9 T 33
文献标 识码 : A
文章编 号 :0072 2 0) 84 0—4 10 —04(0 7 1—4 30
S u y o a — aa e t d fl d b lnc dLEA CH r t c lf rwiee ss n o ew o k o p o o o o r ls e s rn t r Z NG azo g LU h-e YU egc eg HA Hu-h n , I Z ii, j P n -hn
维普资讯
第2卷 8
Vo. 8 12
第 1 期 8
NO 1 . 8
无线传感网络实验报告
-------无线传感网络实验报告学院:信息工程学院专业:网络工程学号:201216213姓名:张新龙LEACH协议LEACH协议简介分簇算法LEACH 协议是Wendi B. Heinzelman , AnanthaP. Chandrakasan , Hari Balakrishnan (MIT ,电子与计算机系) 2000 年提出的分层的传感器网络协议, 它采用分层的网络结构. LEACH,协议是通过基于簇的操作使WSN减少功耗,LEACH,协议的目的是在网络中动态地选择传感器节点作为簇头并形成簇。
在LEACH 算法中, 节点自组织成不同的簇, 每个簇只有一个簇首.各节点独立地按照一定概率决定自己是否做簇首,周期性的进行簇首选举和网络重组过程, 避免了簇首节点能耗过多, 影响网络寿命. LEACH 算法建立在所有节点都是平等且无线电信号在各个方向上能耗相同的假设上。
LEACH协议有时候也会动态地改变簇的活跃动态,如果采用高功率的方式使网络中的所有传感器节点与汇聚节点进行通信。
LEACH协议原理LEACH 协议分为两个阶段操作, 即簇准备阶段(set - up phase)和就绪阶段(ready phase). 为了使能耗最小化, 就绪阶段持续的时间比簇准备阶段长簇准备阶段和就绪阶段所持续的时间总和称为一轮(round). [ 7-8]在簇准备阶段, 随机选择一个传感器节点作为簇首节点(cluster head node), 随机性确保簇首与Sink 节点之间数据传输的高能耗成本均匀地分摊到所有传感器节点. 簇首节点选定后, 该簇首节点对网络中所有节点进行广播, 广播数据包含有该节点成为簇首节点的信息. 一旦传感器节点收到广播数据包, 根据接收到的各个簇首节点广播信号强度, 选择信号强度最大的簇首节点加入, 向其发送成为其成员的数据包.以便节省能量.簇头建立阶段:初始阶段,每个节点从0和1中随机产生一个数,如果这个数小于阀值T(n),该节点就成为当前轮的簇头。
leach协议
leach协议协议名称:Leach协议1. 引言Leach协议是一种用于无线传感器网络(WSN)中能量有效的分簇路由协议。
本协议旨在通过将无线传感器节点分为集群(cluster)并选择一个临时的簇首(cluster head)来减少能量消耗,延长整个网络的生命周期。
本协议的目标是提高网络的能量效率、减少能量消耗不均衡以及降低传输延迟。
2. 定义2.1 无线传感器网络(WSN):由大量分布在特定区域内的无线传感器节点组成的网络,用于收集、处理和传输环境数据。
2.2 集群(Cluster):由一组相邻的传感器节点组成的子网络,其中一个节点被选为簇首。
2.3 簇首(Cluster Head):每个集群中被选为临时簇首的节点,负责收集集群内节点的数据并将其传输到基站。
2.4 基站(Base Station):无线传感器网络中的中心节点,负责接收和处理从簇首传输的数据。
3. 协议流程3.1 集群形成阶段3.1.1 初始化:每个传感器节点根据预先设定的概率p选择是否成为簇首。
概率p可以根据网络规模和能量消耗平衡要求进行调整。
3.1.2 簇首选择:传感器节点根据其剩余能量大小选择成为簇首。
能量越高的节点被选为簇首的概率越大。
3.1.3 集群形成:每个非簇首节点选择距离最近的簇首节点进行关联,形成集群。
3.2 数据传输阶段3.2.1 数据采集:每个传感器节点根据预设周期采集环境数据,并将数据发送给其所属的簇首。
3.2.2 聚合与压缩:簇首节点收集来自其所属节点的数据,并进行聚合与压缩,减少数据量。
3.2.3 数据传输:簇首节点将聚合后的数据传输给基站,可以采用多跳传输或直接传输的方式。
3.3 能量平衡机制3.3.1 簇首轮流:为了避免某些簇首节点能量过早耗尽,每个簇首节点在每一轮中轮流充当簇首的角色。
3.3.2 簇首重新选择:当簇首能量低于一定阈值时,重新选择簇首节点,以平衡能量消耗。
3.3.3 节点睡眠:非簇首节点在完成数据传输后,可以进入睡眠状态以节省能量。
无线网络协议原理 实验报告
a)编写簇头选举代码;
b)编写普通节点加入簇代码;
c)编写能量消耗代码;
d)和PEGASIS协议实验结果对比并分析原因。
e)尝试对节点初始能量不均匀情况改进簇头选举算法。
成 绩 评 定 表
类 别
评 分 标 准
分值
得分
合 计
上机表现
积极出勤、遵守纪律
主动完成实验设计任务
30分
程序代码
比较规范、基本正确
rmax = 20
量和最大轮数的设定
利用rand()函数创建随机的传感器网络,并设定汇聚节点位置
根据节点能量是否大于零来判断节点是否死亡并在图中画出节点的位置,死
亡的节点用红点表示,没有死亡的普通节点用“。”表示并用plot()函数画出
这些节点的曲线图
根据LEACH协议中簇头节点的选取要求选出簇头,根据簇头节点的坐标用
功能达到实验要求
30分
实验报告
及时递交、填写规范
内容完整、体现收获
40分
说明: 评阅教师:
日期:年月日
实 验 内 容
一、实验目的
1编写WSN网络节点生成代码
2编写簇头选举代码
3编写普通节点加入簇代码
4编写路由能量消耗代码
5尝试对节点初始能量不均匀情况改进簇头选举算法(可选)
6画出分簇效果图
7和PEGASIS协议能量消耗性能对比并分析原因
end
if(distance<=do)
S(i).E=S(i).E- ( (ETX+EDA)*(4000) + Efs*4000*( distance * distance ));
end
end
end
基于LEACH的无线传感器网络路由算法的分析与改进
基于LEACH的无线传感器网络路由算法的分析与改进基于LEACH的无线传感器网络路由算法的分析与改进一、引言随着无线传感器网络(Wireless Sensor Network, WSN)的发展,人们对于无线传感器网络路由算法的研究也日益增多。
在无线传感器网络中,路由算法对于网络的性能和能耗具有重要影响。
LEACH(Low Energy Adaptive Clustering Hierarchy)作为一种经典的无线传感器网络路由协议,具有较低的能耗和较好的性能。
本文将对LEACH算法进行分析,并提出一种改进方案。
二、LEACH算法的原理与优缺点分析1. LEACH算法原理LEACH算法是一种分簇式的路由算法,其基本思想是将网络中的节点划分为多个簇。
每个簇内有一个簇头节点负责管理簇内的通信,并将数据传输到基站。
LEACH算法主要包括两个阶段:簇头选择阶段和数据传输阶段。
在簇头选择阶段,每个节点根据阈值(摄取阈值)决定是否成为簇头节点。
节点通过计算能量消耗的阈值,来控制簇头节点的选择,以降低能耗。
簇头节点选定后,其他节点将成为其成员节点。
在数据传输阶段,节点将数据传输到簇头节点,簇头节点再将数据传输到基站。
为了减少能量消耗,簇头节点通常采取限制传输功率和路由选择的策略。
2. LEACH算法的优点与缺点LEACH算法具有以下优点:- 能量均衡性:通过轮流选取簇头节点和采用时分多路复用的方式,使得网络中的节点能量使用均匀,延长网络寿命;- 低延迟:数据通过簇头节点进行传输,减少了节点间的通信距离,缩短了数据传输的时间;- 无需全局信息:LEACH算法只需要节点之间的局部信息即可进行簇头节点的选择,无需全局信息的维护和通信。
然而,LEACH算法也存在以下缺点:- 随机性:簇头节点的选择过程采用随机算法,容易导致不同轮次簇头节点的能量不平衡;- 无线信号干扰:由于节点之间通信的无线信号干扰,导致网络性能下降。
leach协议
leach协议协议名称:Leach协议1. 背景和目的Leach协议(Low Energy Adaptive Clustering Hierarchy)是一种用于无线传感器网络(Wireless Sensor Networks,WSN)中的能量有效的分簇协议。
其主要目的是通过将传感器节点组织成簇集的方式,延长整个网络的寿命,并提高数据传输的效率。
2. 协议原理Leach协议采用分簇的方式将传感器节点组织成多个簇集,每个簇集由一个簇首节点(Cluster Head)负责管理。
协议的主要原理如下:- 簇首选择:每个节点根据其能量水平以及与周围节点的距离来决定是否成为簇首节点。
节点通过随机方式选择一个数值作为阈值,如果其能量超过该阈值,则成为簇首节点。
- 簇集形成:每个节点根据与簇首节点的距离来决定加入哪个簇集。
节点将自己的信息发送给所选择的簇首节点,并成为该簇集的成员。
- 簇首轮流工作:为了均衡能量消耗,簇首节点在每个轮次中轮流工作。
簇首节点负责接收从簇集成员节点传输的数据,并将其传输到基站(Base Station)。
- 节点选择:每个节点在每个轮次中决定是否成为簇首节点。
节点通过随机方式选择一个数值作为阈值,如果其能量超过该阈值,则成为簇首节点。
3. 协议流程Leach协议的流程如下:- 初始化:每个节点初始化自己的能量水平,并随机选择一个数值作为阈值。
- 簇首选择:每个节点根据能量水平和阈值决定是否成为簇首节点。
如果是簇首节点,节点将发送簇首通告消息给其他节点。
- 簇集形成:每个节点根据与簇首节点的距离来决定加入哪个簇集。
节点将发送加入簇集请求给选择的簇首节点,并成为该簇集的成员。
- 数据传输:簇首节点负责接收从簇集成员节点传输的数据,并将其传输到基站。
- 轮次切换:每个节点在每个轮次中决定是否成为簇首节点。
如果是簇首节点,节点将发送簇首通告消息给其他节点。
4. 协议特点Leach协议具有以下特点:- 能量有效:通过分簇的方式,避免了所有节点直接与基站通信,减少了能量消耗。
基于leach的wsn路由协议分析与改进
1绪论1 绪论1.1课题背景近年来,随着微电子技术、计算机技术和无线通信技术的进步及发展,低功耗多功能的无线传感器节点器件得到快速的发展。
无线传感器节点虽然体积小,却集成了信息采集、数据处理、无线通信等多种功能[1]。
利用众多的传感器节点协同工作,就能组成一个功能强大的传感器网络,无线传感器网络综合了传感器技术、嵌入式计算技术、分布式信息处理技术和无线通信网络技术,能够协作地实时监测、感知和采集各种环境或监测对象信息并进行处理,传送到需要的用户[2]。
无线传感器网络将逻辑上的信息世界与客观上的物理世界融合在一起,改变了人类与自然界的交互方式。
美国商业周刊和MIT技术评论分别将无线传感器网络列为21世纪最有影响的21项技术和改变世界的10大技术之一。
与传统中心处理相比,无线传感器网络具有鲁棒性高、准确性高、灵活性高及智能化强等优点,可以被应用于国防军事、国家安全、环境监测、交通管理、医疗卫生、制造业、反恐抗灾等领域。
传感器网络作为一个全新的研究领域,在理论基础和工程技术两个层面向科技工作者提出了大量的挑战性研究课题[3]。
出于造价考虑,传感器节点必然受到成本限制,因此其能量、CPU计算速度、内存及通信带宽等资源必然受到极大约束,尤其因为传感器网络一般部署在环境复杂的地区,电池不能经常更换,要求电池能被使用若干年,因此,能量就成了一项极为重要的资源。
一旦节点能量耗尽将导致整个网络的瘫痪,节省能耗延长网络生命期成为无线传感器网络的关键[4]。
1.2课题研究目的和意义网络路由协议的主要任务是建立源节点与目的节点之间的对于指定代价函数的最优数据传输路径,并保证发送分组通过该路径实现正确的传输。
对于传统的无线局域网和Ad Hoc网络,其首要目标是提供高质量和高资源效率的服务,并保证各终端的公平性。
这些网络有足够的能力去计算源宿之间最小延时的路径,进行拥塞控制并保证网络负载平衡和公平性。
对于传感器网络,由于传感器节点数量通常较大,为了避免由于节点地址带来的大量的负荷,不可能构造一个全网的地址方案[5]。
Leach代码分析
目录一、Leach协议与NS的关系 (2)二、算法设计思想 (3)三、簇头建立算法流程图 (5)四、难点解决 (6)五、算法运行结果分析 (9)参考文献 (9)一、Leach协议与NS的关系为了实现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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
WSN中LEACH协议源码分析分析(一)首先对wireless.tcl进行分析,先对默认的脚本选项进行初始化:set opt(chan)Channel/\VirelessChannelset opt(prop) Propagatioii/TwoRayGroundset opt(netif)PhyAVirelessPhyset opt(mac) Mac/802_l 1set opt(ifq) Qucuc/DropTail/PriQueueset opt(ll) LLset opt(ant) Antenna/OmniAntennaset opt(x) 0 。
# X dimension of the topographyset opt(y) 0。
# Y dimension of the topographyset opt(cp),H,set opt(sc) N../mobility/scene/scen-670x670-50-600-20-2u。
# scenario file set opt(ifqlen)50o # max packet in ifset opt(nn) 51。
# number of nodesset opt(secd) 0.0set opt(stop) 10.0 o # simulation timeset opt(tr) out.tr。
# trace fileset opt(rp) dsdv 。
# routing protocol scriptset opt(lm) M on H。
# log movement在这个wireless.tcl中设置了一些全局变呈::##Initialize Global Variables#set ns_ [new Simulator]set chan [new $opt(chan)]set prop [new $opt(prop)]set topo [newTopography]set tracefd [open Sopt(tr) w]Stopo Ioad_flatgrid $opt(x) $opt(y)Sprop topography Stopo这些初始化将在后而的使用中用到,该文件最重要的是创建leach 17点:创建方法如下:} elseif { [string compare Sopt(rp) M leach,,]==0} {for {set i 0} {$i < $opt(nn) } {incr i} {leach-create-mobile-node $i}如果路由协议是leach协议,则在Uamps.tcl中调用leach-create-mobile-node方法创建leach节点。
将在第二小节讲如何创建leach节点。
for {set i 0} {$i < $opt(nn) } {incr i} {$ns_ at $opt(stop).000000001 M Snode_($i) reset”。
〃完成后,重宜右点的应用}$ns_ at Sopt(stop).00000001 M puts VNS EXITING..'”。
$ns_ halt” if { $opt(sc) ==} {puts H *** NOTE: no scenario file specified/1set opt(sc) u none°)else {puts ”Loading scenario file../* source Sopt(sc)puts ”Load complete...,r }ns 在什么时候结束simulation,并告诉ns 加载sc 场景文件。
最后$ns_ run 则ns 就开始运 行了。
分析(-)上节对wireless.tcl 进行了简要的分析,接下来对Uanips.tcl 脚本进行分析。
setopKEfriss^amp) [expr [expr 1.1 * $opt(RXThrcsh) * 16 * $PI * $PI] /\[expr $opt(bw) * Sopt(Gt) * $opt(Gr) * $1 * $1]]# Etwo_ray_amp = RXThresh /(Rb Gt Gr ht A 2 hr A 2) set opt(Etwo_ray_amp) [expr 1.1 ♦ $opt(RXThresh)/\[expr $opt(bw) * $opt(Gt) * $opt(Gr) ♦ \$opt(ht) * $opt(ht) * $opt(ht) * $opt(ht)]] 50e-9 o #Energy for radio circuitry5e-9 o # Beamforming energy (J/bit) 0o # Sensing energy (J/bit)o # Threshold for power adaptation o # Idle power (W) a # Sleep power (W)set initialized 0set rng_ [new RNG]#用于产生随机数首先往opt 数组里而添加一些变量,并对这些变量进行初化。
opt(Psleep) , opt(Pidle),opt(thresh_energy)^t ns-lcach.tcl 中使用到,这个是讣算单位时间空闲所消耗的能呈:和休眠所 消耗的能量。
这个脚本主要是创建leach 节点:if {Sinitialized = O} {#remove old trace sensjnitset initialized 1 )# Remove old trace files.catch H eval exec rm [glob -nocomplain Sopt(dirname)/TDMAschedule.*.txt]M catch H exec rm $opt(dirname)/$opt(filename).energy H catch "exec rm $opt(dirnaine)/$opt(fiIename).data° catch "exec rm $opt(dirnanie)/$opt(filename).alive H catch ”exec rm $opt(dirname)/startup.energy H catch "exec rm $opt(dirnaine)/init.energy°set opt(EXcvr) set opt(e_bf) set opt(Esense)set opt(thresh_energy) 0.00 set opt(Pidle) 0 set opt(Psleep)如果没有初始化过,则将以前的跟踪文件删除,接着回到创建leach的函数中,创建节点:if {Sid != $opt(nn_)} {puts -nonewline H$id ”importantset node_($id) [new MobileNodc/ResourceAwareNode]} else {puts "($opt(nn_) = BS)Hset nodc_($id) [new MobileNodc/ResourceAwareNode SBS_NODE]}如果不是簇头节点则将$opt(nn_)・l个肖点设置为一般盯点,将$opt(nn」设宜为BS节点。
newMobileNodc/RcsourceAwarcNode函数是在ns-ranode.tcl中。
分析完这个我们接下来分析ncwMobileNode/ResourceAwareNode 这个函数。
set node $nodc_($id)if {$id != $opt(nn_)} {# Set initial node energy.if {$opt(eq_energy) == 1} {Snode set-energy $opt(init_energy) $opt(thresh_energy) } else {由于eq-energy在leach-test中给定,将eq-encrgy=l:则每个节点都会对能量进行初始化, 设置节点的初始能量和门槛能量(个人理解,死亡能量)。
set high.e.nodes (list 97 19 12 87 8 22 83 55 34 72]if {[lsearch $high_e_nodcs Sid] == -1} {set E2} else {set E 200}Snode set-energy $E Sopt(thresh_energy)set initf [open M$opt(dirname)/init.energy H a]puts Sinitf H$id\t$E Mclose Sinitf将不属于list中的能量初始化能量设巻为2,将属于list中的能量设置为200.并将初始化能量写到init.energy中,将节点id和节点初始能量写进去。
else {# Base station has an infinite amount of energy.$node set-energy 50000 $opt(thresh_energy)}节点为簇头节点,则将节点的初始化能量设宜为50000,能量无限。
到此为止,创建肖点完成并将每个节点的能量初始化完成。
下一节将分析ns-ranode.tcl脚札区分普通节点和簇头节点的不同。
接下来是配置右点信道和跟踪文件:$ns_ at 0.0 ”Snodc_($id) start-app Nns 在 0 的时候启动应用,应用在 ns-ranode.tcl 中分析。
分析(三)对前而两个脚本进行分析后,已经创建好节点和设置好节点的初始能崑将opt(nnj-l 个节点设置为普通i'j 点,而将opt(nn_)设置为bs 。
现在对ns-ranode.tcl 进行分析。
好了我们 现在就开始分析这个脚本。
Class MobileNodc/ResourceAwareNode -superclass Node/MobileNode MobileNode/ResourccAwareNode instproc init argsset bs_nodc [lindex $args 0]eval $self next [Ireplace Sargs 0 0]args 由参数传递进来,若节点为簇头节点则bs_nodc=l, i 周用父类初始化函数* set ResourceManager_ [new ResourceManager]$RcsourceManager_ Register |new Resource/NeighborResource] set energy [new Resource/Energy] $ResourceManager_ Register SenergyResourceManager 在 ns-resouce-manager.tcl 中立 义的© Resource/NeighborResource 在 ns-neighbor-resource 中对能量进行管理。