【无线传感网】LEACH路由算法

目录

1、LEACH路由算法简介

2、LEACH路由算法的基本思想

3、LEACH路由算法的数学模型

3.1 成阶段

3.2 簇的数据传输阶段

4、LEACH路由算法的优缺点

 4.1 LEACH 协议优点

4.2 LEACH 协议缺点

5、LEACH路由算法matlab代码解析


源代码下载:https://download.youkuaiyun.com/download/xiaoyingxixi1989/86911140?spm=1003.2166.3001.6637.8

1、LEACH路由算法简介

        LEACH协议,全称是“低功耗自适应集簇分层型协议” (Low Energy Adaptive Clustering Hierarchy),是一种无线传感器网络路由协议。基于LEACH协议的算法,称为LEACH算法

2、LEACH路由算法的基本思想

         LEACH路由协议与以往的路由协议的不同之处在于其改变了以往簇头是固定的概念,以循环的方式随机选择簇头节点,将整个网络的能量负载平均分配到每个传感器节点中,从而达到降低网络能源消耗、提高网络整体生存时间的目的。仿真表明,与一般的平面多跳路由协议和静态分层算法相比,LEACH分簇协议可以将网络生命周期延长15%。

3、LEACH路由算法的数学模型

        在实际操作时使用了“轮”(Rounds)的概念,它的执行过程是按照一定周期性的。每一轮可以分为成簇阶段和数据传输阶段

3.1 成阶段

      每一个无线传感器网络节点随机生成[0,1]的随机数,通过公式(1)的阈值判定公式产生一个阈值,将随机值和阈值进行比较,如果这个随机值小于阈值 T(n) ,则成为簇头节点。T(n)按公式(2.1)计算:

        其中,r为目前选举轮数,p为簇头节点所占百分数,G 为最近1/p轮没有成为簇头的节点集合。从公式(2.1)可以知道,其中随着轮数的增加,T(n)的值也逐渐增大,此刻的阈值越大未担任过簇头的节点在下一轮中成为簇头的概率越大。

        当选簇头广播簇头消息,非簇头节点根据接收信号的强度,选择强度最大的加入该簇。簇头节点采用时分多址(TDMA)方式安排时间间隙。

3.2 簇的数据传输阶段

    进入数据传输阶段后,非簇头节点根据时间间隙向其簇头发送数据,然后进入睡眠状态,等待下一个时间间隙。簇头节点将接收到的数据进行融合,然后发送到汇聚节点。持续一定的时间后,进行新一轮的分簇阶段。成簇流程图如下

4、LEACH路由算法的优缺点

 4.1 LEACH 协议优点

        (1)采用随机选举簇头,使网络中节点能够交替成为簇头,避免一直充当簇头节点而使能量快速消耗;

        (2)在数据传输阶段采用了数据融合,减少了不必要的能量消耗。

4.2 LEACH 协议缺点

        (1)由于簇头选择比较随机,部分能量较低的节点可能成为簇头节点,这样簇头节点由于能量很低,可能在数据传输过程中能量耗尽,这样可能造成接收数据的不完整性;

        (2) 簇头节点直接与汇聚节点进行通信通信,距离汇聚节点较远的节点消耗的能量将大大增加,导致这部分节点能耗较大,使远离汇聚节点的节点能量过早耗尽,造成网络监测的盲区。

5、LEACH路由算法matlab代码解析

%function EE=Leach()
function [DEAD]=Leach()
%Field Dimensions - x and y maximum (in meters)
xm=200;                                   %定义X与Y区域
ym=200;

%x and y Coordinates of the Sink
sink.x=0.5*xm;                            %sink节点位置
sink.y=1.75*ym;

%Number of Nodes in the field
n=100;                                     %节点总数

%Optimal Election Probability of a node to become cluster head
p=0.1;                                    %簇头比例

%Initial Energy 
Eo=0.5;                                   %初始能量
%Eelec=Etx=Erx
ETX=50*0.000000001;                       %节点发送数据能耗
ERX=50*0.000000001;                       %节点接收数据能耗
%Transmit Amplifier types
Efs=10*0.000000000001;
Emp=0.0013*0.000000000001;
%Data Aggregation Energy
EDA=5*0.000000001;                         %聚集数据包能耗

 
%maximum number of rounds
rmax=2000;                                 %最大轮数

 

%Computation of do
do=sqrt(Efs/Emp);                          %计算do

%Creation of the random Sensor Network
figure(1);
for i=1:1:n
    S(i).xd=rand(1,1)*xm;                  %随机节点的X轴坐标    
    XR(i)=S(i).xd;
    S(i).yd=rand(1,1)*ym;                  %随机节点Y轴位置
    YR(i)=S(i).yd;
    S(i).E=Eo;                             %初始化节点能量均为1
    S(i).G=0;
    %initially there are no cluster heads only nodes
    S(i).type='N';                         %初始化节点,全部为普通节点
    plot(S(i).xd,S(i).yd,'o');
    hold on;
end

S(n+1).xd=sink.x;                          %初始化sink节点位置
S(n+1).yd=sink.y;
plot(S(n+1).xd,S(n+1).yd,'x');
    
        
%First Iteration
figure(1);

%counter for CHs
countCHs=0;
%counter for CHs per round
rcountCHs=0;
%cluster=0;

countCHs;
rcountCHs=rcountCHs+countCHs;
flag_first_dead=0;

for r=0:1:rmax
    r

  %Operation for epoch

  if(mod(r, round(1/p) )==0)
    for i=1:1:n
        S(i).G=0;
        S(i).cl=0;
    end
  end

  hold off;

  %Number of dead nodes
  dead=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 round
  PACKETS_TO_CH(r+1)=0;
  PACKETS_TO_BS(r+1)=0;

  figure(1);
  
 

  for i=1:1:n
    %checking if there is a dead node
    if (S(i).E<=0)                              %辨别死亡节点
        plot(S(i).xd,S(i).yd,'red .');
        dead=dead+1;
        hold on;    
    end
    if (S(i).E>0)
        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');


  STATISTICS(r+1).DEAD=dead;
  DEAD(r+1)=dead;
 
  %When the first node dies
  if (dead==1)
    if(flag_first_dead==0)
        first_dead=r
        flag_first_dead=1;
    end
  end

  countCHs=0;
  cluster=1;
  for i=1:1:n
   if(S(i).E>0)
   temp_rand=rand;     
     if ( (S(i).G)<=0)

      %Election of Cluster Heads
       if(temp_rand<= (p/(1-p*mod(r,round(1/p)))))
            countCHs=countCHs+1;
            packets_TO_BS=packets_TO_BS+1;
            PACKETS_TO_BS(r+1)=packets_TO_BS;
            
            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;
            cluster=cluster+1;
            
            %Calculation of Energy dissipated
            distance;
            if (distance>do)
                S(i).E=S(i).E- ( (ETX+EDA)*(4000) + Emp*4000*( distance*distance*distance*distance )); 
            end
            if (distance<=do)
                S(i).E=S(i).E- ( (ETX+EDA)*(4000)  + Efs*4000*( distance * distance )); 
            end
       end     
    
     end
   end 
 end

STATISTICS(r+1).CLUSTERHEADS=cluster-1;
CLUSTERHS(r+1)=cluster-1;

