LEACH Algorithm

层次路由协议仿真——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=(1P[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;%传输能量,每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

2、仿真结果和分析
2.1 仿真结果
LEACH Algorithm_第1张图片

LEACH Algorithm_第2张图片

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

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

你可能感兴趣的:(MATLAB)