基于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

相关文章

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Java继承映射的三种使用方法示例

《Java继承映射的三种使用方法示例》继承在Java中扮演着重要的角色,它允许我们创建一个类(子类),该类继承另一个类(父类)的所有属性和方法,:本文主要介绍Java继承映射的三种使用方法示例,需... 目录前言一、单表继承(Single Table Inheritance)1-1、原理1-2、使用方法1-

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

Python使用pynput模拟实现键盘自动输入工具

《Python使用pynput模拟实现键盘自动输入工具》在日常办公和软件开发中,我们经常需要处理大量重复的文本输入工作,所以本文就来和大家介绍一款使用Python的PyQt5库结合pynput键盘控制... 目录概述:当自动化遇上可视化功能全景图核心功能矩阵技术栈深度效果展示使用教程四步操作指南核心代码解析

java对接第三方接口的三种实现方式

《java对接第三方接口的三种实现方式》:本文主要介绍java对接第三方接口的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录HttpURLConnection调用方法CloseableHttpClient调用RestTemplate调用总结在日常工作

Python模拟串口通信的示例详解

《Python模拟串口通信的示例详解》pySerial是Python中用于操作串口的第三方模块,它支持Windows、Linux、OSX、BSD等多个平台,下面我们就来看看Python如何使用pySe... 目录1.win 下载虚www.chinasem.cn拟串口2、确定串口号3、配置串口4、串口通信示例5

SpringBoot实现接口数据加解密的三种实战方案

《SpringBoot实现接口数据加解密的三种实战方案》在金融支付、用户隐私信息传输等场景中,接口数据若以明文传输,极易被中间人攻击窃取,SpringBoot提供了多种优雅的加解密实现方案,本文将从原... 目录一、为什么需要接口数据加解密?二、核心加解密算法选择1. 对称加密(AES)2. 非对称加密(R

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

MySQL精准控制Binlog日志数量的三种方案

《MySQL精准控制Binlog日志数量的三种方案》作为数据库管理员,你是否经常为服务器磁盘爆满而抓狂?Binlog就像数据库的“黑匣子”,默默记录着每一次数据变动,但若放任不管,几天内这些日志文件就... 目录 一招修改配置文件:永久生效的控制术1.定位my.cnf文件2.添加核心参数不重启热更新:高手应