%Election of Associated Cluster Head for Normal Nodes
for i=1:1:n
   if ( 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-1
           temp=min(min_dis,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
       
       %Energy dissipated by associated Cluster Head
            min_dis;
            if (min_dis>do)
                S(i).E=S(i).E- ( ETX*(4000) + Emp*4000*( min_dis * min_dis * min_dis * min_dis)); 
            end
            if (min_dis<=do)
                S(i).E=S(i).E- ( ETX*(4000) + Efs*4000*( min_dis * min_dis)); 
            end
        %Energy dissipated
        if(min_dis>0)
          S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 ); 
         PACKETS_TO_CH(r+1)=n-dead-cluster+1; 
        end

       S(i).min_dis=min_dis;
       S(i).min_dis_cluster=min_dis_cluster;
           
   end
 end
end
hold on;

countCHs;
rcountCHs=rcountCHs+countCHs;



%Code for Voronoi Cells Unfortynately if there is a small number of cells, Matlab's voronoi procedure has some problems

[vx,vy]=voronoi(X,Y);
plot(X,Y,'r*',vx,vy,'b-');
 hold on;
 voronoi(X,Y);
 axis([0 xm 0 ym]);
E=0;
for j=1:1:n
   
   E=E+S(i).E;
end
EE(r+1)=E*0.01;
end
 
%figure(2);
%hold off;
%plot(EE,'+');
%legend('leach',1);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%   STATISTICS    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                                                                                     %
%  DEAD  : a rmax x 1 array of number of dead nodes/round 
%  DEAD_A : a rmax x 1 array of number of dead Advanced nodes/round
%  DEAD_N : a rmax x 1 array of number of dead Normal nodes/round
%  CLUSTERHS : a rmax x 1 array of number of Cluster Heads/round
%  PACKETS_TO_BS : a rmax x 1 array of number packets send to Base Station/round
%  PACKETS_TO_CH : a rmax x 1 array of number of packets send to ClusterHeads/round
%  first_dead: the round where the first node died                   
%                                                                                     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

荣耀路由XD21是一款设计简洁、功能全面的家庭无线路由器,旨在提供高速稳定的网络连接和便捷的设备管理体验。以下是对荣耀路由XD21的一些基本特点和操作指导。 ### 使用前准备: 1. **电源适配器**:确保您的电源适配器已经连接到路由器,并插好电源插座。 2. **网线**:准备一条直通网线用于连接电脑或其他设备到路由器的LAN口。 3. **手机或电脑**:您需要一台电脑或支持Wi-Fi的移动设备用于配置路由器和接入网络。 ### 配置路由器: #### 使用PC端配置: 1. **登录路由器管理界面**:将电脑通过网线连接到路由器的LAN口上。打开浏览器输入路由器默认IP地址(通常为192.168.3.1),按回车键进入登录页面。 2. **输入用户名和密码**:首次访问一般需要输入预设的管理员账号名和密码,默认可能为“admin”作为账号名,“admin”或“password”作为密码。如果之前已修改过,使用更改后的设置。 3. **开始配置**:登录成功后,您可以看到路由器的各种配置选项,包括网络设置、安全设置、无线频段调整等。根据个人需求进行相应的设置。 4. **保存并重启**:完成所有必要的配置后,记得保存设置并重启路由器,以便生效。 #### 使用手机APP配置: 1. **下载App**:从应用商店下载荣耀官方的路由器管理App,如荣耀智慧生活App。 2. **扫描二维码**:在路由器底部找到二维码图标并用手机扫描,或者手动输入路由器的MAC地址或IP地址加入WiFi连接路由器。 3. **绑定账户**:按照提示绑定荣耀账号,便于后续的远程管理和软件更新。 4. **配置路由器**:在App内可以直观地查看和调整各项设置,如网络名称、加密方式、Wi-Fi信号强度控制等。 ### 日常维护与使用: - 定期检查路由器固件更新,确保使用最新版本的功能和安全性提升。 - 清洁路由器散热孔,保持良好的通风环境,避免长时间高温导致性能下降。 - 如果多台设备同时在线,可能会对网络造成压力,注意合理分配带宽资源。 ### 相关问题: 1. **如何解决路由器频繁掉线的问题**? - 检查网络线路是否稳定可靠,是否存在干扰源。 - 检查路由器设置是否开启过多的安全防护措施,可能影响稳定性。 - 更新路由器固件至最新版本,修复潜在的技术缺陷。 2. **如何提高家庭Wi-Fi覆盖范围**? - 将路由器放置于开放空间,远离墙体和其他电子设备。 - 可考虑购买并安装Wi-Fi放大器或扩展器,增强信号强度和覆盖面积。 - 根据实际需要,增加路由器的数量或采用Mesh网络系统。 3. **路由器设置过于复杂,怎么简化操作流程**? - 利用路由器自带的向导模式进行快速设置,减少人工干预步骤。 - 学习使用路由器管理App,其图形化界面通常比Web端更直观易用。 - 查阅用户手册或官方教程,了解常用的快捷配置技巧和一键优化功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大雨淅淅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值