基于MATLAB实现WSN(无线传感器网络)的LEACH(低能耗自适应集群层次结构)(Matlab代码实现)

news/2025/1/22 8:36:34/

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

低能耗自适应集群层次结构(“LEACH”)是一种基于 TDMA 的 MAC 协议,它与无线传感器网络 (WSN) 中的集群和简单路由协议集成在一起。LEACH的目标是降低创建和维护集群所需的能耗,以延长无线传感器网络的使用寿命。

LEACH 是一种分层协议,其中大多数节点传输到集群头,集群头聚合和压缩数据并将其转发到基站(接收器)。每个节点在每一轮都使用随机算法来确定它是否会成为这一轮的集群头。LIVEC假设每个节点都有一个足够强大的无线电,可以直接到达基站或最近的集群头,但是一直全功率使用这个无线电会浪费能量。

在 P 轮中,已成为集群头的节点不能再次成为集群头,其中 P 是所需的集群头百分比。此后,每个节点有 1/P 的概率再次成为集群头。在每个轮次结束时,每个不是群集头的节点都会选择最近的群集头并加入该群集。然后,群集头为其群集中的每个节点创建一个计划以传输其数据。

所有不是群集头的节点仅根据群集头创建的计划以 TDMA 方式与群集头通信。他们使用到达集群头所需的最小能量来做到这一点,并且只需要在他们的时间段内保持无线电打开。

LEACH还使用CDMA,以便每个集群使用一组不同的CDMA代码,以尽量减少集群之间的干扰。

📚2 运行结果

主函数部分代码:

clc
clear all;
close all;
xm=300;
ym=300;
sink.x=0.5*xm;
sink.y=0.5*ym;
sink.x=100;
sink.y=75;
​
n=200;
p=0.1;
Eo=0.5;
ETX=50*0.000000001;
ERX=50*0.000000001;
Efs=10e-12;
Emp=0.0013e-12;
EDA=5*0.000000001;
rmax=1000;
do=sqrt(Efs/Emp);
Et=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%                           LEACH                               %%%%%%%%
%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%   
for h=1:1S(n+1).xd=sink.x;S(n+1).yd=sink.y;Et=0;
for i=1:1:nS(i).xd=rand(1,1)*xm;XR(i)=S(i).xd;S(i).yd=rand(1,1)*ym;YR(i)=S(i).yd;distance=sqrt( (S(i).xd-(S(n+1).xd) )^2 + (S(i).yd-(S(n+1).yd) )^2 );S(i).distance=distance;S(i).G=0;%
initially there are no cluster heads only nodes    S(i).type='N';S(i).E=Eo;Et=Et+S(i).E;figure(h*10)plot(S(i).xd,S(i).yd,'bo');text(S(i).xd+1,S(i).yd-0.5,num2str(i));hold on;
end
​
plot(S(n+1).xd,S(n+1).yd,'o', 'MarkerSize', 12, 'MarkerFaceColor', 'r');
text(S(n+1).xd+1,S(n+1).yd-0.5,num2str(n+1));
hold off ;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
countCHs=0;  %variable, counts the cluster head
cluster=1;  %cluster is initialized as 1
flag_first_dead=0; %flag tells the first node dead
flag_half_dead=0;  %flag tells the 10th node dead
flag_all_dead=0;  %flag tells all nodes dead
first_dead=0;
half_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;
packets_TO_BS_per_round=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for r=0:1:rmaxr packets_TO_BS_per_round=0;%Operations for epochsif(mod(r, round(1/p) )==0)for i=1:1:nS(i).G=0;S(i).cl=0;endend%hold off;%Number of dead nodesdead=0;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%for i=1:1:n%
checking 
ifthere is a dead node        if (S(i).E<=0)%plot(S(i).xd,S(i).yd,'red .');dead=dead+1;if (dead==1)if(flag_first_dead==0)first_dead=r;flag_first_dead=1;endendif(dead==0.5*n)if(flag_half_dead==0)half_dead=r;flag_half_dead=1;endend
​

🎉3 参考文献

​[1]赵海军,陈华月,陈毅红.WSN中边界覆盖的最佳部署及其选择[J/OL].云南大学学报(自然科学版):1-9[2023-04-26].

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


http://www.ppmy.cn/news/56949.html

相关文章

JavaScript中的异步编程

当我们在编写JavaScript代码时&#xff0c;经常会遇到需要执行长时间运行的任务的情况&#xff0c;例如从服务器获取数据或进行复杂的计算。在这些情况下&#xff0c;我们不希望阻塞用户界面&#xff0c;因为这会使网站看起来卡顿&#xff0c;甚至无响应。为了避免这种情况&…

【五一创作】【笔记】Git|如何将仓库中所有的 commit 合成一个?又名,如何清除所有 git 提交记录?(附 git rebase 机制的简要分析)

在对代码进行开源时&#xff0c;我们往往并不希望代码开发过程中的提交记录被其他人看到&#xff0c;因为提交的过程中往往会涵盖一些敏感信息。因此会存在 将仓库中所有 commit 合成一个 的需求。 直觉上&#xff0c;往往会用 rebase 和 squash 或 reset&#xff0c;不过我尝…

文件上传下载系列——如何实现文件秒传

文章目录 &#x1f383;简介&#xff1a; &#x1f47b;核心思想&#xff1a; MD5是什么&#xff1f; 实现步骤&#xff1a; &#x1f384;实操&#xff1a; 1、java生成文件MD5码 2、javascript生成文件MD5码 ⛳️基于秒传的分片上传下载 上传&#xff1a; 下载&…

交叉熵损失函数原理详解

交叉熵损失函数原理详解 在学习pytorch的神经网络模型里&#xff0c;经常用到交叉熵损失函数(CrossEntropy Loss)&#xff0c;只知道它是分类问题中经常使用的一种损失函数&#xff0c;对于其内部的原理总是模模糊糊&#xff0c;而且一般使用交叉熵作为损失函数时&#xff0c;…

【Python】操作MySQL

一、Python 操作 Mysql的方式 Python 操作 Mysql 主要包含下面 3 种方式&#xff1a; Python-MySql Python-MySql 由 C 语法打造&#xff0c;接口精炼&#xff0c;性能最棒&#xff1b;但是由于环境依赖多&#xff0c;安装复杂&#xff0c;已停止更新&#xff0c;仅支持 Python…

密码学【java语言】初探究

文章目录 前言一 密码学1.1 古典密码学1.1.1 替换法1.1.2 移位法1.1.3 古典密码破解方式 二 近代密码学2.1 现代密码学2.1.1 散列函数2.1.2 对称密码2.1.3 非对称密码 二 凯撒加密的实践2.1 基础知识&#xff1a;ASCII编码2.2 ascii编码演示2.3 凯撒加密和解密实践2.4 频率分析…

多项式加法(用 C 语言实现)

目录 一、多项式的初始化 二、多项式的创建 三、多项式的加法 四、多项式的输出 五、清除链表 六、主函数 用链表实现多项式时&#xff0c;每个链表节点存储多项式中的一个非零项&#xff0c;包括系数&#xff08;coef&#xff09;和指数&#xff08;exp&#xff09;两个…

权限提升:漏洞探针.(Linux系统)

权限提升&#xff1a;漏洞探针. 权限提升简称提权&#xff0c;由于操作系统都是多用户操作系统&#xff0c;用户之间都有权限控制&#xff0c;比如通过 Web 漏洞拿到的是 Web 进程的权限&#xff0c;往往 Web 服务都是以一个权限很低的账号启动的&#xff0c;因此通过 Webshel…