LEACH算法仿真结果
- 格式:doc
- 大小:110.50 KB
- 文档页数:11
仿真一:在100*100的区域内随机生成100个节点(matlab仿真代码: clear;xm=100;%x轴范围ym=100;%y轴范围sink.x=0.5*xm;%基站x轴 50sink.y=0.5*ym;%基站y轴 50n=100;E0=0.02;for i=1:1:nS(i).xd=rand(1,1)*xm;S(i).yd=rand(1,1)*ym;S(i).G=0;%每一周期结束此变量为0S(i).E=E0;%设置初始能量为E0S(i).type='N';%节点类型为普通plot(S(i).xd,S(i).yd,'o');hold on;end%设置SINK节点的坐标S(n+1).xd=sink.x;S(n+1).yd=sink.y;plot(S(n+1).xd,S(n+1).yd,'*');%绘制基站节点仿真结果图片:(‘O’代表随机散布的节点,‘*’代表SINK节点)仿真二:LEACH 分簇效果图(matlab 代码见附件)仿真结果:(p=0.1) 1、簇头个数14.01020304050607080901002、簇头个数:113、簇头个数:1201020304050607080901004、簇头个数:10102030405060708090100(p=0.05) 1、簇头=61020304050607080901002、簇头=73、簇头=124、簇头=81020304050607080901005、0102030405060708090100102030405060708090100xyLEACH 分簇算法成簇效果图仿真三:LEACH 分簇算法第一个节点死亡的轮数10203040506070809010001020304050607080901001020304050607080901000102030405060708090100第一死亡节点出现的分布及轮数xy0102030405060708090100xy经过matlab 仿真,LEACH 分簇算法在第一个节点死亡时,已经运行的轮数分别为: 122、143、125、149、122、72.仿真四:20%的节点死亡时分布及轮数1、yx 2、yxy0102030405060708090100x轮数:196、207、205、181.。
• 73•作为无线传感器网络的重要技术,WSN 路由协议是学术研究的热门话题。
LEACH 协议作为典型的的分簇算法它有很多的优点,但也有不足之处。
本文首先分析了原始的LEACH 算法。
缺点是没有考虑节点的剩余能量和位置。
在本文中,改进了缺陷,并将剩余的能量添加到考虑标准中,并且还增加了簇头之间的距离以避免形成热区域和簇头分布太密集。
通过Matlab 仿真,验证了改进的LEACH 算法可以使簇头分布更均匀,更能节省能耗,提高了网络生命周期。
1 LEACH协议LEACH (Low Energy Adaptive Clustering Hierarchy )全称是“低能耗自适应分簇型路由算法”,它是一种基于LEACH 协议的算法,因此被称作LEACH 算法,它作为层次型分簇路由算法,是无线传感器中很典型的代表(柳丽娜,无线传感器网络中LEACH 算法的研究和改进:吉林大学,2012)。
第一步,节点的初始化;第二步,选出网络中的簇头节点;第三步,正常部分成为簇头之后的初始化(基站的初始化,公共传感器节点的能量等),属于网络的建立阶段,并且选择簇头是在随机过程中生成的。
然后网络稳定来进行数据传输。
这属于一个循环,然后来回循环直到能量耗尽。
其中在选择簇头的过程中,首先会产生0到1的随机数值,如果产生的此数值比T(n)大,那么该节点就被选为簇首,T(n)就作为能否当选为簇头的标准。
T(n)的表达式为:(1)其中:P 是选举的簇头比例;r 是此时正在进行的轮数;G 是此时还没当选簇头的节点集合。
2 LEACH协议不足在分析了经典的LEACH 分簇算法过程中,虽然优点很多,但也存在一些缺点(唐甲东,蔡明,无线传感器网络路由协议研究-LEACH 路由协议的改进:计算机工程,2013):(1)簇头很容易产生在一些能量很低的节点上,从而会大大降低网络的寿命。
(2)簇头节点分布不均匀,有些过于集中,因此能量不能达到均衡状态。
LEACH算法讲解LEACH(low energy adaptive clustering hierarchy)算法是⼀种⾃适应分簇拓扑算法,它的执⾏过程是周期性的,其中定义了“轮”(round)的概念来实现周期性。
每轮循环分为族的建⽴阶段和稳定的数据通信阶段。
1、在簇的建⽴阶段,相邻节点动态地形成簇,随机产⽣簇头;2、在数据通信阶段,簇内节点把数据发送给簇头,簇头进⾏数据融合并把结果发送给汇聚节点。
由于族头需要完成数据融合、与汇聚节点通信等⼯作,所以能量消耗⼤。
LEACH算法能够保证各节点等概率地担任簇头,使得⽹络中的节点相对均衡地消耗能量。
1、簇头选举⽅法LEACH算法选举簇头的过程如下:节点产⽣⼀个0~1之间的随机数,如果这个数⼩于阀值T(n),则发布⾃⼰是簇头的公告消息。
在每轮循环中,如果节点已经当选过簇头,则把T(n)设置为0,这样该节点不会再次当选为簇头。
对于未当选过簇头的节点,则将以T(n)的概率当选;随着当选过簇头的节点数⽬增加,剩余节点当选簇头的阀值T(n)随之增⼤,节点产⽣⼩于T(n)的随机数的概率随之增⼤,所以节点当选簇头的概率增⼤。
当只剩下⼀个节点未当选时,T(n)=1,表⽰这个节点⼀定当选。
T(n)可表⽰为:其中,P是簇头数量占全部节点数量的百分⽐(⼀般会设为⼀个固定值,如 0.05 ),r是选举轮数,r mod (1/P)代表这⼀轮循环中当选过簇头的节点个数,G是在最后1/P轮中没有成为簇头的节点集。
2、数据通信当簇头选定之后,簇头节点主动向⽹络中节点⼴播⾃⼰成为簇头的消息。
接收到此消息的节点,依据接收信号的强度,选择它所要加⼊的簇,并发消息通知相应的簇头。
基于时分多址(Time Division Multiple Address,简称TDMA)的⽅式,簇头节点为其中的每个成员分配通信时隙,并以⼴播的形式通知所有的簇内节点。
这样保证了簇内每个节点在指定的传输时隙进⾏数据传输,⽽在其他时间进⼊休眠状态,减少了能量消耗。
文章编号:100721385(2008)022*******LEACH 协议的改进与仿真研究王琳霖1 李曰沈2 田 丰1(11沈阳航空工业学院,辽宁沈阳 110034;21沈阳通盛交通设施标牌厂,辽宁沈阳 110044)摘 要:无线传感器网络由能量受限的节点组成,高效节能的路由算法是路由设计的关键问题。
在LE ACH 算法的基础上,提出了一种新的分簇式路由策略,从簇头个数的确定、簇头选举方法对LE ACH 算法进行了改进,数据传输方式允许采用多跳方式与基站节点通信,仿真结果表明该算法具有降低网络能耗、延长网络生命周期的优点。
关键词:无线传感器网络;分簇路由;簇头;多跳中图分类号:T N915文献标识码:A 无线传感器网络(w ireless sensor net work,简称W S N )[1]是一种新的信息获取和处理模式,具有自组织、动态性、无中心、硬件资源有限、电源容量有限等特点。
基于这些特点,无线传感器网络也面临着一系列问题,因此如何有效地使用能量降低能耗,最大化网络生命周期成为无线传感器网络研究的重点之一。
传感器网络中,网络层的路由技术对W S N 的性能有着极其重要的影响。
随着W S N 研究的发展,许多适合不同网络环境的路由协议陆续出现,分簇路由协议具有拓扑管理方便、能量利用高效、数据融合简单等优点[2][3],成为当前重点研究的路由技术。
以网络的拓扑结构为基础的分簇路由协议,网络被划分为簇,每个簇由一个簇头和多个簇内成员组成,低一级网络的簇头是高一级网络中的簇内成员,由最高层的簇头与基站通信,如图1所示。
图1 分簇路由协议拓扑结构收稿日期22作者简介王琳霖(2),女,山东济南人,助工 在每个簇内,根据一定的机制算法,协调成员节点之间的工作,簇内成员节点将数据信息发送到簇头,簇头负责簇内信息的收集和数据的融合处理以及簇间转发,最后发送至基站B S 完成通信。
本文提出了一种基于LEACH 低功耗自适应分层路由算法的改进策略,通过改变簇头选举策略并采用多跳算法BEM 达到提高网络生命周期的目的。
第3章 无线传感网络拓扑控制 73功率、自身的位置。
节点收到HELLO 消息后,确定自己可以达到的邻居集合。
(2)以优先选择与自己节点最近的邻居节点的原则来确定邻居集合。
(3)确定邻居节点后,将发射半径调整到最远邻居节点的距离,进一步增删拓扑图的边,使网络达到双向连通。
3.4 基于分簇的拓扑控制无线传感网络中传感的工作节点通过控制可以分别处于发送数据状态、接收数据状态、空闲状态、休眠状态四种状态。
传感器节点的无线通信模块处于发送状态下的功耗最高,接收状态和空闲状态次之,休眠状态功耗最低。
例如,目前用于无线传感网络的主流传感网Berkeley M otes 的通信模块处于发送状态的功耗为60mW ,接收状态的功耗为12mW ,空闲状态的功耗为12mW ,休眠状态的功耗为0.03mW ,四者的功耗比达到2000:400:400:1。
从这里可以看出,传感器节点传输信息时要比执行计算时更消耗电能,事实上,传输1bit 信息100m ,需要的能量大约相当于执行3000条计算指令消耗的能量。
因此,降低能耗的关键是降低网络中的通信流量,使更多的节点在更长的时间段内处于休眠状态。
未来大幅降低无线通信模块的能耗,可以考虑依据一定的机制选择部分节点作为骨干节点,这些节点的通信模块处于打开状态,而关闭其他非骨干节点的通信模块,由骨干节点构建一个连通的网络来处理和传输数据。
基于分簇的拓扑控制核心思想是通过控制网络拓扑结构,将传感器节点分为骨干节点和普通节点,使用骨干节点组织数据传输的连通网络,同时骨干节点对普通节点进行管理,控制普通节点状态的转换,调度骨干节点的轮换工作,可以起到很好的节能效果。
这种机制使用的算法称为分簇算法。
骨干节点是簇头节点,普通节点是簇内节点。
簇头节点负责管理簇内节点协调工作,负责簇内数据的转发和数据融合,因此簇头节点的能耗是最高的。
只有通过算法调节簇头节点的轮换以及簇头节点角色的转换,才能使传感器节点和整个网络保持均衡运行。
Leach算法分析leach_mit结构图从wireless.tcl⽂件中分析leach的具体流程在wireless.tcl⽂件中⾸先初始化了很多⽆限仿真的配置。
引⽤了⼀些外部脚本——source tcl/lib/ns-mobilenode.tcl(主要是包含移动节点类Node/MobileNode的⼀些otcl类函数的定义)、source tcl/lib/ns-cmutrace.tcl(trace⽂件的tcl脚本)、 sourcetcl/mobility/$opt(rp).tcl(将⼏种不同的协议的具体应⽤的外部脚本引⽤,$opt(rp)是协议名称)。
当⼀些变量初始化过后,通过elseif { [string compare $opt(rp) "leach"] == 0} {for {set i 0} {$i < $opt(nn) } {incr i} {leach-create-mobile-node $i建⽴我们仿真的节点,最主要的函数是leach-create-mobile-node(这个函数的定义在uamps.tcl中)分析uamps.tcl中是如何定义节点的在uamps.tcl中初始化了bsnode的应⽤类型(Application/BSApp)、定义了⼆个能量传输模型(⾃由信道和多径衰落、Efriss_amp和Etwo_ray_amp)和很多参数。
⽽真正创建节点是在函数leach-create-mobile-node中。
⽽这个函数中调⽤了uamps.tcl中的sens_init,这个函数的功能是清除上⼀次模拟时留下的trace⽂件。
在创建节点时候,sens_init函数调⽤⼀次。
leach-create-mobile-node函数解释如下:1、节点定义:if {$id != $opt(nn_)} {puts -nonewline "$id "set node_($id) [new MobileNode/ResourceAwareNode] #将前opt(nn_)-1个点定义为⼀般节点} else {puts "($opt(nn_) == BS)"set node_($id) [new MobileNode/ResourceAwareNode $BS_NODE] #将第opt(nn_)个节点定义为最终的sink节点$node_($id) label "BS"$node_($id) label-color red}2、初始化能量:if {$id != $opt(nn_)} { #如果节点的能量相等,就将所有普通节点的能量初始化为$opt(init_energy)。
仿真一:在100*100的区域内随机生成100个节点
(matlab仿真代码: clear;
xm=100;%x轴范围
ym=100;%y轴范围
sink.x=0.5*xm;%基站x轴 50
sink.y=0.5*ym;%基站y轴 50
n=100;
E0=0.02;
for i=1:1:n
S(i).xd=rand(1,1)*xm;
S(i).yd=rand(1,1)*ym;
S(i).G=0;%每一周期结束此变量为0
S(i).E=E0;%设置初始能量为E0
S(i).type='N';%节点类型为普通
plot(S(i).xd,S(i).yd,'o');
hold on;
end
%设置SINK节点的坐标
S(n+1).xd=sink.x;
S(n+1).yd=sink.y;
plot(S(n+1).xd,S(n+1).yd,'*');%绘制基站节点仿真结果图片:(‘O’代表随机散布的节点,‘*’代表SINK节点)
仿真二:LEACH 分簇效果图(matlab 代码见附件)
仿真结果:(p=0.1) 1、簇头个数14.
0102030405060708090100
2、簇头个数:11
3、簇头个数:12
0102030405060708090100
4、簇头个数:10
10
20
30
40
50
60
70
80
90
100
(p=0.05) 1、簇头=6
10
20
30
40
50
60
70
80
90
100
2、簇头=7
3、簇头=12
4、簇头=8
10
20
30
40
50
60
70
80
90
100
5
、
010203040
5060708090
100
102030405060708090100x
y
LEACH 分簇算法成簇效果图
仿真三:LEACH 分簇算法第一个节点死亡的轮数
10
20
30
40
50
60
70
80
90
100
0102030405060708090
100
10
20
30
40
50
60
70
80
90
100
0102030405060708090100
第一死亡节点出现的分布及轮数
x
y
0102030405060708090100x
y
经过matlab 仿真,LEACH 分簇算法在第一个节点死亡时,已经运行的轮数分别为: 122、143、125、149、122、72.
仿真四:20%的节点死亡时分布及轮数
1、
y
x 2、
y
x
y
0102030405060708090100
x
轮数:196、207、205、181.。