首页 > 编程知识 正文

LEACH Algorithm

时间:2023-05-03 17:34:26 阅读:279362 作者:2769

层次路由协议仿真——LEACH算法
仿真软件——MATLAB

1、定位算法的实现
1.1 基本原理
LEACH定义了“轮”(round)的概念,一轮由初始化和稳定工作两个阶段组成。为了避免额外的处理开销,稳定态一般持续相对较长的时间。在初始化阶段,聚类首领是通过下面的机制产生的。传感器节点生成0,1之间的随机数,如果大于阈值T,则选该节点为聚类首领T的计算方法如下:
T = P ( 1 − P [ r m o d ( 1 p ) ] ) T=frac{P}{(1-P[r mod (frac{1}{p})])} T=(1−P[rmod(p1​)])P​
其中p为节点中成为聚类首领的百分数,r是当前的轮数。
当簇头选定之后,簇头节点主动向网络中节点广播自己成为簇头的消息。接收到此消息的节点,依据接收信号的强度,选择它所要加入的簇,并发消息通知相应的簇头。基于时分多址(Time Division Multiple Address,简称TDMA)的方式,簇头节点为其中的每个成员分配通信时隙,并以广播的形式通知所有的簇内节点。这样保证了簇内每个节点在指定的传输时隙进行数据传输,而在其他时间进入休眠状态,减少了能量消耗。在稳定工作阶段,节点持续采集监测数据,在自身传输时隙到来时把监测数据传给簇头节点,簇头节点对接收到数据进行融合处理之后,发送到Sink节点,这是一种减小通信业务量的合理工作模式。持续一段时间以后,整个网络进入下一轮工作周期,重新选择簇头节点

1.2 代码实现

clear;%清除內存变量xm=100;ym=100;sink.x=0.5*xm;%基站x轴sink.y=0.5*ym;%基站y轴n=100;%节点总数p=0.1;%簇头概率E0=0.02;%初始能量ETX=50*0.000000000001;%传输能量,每bitERX=50*0.000000000001;%接收能量,每bitEfs=10*0.000000000001;%耗散能量,每bitEDA=5*0.000000000001;%融合能耗,每bitcc=0.6;%融合率rmax=1000;%总轮数CM=32;%控制信息大小DM=4000;%数据信息大小figure(1);%显示图片for i=1:1:n S(i).xd=rand(1,1)*xm; S(i).yd=rand(1,1)*ym; S(i).G=0;%每一周期結束此变量为0 S(i).E=E0;%设置初始能量为E0 S(i).type='N';%节点类型为普通 plot(S(i).xd,S(i).yd,'o'); hold on;%保持所画图像endS(n+1).xd=sink.x;S(n+1).yd=sink.y;plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站节点flag_first_dead=0;for r=1:1:rmax r+1 if(mod(r,round(1/p))==0) for i=1:1:n S(i).G=0; end end hold off;%重新绘制 cluster=0;%初始节头数0 dead=0;%初始死亡节点数为0 figure(1); for i=1:1:n if(S(i).E<=0) plot(S(i).xd,S(i).yd,'red .'); dead=dead+1;%將能量<=0的节点绘制成紅色,并将死亡节点数增加1 if(dead==1) if(flag_first_dead==0) first_dead=r %第一个节点的死亡轮数 save ltest, first_dead; flag_first_dead=1; end end hold on; else S(i).type='N'; plot(S(i).xd,S(i).yd,'o');%绘制其他节点 hold on; end end plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站 Dead(r+1)=dead; %每轮死亡节点数 save ltest, Dead(r+1);%將此数据存入ltest文件 for i=1:1:n if(S(i).E>0) if(S(i).G<=0) temp_rand=rand; if(temp_rand<=(p/(1-p*mod(r,round(1/p))))) S(i).type='C'; S(i).G=round(1/p)-1; cluster=cluster+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; packet_To_BS(cluster)=1; end end end end CH_Num(r+1)=cluster; save ltest,CH_Num(r+1); for i=1:1:n if(S(i).type=='N'&&S(i).E>0) min_dis=sqrt((S(i).xd-(C(1).xd))^2+(S(i).yd-(C(1).yd))^2); min_dis_cluster=1; for c=2:1:cluster temp=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; end end packet_To_BS(min_dis_cluster)=packet_To_BS(min_dis_cluster)+1; Er1=ERX*CM*(cluster+1); Et1=ETX*(CM+DM)+Efs*(CM+DM)*min_dis*min_dis; S(i).E=S(i).E-Er1-Et1; end end for c=1:1:cluster packet_To_BS(c); CEr1=ERX*CM*(packet_To_BS(c)-1); CEr2=ERX*DM*(packet_To_BS(c)-1); CEt1=ETX*CM+Efs*CM*(sqrt(xm*ym))*(sqrt(xm*ym)); CEt2=(ETX+EDA)*DM*cc*packet_To_BS(c)+Efs*DM*cc*packet_To_BS(c)*C(c).distance*C(c).distance; S(C(c).id).E=S(C(c).id).E-CEr1-CEr2-CEt1-CEt2; end for i=1:1:n R(r+1,i)=S(i).E; end hold on;end

2、仿真结果和分析
2.1 仿真结果

2.2 结果分析
1)由于LEACH假定所有节点能够与汇聚节点直接通信,并且每个节点都具备支持不同MAC协议的计算能力,因此该协议不适合在大规模的无线传感器网络中应用。
2)协议没有说明簇头节点的数目怎么分布才能及于整个网络。因此,很可能出现被选的簇头节点集中在网络某一区域的现象,这样就会使得一些节点的周围没有任何簇头节点。
3)由于LEACH假定在最初的簇头选择回合中,所有的节点都携带相同的能量,并且每个成为簇头的节点都消耗大致相同的能量。因此,协议不适合节点能量不均衡的网络

2.3 结论
1)为了减少传送到汇聚节点的信息数量,簇首节点负责融合来自簇内不同源节点所产生的数据,并将融合后的数据发送到汇聚点。
2)LEACH采用基于TDMA/CDMA的MAC层机制来减少簇内和簇间的冲突。
3)由于数据采集是集中的和周期性的,因此该协议非常适合于要求连续监控的应用系统。
4)对于终端使用者来说,由于它并不需要立即得到所有的数据,因此协议不需要周期性的传输数据,这样可以达到限制传感器节点能量消耗的目的。
5)在给定的时间间隔后,协议重新选举簇首节点,以保证无线传感器网络获取统一的能量分布。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。