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

2023-10-15 04:59

本文主要是介绍基于matlab模拟leach,leach-c以及TS-I-Leach三种协议,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,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);

⛄ 运行结果

⛄ 参考文献

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

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

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

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除

❤️ 关注我领取海量matlab电子书和数学建模资料

这篇关于基于matlab模拟leach,leach-c以及TS-I-Leach三种协议的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/215481

相关文章

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

Spring IOC的三种实现方式详解

《SpringIOC的三种实现方式详解》:本文主要介绍SpringIOC的三种实现方式,在Spring框架中,IOC通过依赖注入来实现,而依赖注入主要有三种实现方式,构造器注入、Setter注入... 目录1. 构造器注入(Cons编程tructor Injection)2. Setter注入(Setter

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

VUE动态绑定class类的三种常用方式及适用场景详解

《VUE动态绑定class类的三种常用方式及适用场景详解》文章介绍了在实际开发中动态绑定class的三种常见情况及其解决方案,包括根据不同的返回值渲染不同的class样式、给模块添加基础样式以及根据设... 目录前言1.动态选择class样式(对象添加:情景一)2.动态添加一个class样式(字符串添加:情

python修改字符串值的三种方法

《python修改字符串值的三种方法》本文主要介绍了python修改字符串值的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录第一种方法:第二种方法:第三种方法:在python中,字符串对象是不可变类型,所以我们没办法直接

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

在Spring中配置Quartz的三种方式

《在Spring中配置Quartz的三种方式》SpringQuartz是一个任务调度框架,它允许我们定期执行特定的任务,在Spring中,我们可以通过多种方式来配置Quartz,包括使用​​@Sche... 目录介绍使用 ​​@Scheduled​​ 注解XML 配置Java 配置1. 创建Quartz配置

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines