当前位置:文档之家› 无线传感网络实验报告

无线传感网络实验报告

-------无线传感网络实验报告学院:信息工程学院专业:网络工程学号:201216213姓名:张新龙LEACH协议LEACH协议简介分簇算法LEACH 协议是Wendi B. Heinzelman , AnanthaP. Chandrakasan , Hari Balakrishnan (MIT ,电子与计算机系) 2000 年提出的分层的传感器网络协议, 它采用分层的网络结构. LEACH,协议是通过基于簇的操作使WSN减少功耗,LEACH,协议的目的是在网络中动态地选择传感器节点作为簇头并形成簇。

在LEACH 算法中, 节点自组织成不同的簇, 每个簇只有一个簇首.各节点独立地按照一定概率决定自己是否做簇首,周期性的进行簇首选举和网络重组过程, 避免了簇首节点能耗过多, 影响网络寿命. LEACH 算法建立在所有节点都是平等且无线电信号在各个方向上能耗相同的假设上。

LEACH协议有时候也会动态地改变簇的活跃动态,如果采用高功率的方式使网络中的所有传感器节点与汇聚节点进行通信。

LEACH协议原理LEACH 协议分为两个阶段操作, 即簇准备阶段(set - up phase)和就绪阶段(ready phase). 为了使能耗最小化, 就绪阶段持续的时间比簇准备阶段长簇准备阶段和就绪阶段所持续的时间总和称为一轮(round). [ 7-8]在簇准备阶段, 随机选择一个传感器节点作为簇首节点(cluster head node), 随机性确保簇首与Sink 节点之间数据传输的高能耗成本均匀地分摊到所有传感器节点. 簇首节点选定后, 该簇首节点对网络中所有节点进行广播, 广播数据包含有该节点成为簇首节点的信息. 一旦传感器节点收到广播数据包, 根据接收到的各个簇首节点广播信号强度, 选择信号强度最大的簇首节点加入, 向其发送成为其成员的数据包.以便节省能量.簇头建立阶段:初始阶段,每个节点从0和1中随机产生一个数,如果这个数小于阀值T(n),该节点就成为当前轮的簇头。

其中,P是期望的簇头数在所有节点中占的百分比,r是选举轮数,r mod (1/p)代表这一轮循环中当选过簇头的节点个数,G是这一轮循环中未当选过簇头的节点集合。

被选为簇头的节点会通知网络中的其他节点自己是最新的簇头。

在通告自己是最新簇头的过程中,LEACH协议采用基于CSMA的随机存取机制以避免多个簇头的广播发生碰撞。

LEACH协议的优缺点LEACH协议具有很多优点,比如分层的簇型结构、本地数据联合处理和簇头节点动态分配,特别是在处理具有高度相关性的数据时,由于数据融合力度大,冗余数据被大量消除,因此在能耗方面性能较好,但LEACH仍有不足之处:1)在LEACH算法中,分布式簇首选取机制能够均匀网络中节点能耗,但随机选取的簇首节点无法保证簇头节点在空间上均匀分布,在某些情况下,算法所选择的簇头节点可能集中在某一个小范围之内,使得一部分成员节点无法加入任何簇或者成员节点与簇头节点进行数据传输时消耗过多的能量。

2) LEACH算法假定所有节点都能直接与Sink节点进行通信,这显然限制了LEACH算法在较大区域内无线传感器网络的应用。

LEACH协议的创建LEACH协议的创建阶段分为三个阶段:广播,建簇和调度表的生成,每个开始LEACH协议都会随机选择传感器节点作为簇头。

簇头选则广播阶段生成,在广播阶段中传感器节点广播一个簇头广告信息。

一旦传感器节点收到广播,它们就被确定从属于哪个簇头了,规则为如果一个节点接收到某个凑头的广播,那么它们就可以自动从属于此簇头。

但是,一个传感器节点收到来自哪个簇头的广播,就能通过接受到的簇头之间信道选择,即来自哪个簇头的信号强弱就判断哪个簇头。

可以说,簇与簇头之间信道选择是以信道质量更好为标准。

LEACH的改进LEACH在小规模的网络中性能表现较佳,但在大规模的网络环境中,就会出现能量负载不均,性能明显下降的情况。

进一步分析可以发现,在大规模网络中,远距离的节点距离基站的距离较远,无论如何分簇,传输数据要消耗更多的能量。

因此在网络中的边缘节点总是较快的耗尽能量。

而靠近基站较近的节点,相反的,因为传输数据所要消耗的能量较小,所以通常是最后死亡。

结合前人实验的结果,可以得到LEACH 协议节点大致的死亡时间分布,见图,最外围的节点死亡的概率最大,次外圈的其次,而最里圈的死亡概率最小。

