欢迎来到本博客❤️❤️
博主优势:博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
本文目录如下:
目录
1 概述
2 运行结果
3 参考文献
4 Matlab代码实现
部署无线传感器节点是为了从现场收集有用的信息,但它们对电池电源的限制促使我们考虑节能路由协议,以便它们可以在更长的时间内运行。我们研究了在网络中拥有多条链的优势,每个链的最顶层节点(称为聚合器)从其下方的节点收集数据并将其传输到接收器。在拟议的方案中,每个区域中的链条作为PEGASIS。我们还研究了考虑网络中的异构性如何使网络的生命周期延长一个重要的时期。我们假设网络中的一小部分节点拥有额外的能量。我们通过模拟表明,与传统的数据聚合方案相比,将异构性引入网络会导致更长的生命周期,持续时间随着考虑的额外能量而增加。
无线传感器节点通常部署在偏远和无法访问的区域。补充这些节点的能量是非常困难的。因此,节能布线非常重要。协议需要具有能量意识,以延长网络的使用寿命。像直接通信协议和最小传输能量协议[1]这样的方法在这方面非常无效。在 DC 中,每个节点将其数据传输到接收器。因此,远离接收器的节点会快速排出。在 MTE 中,发往接收器的数据通过最靠近接收器的中间节点进行路由。因此,靠近汇的节点成为中间节点的概率更高,这将导致它们更快地死亡。
在[2]中,提出了LIVEC方法,它将能量耗散均匀地分布在传感器节点上。LEACH 优于经典聚类算法,它使用自适应聚类并在所有节点之间均匀旋转聚类头。因此,随着时间的推移,每个节点倾向于消耗相同的能量。在[3]中,提出了一种称为SEP的基于两级异构集群的路由协议。它使用加权概率来选择网络中的集群头。
在[4]中,提出了一种称为PEGASIS的基于链的协议。这里的想法是在传感器节点之间形成一个链,以便每个节点从近邻接收和传输。
在[5]中,提出了一种称为MCML的多链聚合方案。在这里,网络分为四个区域,每个区域都作为PEGASIS。
在本文中,我们提出了一种新的多链方案,我们称之为MAMC(多聚合器多链),其中网络分为10个区域,每个区域的链作为PEGASIS。聚合器节点从其下节点收集数据,并将聚合数据传输到接收器节点。将网络划分为多个链有助于在整个网络中平均分配能量负载。因此,传感器网络的性能得到改善。我们还展示了网络中具有异构性的优势。
部分代码:
%Election of Cluster Heads for Advanced nodes
if( ( S(i).ENERGY==1 && ( temp_rand <= ( padv / ( 1 - padv * mod(r,round(1/padv)) )) ) ) )
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=100;
C(cluster).xd=S(i).xd;
C(cluster).yd=S(i).yd;
plot(S(i).xd,S(i).yd,'k*');
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;
%Calculation of Energy dissipated
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
end
end
STATISTICS(r+1).CLUSTERHEADS=cluster-1;
CLUSTERHS(r+1)=cluster-1;
%Election of Associated Cluster Head for Normal Nodes
for i=1:1:n
if ( S(i).type=='N' && S(i).E>0 )
if(cluster-1>=1)
min_dis=sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 );
min_dis_cluster=1;
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 ( tempdo)
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
%Energy dissipated
if(min_dis>0)
S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E- ( (ERX + EDA)*4000 );
PACKETS_TO_CH(r+1)=n-dead-cluster+1;
end
S(i).min_dis=min_dis;
S(i).min_dis_cluster=min_dis_cluster;
end
end
end
hold on;
countCHs;
rcountCHs=rcountCHs+countCHs;
%Code for Voronoi Cells
%Unfortynately if there is a small
%number of cells, Matlab's voronoi
%procedure has some problems
%[vx,vy]=voronoi(X,Y);
%plot(X,Y,'r*',vx,vy,'b-');
% hold on;
% voronoi(X,Y);
% axis([0 xm 0 ym]);
end
x=1:1:r;
y=1:1:r;
%z=1:1:r;
for i=1:1:r;
x(i)=i;
y(i) = n - STATISTICS(i).DEAD;
%z(i)=CLUSTERHS(i);
end
figure(2);
plot(x,y,'k');
hold on;
title ('ALIVE NODES vs ROUNDS');
xlabel ('number of rounds');
ylabel ('number of alive nodes');
xb=[x 5000];
figure(3);
plot(xb,DEAD,'k');
hold on;
xlabel ('number of rounds');
ylabel ('number of dead nodes');
title ('DEAD NODES vs ROUNDS');
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。