一、 简介

1 引言
WSN 由能感知外部环境的传感器节点以自组网的形式构成,是一种分布式无线传感器网络。随着科技的进步和现代生活的需求,由于 WSN 的远程控制、信息即时传播以及低功耗等众多优点,WSN 在军事医疗、生活娱乐和工业生产等各个社会领域发挥着越来越大的作用。但是 WSN 优点众多的同时也有其弊端。正是因为传感器节点的无线性,使能量不能源源不断地直接供给传感器节点,只能用有限的电池供应节点的全部能耗,这使能量成为 WSN 亟待解决的问题。为了解决能量均衡高效这个问题,Heinzelman 等提出了最早的分簇路由协议。此协议运用数据融合技术和能量高效利用的路由算法,是经典的分簇路由协议代表。此后,很多研究学者对此基础上进行了诸多改进,都从不同方面进行了优化。Mittal 等提出了用替补簇首( Sub-CH )代替死亡簇首的方法。Gnanambigai等介绍了LEACH的后继协议。其中,LEACH-C 协议利用每个节点发送位置信息和剩余能量生成能耗更低、性能更优越的分簇;LEACH-F使用固定的簇和循环选举出的簇首,避免了反复成
簇带来的能量消耗;MUTIHOP-LEACH 协议考虑间距因素,在簇中节点与汇聚节(sink)、簇与基站之间使用多跳方法的传输方案;LEACH-L 允许间隔基站较远的簇首使用多跳方式与基站进行通信。

2 LEACH 协议概述
2.1 LEACH 协议的简介
LEACH 协议是一种经典分簇路由协议,它的特点是低功率消耗、聚类自适应和节点平等。由于网络内各个节点被选概率一样,因此将整个网络的能量消耗均衡地分配到每个节点,从而达到网络的能量消耗负载均衡,延长网络生命时间。LEACH协议主要由T n( ) 构成。首先,每轮次每个节点都随机产生的一个数   0 1     ;然后,将  与T n( ) 进行比较,如果   T n( ) ,则此节点成为簇首;反之,则落选。在 WSN 中一次新路由的建立加上数据的传输算一轮。由T n( ) 算法可以看出,被选为簇首是由这 2 方面因素进行权衡得出的:整个网络场景中所需要的簇首节点总数和节点当选过簇首的次数。阈值T n( ) 为

其中, p 表示在此网络规模中需要的簇首节点比例,r 是进行的轮次,G 表示在此轮循环之前没有被选为簇首的节点。

2.2 网络模型
为了研究改进的路由算法对网络的影响,对网络模型作了如下假设。

  1. 实验区域的形状为规则图形,传感器节点在监测区域中随机不均匀分散。
  2. 所有传感器节点的能量相同、处理能力和通信能力相等,被选概率一样。
  3. 传感器节点可以知悉自身剩余能量并可以对冗余数据进行融合。
  4. 传感器节点随机被分散后不会移动,网络部署后不再进行人为干涉。
  5. 无线发射功率可以自我调控,可自主选择发射功率。

2.3 能耗模型
本文实验中,m bit 数据的传输过程与每一步的能量消耗如图 1 所示[13]。

当 m bit 的数据进行传输时,节点的能量消耗主要由这 2 个部分构成:发送 m bit 数据的能量耗损以及功率放大电路的能量耗损;同时,针对不同的发射距离 d,选择不同的发送功率为

二、部分源代码

