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

简介: 基于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电子书和数学建模资料



相关文章
|
传感器 机器学习/深度学习 物联网
面向WSN的节能睡眠觉醒感知(EESAA)智能路由协议(Matlab代码实现)
面向WSN的节能睡眠觉醒感知(EESAA)智能路由协议(Matlab代码实现)
|
缓存 算法 物联网
基于AODV和leach协议的自组网络平台matlab仿真,对比吞吐量,负荷,丢包率,剩余节点个数,节点消耗能量
本系统基于MATLAB 2017b,对AODV与LEACH自组网进行了升级仿真,新增运动节点路由测试,修正丢包率统计。AODV是一种按需路由协议,结合DSDV和DSR,支持动态路由。程序包含参数设置、消息收发等功能模块,通过GUI界面配置节点数量、仿真时间和路由协议等参数,并计算网络性能指标。 该代码实现了节点能量管理、簇头选举、路由发现等功能,并统计了网络性能指标。
416 73
基于COPE协议的网络RLNCBR算法matlab性能仿真
摘要: 本研究聚焦于COPE协议与RLNCBR算法(MATLAB仿真),整合随机线性网络编码与背压路由,优化网络编码技术以增强吞吐量与鲁棒性。实验在MATLAB2022a下执行,展示了平均传输次数随接收节点数(N:2-10)变化趋势(P1=...=Pn=0.08,重传间隔100Δt)。COPE协议利用编码机会提高效率,而RLNCBR算法动态调整路径,减少拥塞,提升成功率。数学模型与仿真实验证实算法有效提升网络性能,降低时延与丢包率。[总计239字符]
|
前端开发 API Swift
什么是MATLAB许可证协议书
React Native和Swift在多个方面存在显著的区别,这些区别主要体现在它们的技术基础、应用场景、性能特点、开发效率以及社区支持等方面。
110 2
|
算法 物联网
机会路由MORE协议的matlab性能仿真
摘要: 本研究关注无线Mesh网络中的机会路由与网络编码融合技术,特别是MORE协议。机会路由利用无线特性提高网络效率,而网络编码提升网络吞吐量。在分析这两项技术的基础上,提出改进MORE的方案,优化节点选择和路径测量,以增强网络性能。使用MATLAB2022a进行仿真验证。尽管MORE独立于MAC层并应用线性网络编码,但其ETX测量可能存在不准确问题,该问题成为改进的重点。
|
传感器 算法 网络协议
基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)
基于LEACH和HEED的WSN路由协议研究与改进(Matlab代码实现)
194 0
|
传感器 算法
基于LEACH路由协议的网络性能matlab仿真,包括数据量,能耗,存活节点
- **LEACH协议**在WSN中通过分簇减少能耗,普通节点向最近簇头发送数据,簇头融合后发送给基站。本项目研究LEACH在不同初始能量、数据包及控制包长度条件下的网络性能,如剩余节点、能量、接收数据量和累计接收量。
|
传感器 存储 算法
无线传感网路由VBF协议和DBR协议的MATLAB性能仿真
**摘要** 本文档介绍了在MATLAB2022a中对无线传感器网络的VBF和DBR路由协议的性能仿真,关注能量消耗和节点存活。VBF协议依赖于节点的地理位置,采用源路由,通过矢量和管道路由选择转发节点。DBR协议则运用贪婪算法,基于节点深度决定转发,以接近水面为目标。两协议均考虑能量效率,但可能导致不必要的数据传输和重复分组,需优化策略以适应密集网络和避免冲突。
|
传感器 机器学习/深度学习 算法
用于异构无线传感器网络的多聚合器多链路由协议(Matlab代码实现)
用于异构无线传感器网络的多聚合器多链路由协议(Matlab代码实现)
|
传感器 监控 算法
具有成本效益的深度信任网络的智能LEACH的多级动态优化(Matlab代码实现)
具有成本效益的深度信任网络的智能LEACH的多级动态优化(Matlab代码实现)
216 0
具有成本效益的深度信任网络的智能LEACH的多级动态优化(Matlab代码实现)

热门文章

最新文章