天天看点

【LEACH协议】基于matlab实现无线传感器网络LEACH与DEEC协议

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:​​Matlab科研工作室​​

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

​​智能优化算法​​  ​​神经网络预测​​ ​​雷达通信 ​​ ​​无线传感器​​

​​信号处理​​ ​​图像处理​​ ​​路径规划​​ ​​元胞自动机​​ ​​无人机​​

⛄ 内容介绍

无线传感器网络(Wireless Sensor Network, WSN)技术是一门新兴的网络技术,它将成千上万颗传感器节点布置到需要监控的区域,通过其自身的自组网能力,组成一个可以在较大范围内进行数据采集和处理的自组织网络。无线传感器网络在民用与军用方面有非常高的价值,它已经应用到军事领域、生物医学领域、环境的监控等多种实际应用领域中,并具有很好的实用性和先进性。目前,国内外科研领域都非常重视无线传感器网络的发展并进行了重点研究。无线传感器网络包含多项相关技术,其中主要包括路由协议、时间同步、数据融合、定位技术等等。由于无线传感器网络节点的能量有限,如果节点能量耗尽,其就成为死亡节点影响网络功能。因此,一个具有较好节能效果的路由协议就显得至关重要。无线传感器网络路由协议的分类很多,本文主要针对分层次的路由协议进行研究。低功耗自适应集簇分层型协议(Low-Energy Adaptive Clustering Hierarchy, LEACH)路由协议就是典型的分层路由协议,它有节能和鲁棒性好优点,但是也有着分布不均匀,分簇阶段并未考虑节点剩余能量和距离等因素,不适应现代应用环境。

⛄ 部分代码

clc;

clear all;

close all;

%1.初始参数设定模块 

%.传感器节点区域界限(单位 M) 

xm=100; 

ym=100; 

%(1)汇聚节坐标给定 

sink.x=0.5*xm; 

sink.y=0.5*ym; 

%区域内传器节数 

n=100 

%簇头优化比例(当选簇头的概率) 

p=0.05; 

P=0.05; 

%能量模型(单位 焦) 

%初始化能量模型 

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; 

%高能量节点超出一节点能量的百分比 

a=1; 

%最大循环次数 

rmax=5000 

%算出参数 do 

do=sqrt(Efs/Emp); 

Et=0; 

%2.无线传感器网络模型产生模块 

%构建无线传感器网络,在区域内均匀投放100个节点,并画出图形 

for i=1:1:n 

    S1(i).xd=rand(1,1)*xm; 

    S2(i).xd=S1(i).xd; 

    S3(i).xd=S1(i).xd; 

    S4(i).xd=S3(i).xd; 

    XR4(i)=S4(i).xd; 

    XR3(i)=S3(i).xd; 

    XR2(i)=S2(i).xd; 

    XR1(i)=S1(i).xd; 

    S1(i).yd=rand(1,1)*ym; 

    S2(i).yd=S1(i).yd; 

    S3(i).yd=S1(i).yd; 

    S4(i).yd=S3(i).yd; 

    YR4(i)=S4(i).yd; 

    S4(i).G=0; 

    YR3(i)=S3(i).yd; 

    S3(i).G=0; 

    YR2(i)=S2(i).yd; 

    YR1(i)=S1(i).yd; 

    S1(i).G=0; 

    S2(i).G=0; 

    S1(i).E=Eo*(1+rand*a); 

    S2(i).E=S1(i).E; 

    S3(i).E=S1(i).E; 

    S4(i).E=S3(i).E; 

    E3(i)= S3(i).E; 

    E4(i)= S4(i).E; 

    Et=Et+E3(i); 

    %initially there are no cluster heads only nodes 

    S1(i).type='N'; 

    S2(i).type='N'; 

    S3(i).type='N'; 

    S4(i).type='N'; 

end 

S1(n+1).xd=sink.x; 

S1(n+1).yd=sink.y; 

S2(n+1).xd=sink.x; 

S2(n+1).yd=sink.y; 

%3.网络运行模块 

%簇头节点数 

countCHs1=0; 

cluster1=1;%此定义的目的仅仅是给定一个1开始的下标参数,真正的簇头数应该还减去1 

flag_first_dead1=0; 

flag_teenth_dead1=0; 

flag_all_dead1=0; 

%死亡节点数 

dead1=0; 

first_dead1=0; 

teenth_dead1=0; 

all_dead1=0; 

%活动节点数 

allive1=n; 

%counter for bit transmitted to Bases Station and to Cluster Heads 

packets_TO_BS1=0; 

packets_TO_CH1=0; 

%(1)循环模式设定 

for r=0:1:rmax     %该 for 循环将下面的所有程序包括在内,直到最后一 end 才结束循环 

    r 

  %每过一个轮转周期(本程序为10次)使各节点的S(i).G参数(该参数用于后面的簇选举,在该轮转周期内已当选过簇头的节点不能再当选)恢复为零 

  if(mod(r, round(1/p) )==0) 

    for i=1:1:n 

        S1(i).G=0; 

        S1(i).cl=0; 

    end 

  end 

%(2)死亡节点检查模块 

dead1=0; 

for i=1:1:n 

    %检查有无死亡节点 

    if (S1(i).E<=0) 

        dead1=dead1+1;  

        %(3)第一个死亡节点的产生时间(用轮次表示) 

        %第一个节点死亡时间 

        if (dead1==1) 

           if(flag_first_dead1==0) 

              first_dead1=r; 

              flag_first_dead1=1; 

           end 

        end 

        %10%的节点死亡时间 

        if(dead1==0.1*n) 

           if(flag_teenth_dead1==0) 

              teenth_dead1=r; 

              flag_teenth_dead1=1; 

           end 

        end 

        if(dead1==n) 

           if(flag_all_dead1==0) 

              all_dead1=r; 

              flag_all_dead1=1; 

           end 

        end 

    end 

    if S1(i).E>0 

        S1(i).type='N'; 

    end 

end 

STATISTICS.DEAD1(r+1)=dead1; 

STATISTICS.ALLIVE1(r+1)=allive1-dead1; 

%(4)簇头选举模块 

countCHs1=0; 

cluster1=1; 

for i=1:1:n 

   if(S1(i).E>0) 

   temp_rand=rand;      

   if ( (S1(i).G)<=0)   

       %簇头的选举,当选的簇头会把各种相关信存入下面程序所给定的变量中 

        if(temp_rand<= (p/(1-p*mod(r,round(1/p))))) 

            countCHs1=countCHs1+1; 

            packets_TO_BS1=packets_TO_BS1+1; 

            PACKETS_TO_BS1(r+1)=packets_TO_BS1; 

             S1(i).type='C'; 

            S1(i).G=round(1/p)-1; 

            C1(cluster1).xd=S1(i).xd; 

            C1(cluster1).yd=S1(i).yd; 

⛄ 运行结果

⛄ 参考文献

❤️ 关注我领取海量matlab电子书和数学建模资料
❤️部分理论引用网络文献,若有侵权联系博主删除

继续阅读