clc;
clear;%% 1.初始参数设定模块
%.传感器节点区域界限(单位 m)
xm = 100;
ym = 100;
% (1)汇聚节坐标给定
sink.x = 50;
sink.y = 50;
% 区域内传器节数
n = 100;
% 簇头优化比例(当选簇头的概率)
p = 0.05;
% 能量模型(单位 J)
% 初始化能量模型
Eo = 0.5;
% 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;
% 最大循环次数
rmax = 2000;
% 算出参数 do
do = sqrt(Efs/Emp);
% 包大小(单位 bit)
packetLength = 4000;        % 数据包大小
ctrPacketLength = 100;      % 控制包大小
% 感知半径
R = sqrt(xm*ym/(pi*n*p));
%% 2.无线传感器网络模型产生模块
% 构建无线传感器网络,在区域内均匀投放100个节点,并画出图形
for i = 1:nS(i).xd = rand(1,1)*xm;S(i).yd = rand(1,1)*ym;S(i).d =  sqrt((S(i).xd-sink.x)^2+(S(i).yd-sink.y)^2);S(i).G = 0;S(i).E = Eo;S(i).Nbr = 0;% initially there are no cluster heads only nodesS(i).type = 'N';
end
S(n+1).xd = sink.x;
S(n+1).yd = sink.y;%% 传入函数变量
[ALIVE_LEACH, ENERGY_LEACH, PACKETS_LEACH] = LEACH(xm, ym, sink, n, p, Eo, ETX, ERX, Efs, Emp, EDA, rmax, do, ctrPacketLength, packetLength, S);
[ALIVE_LEACH_E, ENERGY_LEACH_E, PACKETS_LEACH_E] = LEACH_E(xm, ym, sink, n, p, Eo, ETX, ERX, Efs, Emp, EDA, rmax, do, ctrPacketLength, packetLength, S);
[ALIVE_LEACH_improved, ENERGY_LEACH_improved, PACKETS_LEACH_improved] = LEACH_improved(xm, ym, sink, n, p, Eo, ETX, ERX, Efs, Emp, EDA, rmax, do, ctrPacketLength, packetLength, S, R);%% 绘图比较
r = 1:rmax+1;
figure;
plot(r, ALIVE_LEACH, 'r^-', r, ALIVE_LEACH_E, 'ko-', r, ALIVE_LEACH_improved, 'bp-', 'linewidth', 1.5, 'MarkerSize',7);
xlabel '时间(轮)'; ylabel '存活节点数目';
legend('LEACH', 'LEACH-E', 'LEACH-improved');
xlim([0, 2000])
figure;
plot(r, ENERGY_LEACH, 'rv-', r, ENERGY_LEACH_E, 'ko-', r, ENERGY_LEACH_improved, 'bp-', 'linewidth', 1.5, 'MarkerSize',7);
xlabel '时间(轮)'; ylabel '网络剩余能量(J)';
legend('LEACH', 'LEACH-E', 'LEACH-improved');
xlim([0, 2000])
figure;
plot(r, PACKETS_LEACH, 'rv-', r, PACKETS_LEACH_E, 'ko-', r, PACKETS_LEACH_improved, 'bp-', 'linewidth', 1.5, 'MarkerSize',7);
xlabel '时间(轮)'; ylabel '基站接收的数据量(bit)';
legend('LEACH', 'LEACH-E', 'LEACH-improved');
xlim([0, 2000])
function [Alive, Energy, Packets,TotalComEn,ResVarEn,y] = LEACH(xm, ym, sink, n, p, Eo, ETX, ERX, Efs, Emp, EDA, rmax, do, ctrPacketLength, packetLength, S)%% 3.网络运行模块
% 簇头节点数
countCHs = 0;
cluster = 1;% 此定义的目的仅仅是给定一个1开始的下标参数,真正的簇头数应该还减去1
flag_first_dead = 0;
flag_teenth_dead = 0;
flag_all_dead = 0;
% 死亡节点数
dead = 0;
first_dead = 0;
teenth_dead = 0;
all_dead = 0;
% 活动节点数
alive = n;
% 传输到基站和簇头的比特计数器
packets_TO_BS = 0;
packets_TO_CH = 0;
% (1)循环模式设定
for r = 0:rmax     % 该 for 循环将下面的所有程序包括在内,直到最后 end 才结束循环r;for i = 1:nS(i).Nbr = 0;end% 每过一个轮转周期(本程序为10次)使各节点的S(i).G参数(该参数用于后面的簇选举,在该轮转周期内已当选过簇头的节点不能再当选)恢复为零if mod(r, round(1/p)) == 0for i = 1:nS(i).G = 0;endend% (2)死亡节点检查模块dead = 0;Et = 0;for i = 1:n% 检查有无死亡节点if S(i).E <= 0dead = dead+1;% (3)第一个死亡节点的产生时间(用轮次表示)% 第一个节点死亡时间if dead == 1if flag_first_dead == 0first_dead = r;flag_first_dead = 1;endend% 50%的节点死亡时间if dead == 0.5*nif flag_teenth_dead ==0teenth_dead = r;flag_teenth_dead = 1;endendif dead == nif flag_all_dead == 0all_dead = r;flag_all_dead = 1;endendendif S(i).E > 0Et = Et+S(i).E;S(i).type = 'N';endend

三、运行结果







四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.
[4]黄利晓,王晖,袁利永,曾令国.基于能量均衡高效WSN的LEACH协议改进算法[J].通信学报第38卷第Z2期

