前言
随手记录一下学习无线传感器网络一些经典路由协议的心得体会~
EEUC协议于2007年提出,发表在《计算机学报》上,协议的核心是一个能量高效的非均匀分簇(Energy Efficient Unenen Clustering,EEUC)算法,该协议创新性地提出了非均匀簇头竞争半径的概念,有效地平衡了簇首的能量消耗,并一定程度上解决了多跳路由的传感器网络中常见的“热区”问题,具有良好的参考价值。
一、协议内容
EEUC协议利用非均匀的竞争半径,使得靠近汇聚点的簇的成员数目相对较小,从而簇首能够节约能量以供数据转发使用,达到均衡簇首能量消耗的目的.此外,簇首与汇聚点间通信采用多跳的方式,在簇首选择其路由的下一跳节点时,不仅考虑候选节点相对汇聚点的位置,还考虑候选节点的剩余能量。
簇头竞选
EEUC协议簇头竞选流程如下:
首先,依概率在网络中选出部分节点成为候选簇首,参与竞选.普通节点成为候选簇首的概率为T,它是一个预先设置的阈值.未参与竞选的节点进入睡眠状态,直到簇首竞选过程结束
对于初步挑选出的候选簇头,根据自身到汇聚点的距离信息计算它的竞争区域,假设为一个候选簇头节点,则其竞争半径Rc定义为:
式(1)中为 候选簇首的竞争半径的最大取值,c是用于控制取值范围的参数,在0~1之间取值。dmax和dmin分别代表网络中的节点到汇聚点的距离最大值和最小值,d(
,DS)代表节点
到汇聚点的距离.由式(1)可看出竞争半径与节点到汇聚点的距离呈线性递减关系。
每个簇头需要建立自己的邻簇头集合,在该集合内依据当前各节点的剩余能量高低竞争选出最终簇首。候选簇头的邻簇头集合
建立的方式为:
当构建完成后,节点需要等待其邻簇首集合中所有能量比它大的节点先做出决策,然后才能确定自身是否能担任簇首,一旦
发现它的剩余能量比其邻簇首集合中的节点的剩余能量都高,则它将赢得竞选,此时该候选簇头的竞争半径内不允许再有候选簇头出现。
簇头竞选结束后,之前未参与竞选的节点从睡眠状态唤醒,接着竞选产生的簇首向全网广播其竞选获胜的消息.普通节点选择簇内通信代价最小亦即接收信号强度最大的簇首,发送加入消息通知该簇首。接下来进入簇内部的数据传输阶段.簇首构建TDMA调度,然后簇成员向簇首传输数据.采用与LEACH相同的方式。
簇间多跳路由
EEUC协议的另外一个创新之处在于簇间的通信采用单跳&多跳混合的形式进行,在簇间传输阶段,文章引入一个阈值TD_MAX.若簇首到汇聚点的距离小于TD_MAX,则它直接与汇聚点进行通信;否则使用多跳路由的方式将数据传送给汇聚点。
簇首的候选中继节点集合
的计算方式为:
从距离基站(汇聚点)最远的簇头节点开始,按照式(3)找到中继节点的集合,在集合中选择剩余能量较多的节点,如果该节点与源簇头以及基站连接形成的链路能量开销也较小,则优先作为中继节点,以此类推。这种方法有利于均衡能量消耗,避免有些节点因为能量消耗过多而较早死亡。
二、代码实现
1.部分核心代码
定义相关参数
clear;
xm=200;
ym=200;
sink.x=0.5*xm;
sink.y=1.25*ym;
n=400;
Eo=0.5;
Rc0=90;
TD_MAX = 140;
packetLength = 4000;
ctrPacketLength = 100;
ETX=50*0.000000001;
ERX=50*0.000000001;
Efs=10*0.000000000001;
Emp=0.0013*0.000000000001;
EDA=5*0.000000001;
do=sqrt(Efs/Emp);
挑选候选簇首,候选簇首竞选最终簇首
for i=1:1:n
S(i).T=rand(1,1);
if S(i).T<0.4
p=p+1;
B_ID(p)=i;
N(p).xd=S(i).xd;
N(p).yd=S(i).yd;
N(p).Rc=(1-0.5*(dmax-S(i).r)/dmin)*Rc0; %候选簇头广播竞选消息的半径
N(p).r=S(i).r;
N(p).type='B';
N(p).E=S(i).E;
end
end
z=find(E==max(E));
f=f+1;
C_ID(f)=B_ID(z);
E(z)=0;
B_ID(z)=0;
N(z).type='N';
for j=1:1:p
d=sqrt((N(z).xd-N(j).xd)^2+(N(z).yd-N(j).yd)^2);
if d<=N(z).Rc
N(j).type='N';
B_ID(j)=0;
E(j)=0;
end
end
多跳路由
if S(C_ID2(j)).r>TD_MAX
e=ceil(min(C_C{j})/S(C_ID2(j)).Rc);
if e*S(C_ID2(j)).Rc<do
S(C_ID2(j)).E=S(C_ID2(j)).E-( ETX * packetLength + Efs * packetLength*(e*S(C_ID2(j)).Rc)*(e*S(C_ID2(j)).Rc));
else
S(C_ID2(j)).E=S(C_ID2(j)).E-( ETX * packetLength + Emp * packetLength*(e*S(C_ID2(j)).Rc)*(e*S(C_ID2(j)).Rc)*(e*S(C_ID2(j)).Rc)*(e*S(C_ID2(j)).Rc));
end
if g>1
g=find(C_C{j}==min(C_C{j}));
e2=ceil(min(C_C{g})/S(C_ID2(g)).Rc);
if e*S(C_ID2(g)).Rc<do
S(C_ID2(g)).E= S(C_ID2(g)).E-( ETX * packetLength + Efs * packetLength*(e*S(C_ID2(g)).Rc)*(e*S(C_ID2(g)).Rc))- ERX * packetLength;
else
S(C_ID2(g)).E= S(C_ID2(g)).E-( ETX * packetLength + Emp * packetLength*(e*S(C_ID2(g)).Rc)*(e*S(C_ID2(g)).Rc)*(e*S(C_ID2(g)).Rc)*(e*S(C_ID2(g)).Rc))- ERX * packetLength;
end
end
g2=find(C_C{g}==min(C_C{g}));
if g2>1
if S(C_ID2(g2)).r<do
S(C_ID2(g2)).E= S(C_ID2(g2)).E-( ETX * packetLength + Efs * packetLength*(e*S(C_ID2(g2)).Rc)*(e*S(C_ID2(g2)).Rc))- ERX * packetLength;
else
S(C_ID2(g2)).E= S(C_ID2(g2)).E-( ETX * packetLength + Emp * packetLength*(e*S(C_ID2(g2)).Rc)*(e*S(C_ID2(g2)).Rc)*(e*S(C_ID2(g2)).Rc)*(e*S(C_ID2(g2)).Rc))- ERX * packetLength;
end
end
else
if S(C_ID2(j)).r<do
S(C_ID2(j)).E=S(C_ID2(j)).E-( ETX * packetLength + Efs * packetLength*S(C_ID2(j)).r*S(C_ID2(j)).r);
else
S(C_ID2(j)).E=S(C_ID2(j)).E-( ETX * packetLength + Emp * packetLength*S(C_ID2(j)).r*S(C_ID2(j)).r*S(C_ID2(j)).r*S(C_ID2(j)).r);
end
end
2.仿真结果
总结
EEUC协议创新性地引入了非均匀簇头竞争半径的概念,并通过簇间单跳与多跳混合的方式进行数据传输,具有较好的参考价值,同时由概率挑选候选簇头所产生的随机性也会一定程度上影响协议性能。
参考文献
[1]李成法;陈贵海;叶懋;吴杰.一种基于非均匀分簇的无线传感器网络路由协议[J].计算机学报,2007,(01):27-36.