LEACH Algorithm
层次路由协议仿真——LEACH算法
仿真软件——MATLAB
1、定位算法的实现
1.1 基本原理
LEACH定义了“轮”(round)的概念,一轮由初始化和稳定工作两个阶段组成。为了避免额外的处理开销,稳定态一般持续相对较长的时间。在初始化阶段,聚类首领是通过下面的机制产生的。传感器节点生成0,1之间的随机数,如果大于阈值T,则选该节点为聚类首领T的计算方法如下:
其中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;%传输能量,每bit
ERX=50*0.000000000001;%接收能量,每bit
Efs=10*0.000000000001;%耗散能量,每bit
EDA=5*0.000000000001;%融合能耗,每bit
cc=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;%保持所画图像
end
S(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)在给定的时间间隔后,协议重新选举簇首节点,以保证无线传感器网络获取统一的能量分布。
版权声明
本文仅代表作者观点,不代表博信信息网立场。