由于LEACH 算法中,在每一轮中,簇首节点负责数据融合和与基站通信,比非簇首节点需要消耗更多的能量。

网络中的边缘簇首节点与基站通信本身就要消耗大量的能量,再加上进行数据融合,会很快死亡,甚至有可能在与基站通信时能量就消耗殆尽,造成数据的丢失另外,簇首数目过多导致数据融合的效率降低,产生过多不必要的通信能耗。

因此,一定存在一个最佳的簇首概率值[5],使得网络在每一轮中的能耗最小,尽可能地延长整个网络的生命周期。

本文中将簇头节点的优化方案融入改进的协议,并且在本文实验的条件下对其进一步精确化。

簇头节点如下公式:22fs opt toBS mp N Mk d επε=其中,N 为无线传感器网络中的总节点个数;fs ε为自由信道传输放大器的能耗系数,单位为J/bit/m2;mp ε为多径信道传输放大器的能耗系数,单位为J/bit/m2;M 为无线传感器网络覆盖区域长度;toBS d 为网络中节点到基站的距离。

用MATLAB 实现LEACH 协议仿真:xm = 200;ym = 200;%x and y Coordinates of the Sinksink.x = 88;sink.y = 188;n = 200; %Number of Nodes in the fieldp=0.05; %Optimal Election Probability of a node to become cluster head packetLength = 400; %数据包长度ctrPacketLength = 100; %控制包长度%Energy Model (all values in Joules)%Initial EnergyEo = 0.5;%Eelec=Etx=ErxETX=50*0.000000001;ERX=50*0.000000001;%Transmit Amplifier typesEfs=10*0.000000000001;Emp=0.0013*0.000000000001;%Data Aggregation EnergyEDA=5*0.000000001;rmax=200%%%%%%%%%%%%%%%%%%END OF PARAMETERS %%%%%%%%%%%%%%%%%Computation of dodo=sqrt(Efs/Emp);%Creation of the random Sensor Networkfigure(1);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;S(i).G=0;%initially there are no cluster heads only nodes S(i).type='N'; %普通节点S(i).E=Eo;S(i).ENERGY=0;plot(S(i).xd,S(i).yd,'k.');hold on;endS(n+1).xd=sink.x;S(n+1).yd=sink.y;plot(S(n+1).xd,S(n+1).yd,'red p');%First Iterationfigure(2);%counter for CHscountCHs=0;%counter for CHs per roundrcountCHs=0;cluster=1;countCHs;rcountCHs=rcountCHs+countCHs;flag_first_dead=0;for r=0:1:rmax %主循环,每次1轮r%Operation for epochif(mod(r, round(1/p) )==0)for i=1:1:nS(i).G=0;endendhold off;%Number of dead nodesdead=0;%Number of dead Advanced Nodesdead_a=0;%Number of dead Normal Nodesdead_n=0;%counter for bit transmitted to Bases Station and to Cluster Heads packets_TO_BS=0;packets_TO_CH=0;%counter for bit transmitted to Bases Station and to Cluster Heads %per roundPACKETS_TO_CH(r+1)=0;PACKETS_TO_BS(r+1)=0;for i=1:1:n%checking if there is a dead nodeif (S(i).E<=0)plot(S(i).xd,S(i).yd,'red o');hold on;dead=dead+1;endif S(i).E>0S(i).type='N';endendif (dead == n)%节点全部死亡退出循环break;STATISTICS(r+1).DEAD=dead;DEAD(r+1)=dead;DEAD_N(r+1)=dead_n;DEAD_A(r+1)=dead_a;%When the first node diesif (dead==1)if(flag_first_dead==0)first_dead=rflag_first_dead=1;endendcountCHs=0;cluster=1;for i=1:1:nif(S(i).E>0)temp_rand=rand;if ( (S(i).G)<=0) %如果该节点在候选集合中%Election of Cluster Headsif( temp_rand <= (p/(1-p*mod(r,round(1/p)))))countCHs = countCHs+1;S(i).type = 'C';S(i).G = round(1/p)-1;C(cluster).xd = S(i).xd;C(cluster).yd = S(i).yd;distance=sqrt( (S(i).xd-(S(n+1).xd) )^2 +(S(i).yd-(S(n+1).yd) )^2 );%到sink距离C(cluster).distance = distance;C(cluster).id = i;X(cluster)=S(i).xd;Y(cluster)=S(i).yd;cluster=cluster+1;%%广播自成为簇头distanceBroad = sqrt(xm*xm+ym*ym);if (distanceBroad > do)S(i).E = S(i).E- ( ETX * ctrPacketLength + Emp* ctrPacketLength*( distanceBroad*distanceBroad*distanceBroad*distanceB road ));%广播自成为簇头elseS(i).E = S(i).E- ( ETX * ctrPacketLength + Efs * ctrPacketLength*( distanceBroad*distanceBroad));end%Calculation of Energy dissipated 簇头自己发送数据包能量消耗distance;if (distance > do)S(i).E = S(i).E- ( (ETX+EDA)*(packetLength) + Emp * packetLength*( distance*distance*distance*distance ));elseS(i).E = S(i).E- ( (ETX+EDA)*(packetLength) + Efs * packetLength*( distance * distance ));endpackets_TO_BS = packets_TO_BS+1;PACKETS_TO_BS(r+1) = packets_TO_BS;endendendendSTATISTICS(r+1).CLUSTERHEADS = cluster-1;%统计第r轮簇头数目,r是从0开始的,所以加1;cluster最后要-1,是应为上面的循环多加了1CLUSTERHS(r+1)= cluster-1;%Election of Associated Cluster Head for Normal Nodesfor i=1:1:nif ( S(i).type=='N' && S(i).E>0 ) %普通节点% min_dis = sqrt( (S(i).xd-S(n+1).xd)^2 + (S(i).yd-S(n+1).yd)^2 );%默认距离是到sink的距离min_dis =+inf;if(cluster -1 >= 1)%如果有簇头存在min_dis_cluster = 1;%加入最近的簇头for c = 1:1:cluster - 1 %簇头数量一共是cluster - 1%temp = min(min_dis,sqrt( (S(i).xd - C(c).xd)^2 + (S(i).yd - C(c).yd)^2 ) );temp = sqrt( (S(i).xd - C(c).xd)^2 + (S(i).yd - C(c).yd)^2 );if ( temp < min_dis )min_dis = temp;min_dis_cluster = c;end%接收簇头发来的广播的消耗S(i).E = S(i).E - ETX * ctrPacketLength;end%Energy dissipated by associated Cluster Head普通节点发送数据包到簇头消耗,和加入消息min_dis;if (min_dis > do)S(i).E = S(i).E - ( ETX*(ctrPacketLength) + Emp * ctrPacketLength*( min_dis * min_dis * min_dis * min_dis)); %向簇头发送加入控制消息S(i).E = S(i).E - ( ETX*(packetLength) +Emp*packetLength*( min_dis * min_dis * min_dis * min_dis)); %向簇头数据包elseS(i).E = S(i).E - ( ETX*(ctrPacketLength) +Efs*ctrPacketLength*( min_dis * min_dis)); %向簇头发送加入控制消息S(i).E = S(i).E - ( ETX*(packetLength) +Efs*packetLength*( min_dis * min_dis)); %向簇头数据包endS(i).E = S(i).E - ETX*(ctrPacketLength); %接收簇头确认加入控制消息%Energy dissipated %簇头接收簇成员数据包消耗能量,接收加入消息和和确认加入消息if(min_dis > 0)S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E - ( (ERX + EDA)*packetLength ); %接受簇成员发来的数据包S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E - ERX *ctrPacketLength ; %接收加入消息if (min_dis > do)%簇头向簇成员发送确认加入的消息S(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E - ( ETX*(ctrPacketLength) + Emp * ctrPacketLength*( min_dis * min_dis * min_dis * min_dis));elseS(C(min_dis_cluster).id).E = S(C(min_dis_cluster).id).E - ( ETX*(ctrPacketLength) + Efs * ctrPacketLength*( min_dis * min_dis));endPACKETS_TO_CH(r+1) = n - dead - cluster + 1; %所有的非死亡的普通节点都发送数据包endS(i).min_dis = min_dis;S(i).min_dis_cluster = min_dis_cluster;endendendcountCHs;rcountCHs = rcountCHs + countCHs;[vx,vy]=voronoi(X,Y);plot(X,Y,'red *',vx,vy,'g -');hold on;voronoi(X,Y);axis([0 xm 0 ym]);endfor i=1:1:nif (S(i).E>0)plot(S(i).xd,S(i).yd,'k.');hold on;plot(S(n+1).xd,S(n+1).yd,'rp');endendfor i=1:1:nif (S(i).E<=0)plot(S(i).xd,S(i).yd,'r.');hold on;endendfigure(3);x=1:1:r;y=1:1:r;z=1:1:r;for i=1:r;x(i)=i;y(i) = n - STATISTICS(i).DEAD;z(i)=CLUSTERHS(i);endplot(x,y,'r',x,z,'b');legend('存活的节点数','被选取为簇头的节点数')hold on;结果:结果分析:在MATLAB编程环境中首先产生一个200×200的区域,并在其内部随机生成一个含有1200个节点(坐标不同)的连通图,而且随机选择100*m个节点作为高级节点。

相关主题