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

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

🍊个人信条:格物致知。

⛄ 内容介绍

在无线传感网络中,每个传感器节点的能量有限,难以随时对传感器节点补充能量,所以能量是整个网络中的一项重要资源,决定了整个网络的生存时间.因此,根据无线传感网络的特点来设计一种高效节能的路由协议是研究无线传感网络的一项重要内容. 随着对无线传感网络的深入研究,越来越多的无线传感网络路由协议被提出来,但每种路由协议都是针对不同的应用需求而产生的,只是对其中的一项或几项参数进行了改进,没有面面俱到地对所有参数进行完善.本文在综合比较了平面路由协议和分层路由协议的基础上选择了对经典的分簇路由协议 LAECH进行研究,并针对该协议的不足,提出了一种基于LEACH的改进协议.

⛄ 部分代码

function [STATISTICS1,FD1,TD1,AD1]=leach(IniEng,NetSize,NoOfNode,NoOfRound,cluster_head_percentage)

xm=NetSize;

ym=NetSize;

sink.x=0.5*xm;

sink.y=1.35*ym;

n=NoOfNode;

p=cluster_head_percentage;

Eo=IniEng;%Initial energy

%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=0;

rmax=NoOfRound;

do=sqrt(Efs/Emp);

do

for i=1:1:n

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

    %XR(i)=S(i).xd;

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

    %YR(i)=S(i).yd;

    S(i).G=0;

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

    %initially there are no cluster heads only nodes

    S(i).type='N';

end

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

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

countCHs=0;

cluster=1;

flag_first_dead=0;

flag_teenth_dead=0;

flag_all_dead=0;

dead=0;

first_dead=0;

teenth_dead=0;

all_dead=0;

allive=n;

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

packets_TO_BS=0;

packets_TO_CH=0;

for r=0:1:rmax     

    r

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

        for i=1:1:n

            S(i).G=0;

            %S(i).cl=0; 

        end

    end

    dead=0;

    for i=1:1:n

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

            dead=dead+1;  

            if (dead==1)

                if(flag_first_dead==0)

                    first_dead=r;

                    flag_first_dead=1;

                end

            end   

            if(dead==0.1*n)

                if(flag_teenth_dead==0)

                    teenth_dead=r;

                    flag_teenth_dead=1;

                end

            end

            if(dead==n)

                if(flag_all_dead==0)

                    all_dead=r;

                    flag_all_dead=1;

                end

            end

        end

        if S(i).E>0

            S(i).type='N';

        end

    end

    STATISTICS.DEAD(r+1)=dead;

    STATISTICS.ALLIVE(r+1)=allive-dead;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    TotalNetworkEnergy=0;

    for i=1:n

        if S(i).E>0

            TotalNetworkEnergy=TotalNetworkEnergy+S(i).E;

        end

    end

    STATISTICS.TotalEnergy(r+1)=TotalNetworkEnergy;

    STATISTICS.AvgEnergy(r+1)=TotalNetworkEnergy/n;

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    countCHs=0;

    cluster=1;

    for i=1:1:n

        if(S(i).E>0)

            temp_rand=rand;     

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

                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;

                    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;

                    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

        % S(i).G=S(i).G-1;  

        end 

    end

    STATISTICS.COUNTCHS(r+1)=countCHs;

    %pause;

    for i=1:1:n

        if ( S(i).type=='N' && S(i).E>0 )

            if(cluster-1>=1)

                min_dis=Inf;

                min_dis_cluster=0;

                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 

                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

                S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 ); 

                packets_TO_CH=packets_TO_CH+1;    

                S(i).min_dis=min_dis;

                S(i).min_dis_cluster=min_dis_cluster;

            else

                min_dis=sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 );

                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

                packets_TO_BS=packets_TO_BS+1;

            end

        end

    end

    STATISTICS.PACKETS_TO_CH(r+1)=packets_TO_CH;

    STATISTICS.PACKETS_TO_BS(r+1)=packets_TO_BS;

end

STATISTICS1=STATISTICS;

FD1=first_dead;

TD1=teenth_dead;

AD1=all_dead;

STATISTICS.DEAD(r+1);

STATISTICS.ALLIVE(r+1);

STATISTICS.PACKETS_TO_CH(r+1);

STATISTICS.PACKETS_TO_BS(r+1);

STATISTICS.COUNTCHS(r+1);

⛄ 运行结果

基于matlab模拟leach,leach-c以及TS-I-Leach三种协议_无人机

基于matlab模拟leach,leach-c以及TS-I-Leach三种协议_无人机_02

基于matlab模拟leach,leach-c以及TS-I-Leach三种协议_无人机_03

基于matlab模拟leach,leach-c以及TS-I-Leach三种协议_图像处理_04

基于matlab模拟leach,leach-c以及TS-I-Leach三种协议_图像处理_05

⛄ 参考文献

[1] 陈晨. 基于LEACH的无线传感器网络路由协议的改进[D]. 北京工业大学.

[2] 刘苏. 基于簇头选举和多跳路由的LEACH协议研究[D]. 西南大学, 2013.

[3] 付得胜. 无线传感网络LEACH路由协议的改进研究[D]. 重庆大学, 2016.

⛳️ 代码获取关注我

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