【WSN通信】基于matlab粒子群算法改进能量均衡高效WSN LEACH协议【含Matlab源码 1562期】相关推荐

  1. 【Matlab指纹识别】指纹识别匹配门禁系统【含GUI源码 587期】

    一.代码运行视频(哔哩哔哩) [Matlab指纹识别]指纹识别匹配门禁系统[含GUI源码 587期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  2. 【PSO三维路径规划】基于matlab粒子群融合遗传算法多无人机三维路径规划【含Matlab源码 333期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  3. 【ELMAN预测】基于粒子群算法改进ELMAN动态递归神经网络实现数据预测matlab源码

    一.Elman神经网络介绍 1.特点 Elman神经网络是一种典型的动态递归神经网络,它是在BP网络基本结构的基础上,在隐含层增加一个承接层,作为一步延时算子,达到记忆的目的,从而使系统具有适应时变特 ...

  4. 【微电网优化】基于粒子群算法求解混合储能系统容量优化问题含Matlab源码

    1 简介 为了提高供电的稳定性.可靠性,实现日夜发电,在太阳能.风能资源比较丰富的区域,建立风能.太阳能互补发电系统.但是由于系统投入成本过高,风.光又存在间歇性和不稳定性等问题,需要配置储能系统来平 ...

  5. 基于多目标粒子群算法的配电网储能选址定容(含MATLAB程序)

    一.主要内容 程序是对文章<基于多目标粒子群算法的配电网储能选址定容>的方法复现,具体内容如下: 以系统节点电压水平(电网脆弱性).网络损耗以及储能系统总容量为目标建立了储能选址定容优化模 ...

  6. 【路径规划】基于matlab蚁群算法机器人大规模栅格地图最短路径规划【含Matlab源码 1860期】

    ⛄一.蚁群算法及栅格地图简介 随着机器人技术在诸多领域的应用, 如机器人协作焊接.灾后搜救.军事.太空探索.深海勘探.家用和服务行业等, 机器人的发展正向智能化方向延伸, 要求其具有自组织.自学习.自 ...

  7. 【优化调度】粒子群算法求解水火电调度优化问题【含Matlab源码 1181期】

    ⛄一.粒子群算法简介 1 引言 自然界中的鸟群和鱼群的群体行为一直是科学家的研究兴趣所在.生物学家Craig Reynolds在1987年提出了一个非常有影响的鸟群聚集模型,在他的仿真中,每一个个体都 ...

  8. 【ACO三维路径规划】基于matlab蚁群算法水下潜器三维路径规划【含matlab源码 043期】

    一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水下 ...

  9. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  10. 【TWVRP】基于matlab粒子群算法求解带时间窗的车辆路径规划问题(总成本最低)【含Matlab源码 2590期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

最新文章

  1. Django 路由分发
  2. 使用fswatch工具进行golang的热编译
  3. 如何评估自己对外界认知是否正确?
  4. python数据分析常用包之Scipy
  5. sa是什么岗位_服务顾问SA在维修企业扮演的重要角色
  6. 3 CO配置-企业结构-分配-把公司代码分配给成本控制范围
  7. Hadoop (HDFS)分布式文件系统基本操作
  8. opencv的一些滤镜效果
  9. 3d激光雷达开发(基于统计滤波)
  10. jq监听页面的滚动事件,
  11. Java SE 随机数生成器 Random
  12. JAVA环境变量的配置方法【希望可以帮助你】【个人实测没问题】
  13. PowerDesigner下载安装破解
  14. 直接在pocket pc上编译c#程序
  15. MT7658芯片组资料,MT7658处理器参数介绍
  16. VS2019 ClaudiaIDE更换背景图片
  17. Mac brew update手顺
  18. NetBIOS 漏洞的入侵与防御
  19. 18岁还能长高?该怎么做呢?
  20. 【项目展示】自己用C语言编写的象棋小程序

热门文章

  1. 2.PyTorch的Dataset和DataLoader
  2. 【JSP笔记02】JSP注释、脚本、表达式、JSP三大指令、JSP七大动作的介绍及使用
  3. 去除XP桌面图标的阴影
  4. Excel教程:必会的大数据录入技巧|Excel入门
  5. CentOS7 分区合并
  6. python pyecharts 数据可视化 饼状图绘制
  7. 程序设计基础之C语言计算职工工资
  8. 工业控制系统(ICS)部署图
  9. 详解 Python 中的 filter() 函数
  10. 北大oj百练-1003