发明内容
本发明的目的在于提供一种实现无线传感器网络查询的方法,采用该方法能够减小全网络范围内控制信号的开销。
本发明提供一种实现无线传感器网络查询的方法,包括以下步骤:A、传感器网络中的节点接收用户设定的查询请求,所述查询请求至少包括查询区域和查询任务;B、由处于所述查询区域内的节点组成簇结构,该簇结构的簇头融合由其簇成员收集的与所述查询任务相关的感知数据;C、将所述融合后的感知数据返回至所述用户。
所述查询的方法,其中,所述步骤B包括:B1、传感器网络中的节点向其邻居节点发送路由广播包;B2、获取其邻居节点的路由广播包,建立最小路由树、计算链路估计以及管理邻居表;B3、获取本节点地址,判断本节点是否属于查询区域,若为是,转入步骤B4;B4、属于所述查询区域的节点组成所述簇结构;B5、所述簇结构的簇成员将与所述查询任务相关的感知数据传输到所述簇头。
所述查询的方法,其中,所述查询请求中包括预设数值,所述步骤B4包括:B40、对所述预设数值进行修正;B41、生成一个随机数,设定比较标准,比较所述预设数值和随机数,根据比较结果选出候选簇头;若有候选簇头,转入步骤B42;若无候选簇头,选择未收到簇头声明的节点作为簇头,跳转步骤B43;B42、判断所述候选簇头是否收到簇头声明,若为否,选择通信代价最大的候选簇头作为簇头;B43、所述簇头广播簇头申明,非簇头节点选择通信质量最好的簇头作为其父节点,向簇头发送成员消息包,组成所述簇结构。
所述查询的方法,其中,所述查询请求还包括用于控制簇头选举的速度的预设参数,所述步骤B40为:计算所述预设参数与预设数值的乘积,并将所述乘积赋值给所述预设数值。
所述查询的方法,其中,所述步骤B40包括以下步骤:B401、获取本节点初始电量和剩余电量,用剩余电量和初始电量的比值计算电量指标;B402、将所述电量指标与预设数值的乘积赋予所述预设数值。
所述查询的方法,其中,所述查询请求还包括查询时间;当所述查询时间开始时,执行步骤B;当所述查询时间结束时,执行所述步骤C,并撤销所述簇结构。
本发明的另一个目的在于提供一种能够避免产生路由回路的实现无线传感器网络数据传回的方法。
本发明还提供一种实现无线传感器网络数据传回的方法,包括以下步骤:S1、传感器网络中选出簇头后,所述簇头广播簇头申明,并在其邻居节点中选择一个节点成为网关节点;S2、收到所述簇头申明后,判断本节点是否是所述网关节点,若为否,则本节点作为候选簇成员;若是所述网关节点,则被禁止加入任何簇头;S3、候选簇成员选择一个簇头加入,组成簇结构;S4、所述簇结构的簇头融合簇成员收集的感知数据,将融合后的感知数据返回基站。
所述数据传回的方法,其中,所述步骤S3包括以下步骤:S31、判断所述簇头是否已找到所述网关节点,若为是,则该簇头成为所述候选簇成员的候选父节点;S32、所述候选簇成员在所述候选父节点中选择一个簇头并加入其中,成为该簇头的正式簇成员,组成簇结构。
所述数据传回的方法,其中,所述步骤S4包括以下步骤:S41、所述簇结构中的簇头融合由簇成员收集的感知数据;S42、将融合后的感知数据传递至所述网关节点;S43、选择下一跳节点将所述感知数据路由至基站。
所述数据传回的方法,其中,所述步骤S43包括以下步骤:S431、判断所述网关节点的邻居节点是否属于所述簇结构,若为否,则该邻居节点作为所述网关节点的候选下一跳节点;S432、在所述候选下一跳节点中选择一个节点作为所述网关节点的下一跳节点,将融合数据传递至所述下一跳节点。
本发明所提供的实现无线传感器网络查询的方法,采用在设定查询区域控制组簇的范围,实现减少不必要的数据和控制信号的能量开销;本发明所提供的实现无线传感器网络数据传回的方法,由于禁止网关节点加入任何簇头,从而使得网关节点不会再把数据传回给原来的簇头,避免路由环路的产生;此外使用网关节点转发簇头的数据,可以在簇头和簇成员间使用同一个能量级别通信的情况下传输数据,降低了节点上运行程序的复杂程度,同时也减少了碰撞发生的概率。
具体实施方式
下面结合附图和实施例对本发明进一步说明。
本发明提供一种实现无线传感器网络查询的方法,如图2所示,包括以下步骤:
100、用户设定查询请求,所述查询请求包括在传感器网络中的查询区域和查询任务;
在用户想查询某一块指定区域的数据时,用户向基站发送查询请求,查询请求中包括查询任务、查询区域、用于预设数值、预设参数、能量门限值、查询时间、查询模式、采样间隔、数据融合方式等属性。
基站收到查询请求后,首先,认证并分析查询请求;接着,为每一个查询分配一个唯一的标识(ID)号,用户可以根据这个标识号修改查询参数或删除查询;然后,基站将该查询请求生成查询包,通过无线接口洪泛到整个网络。
200、传感器网络中的节点接收用户设定的所述查询请求,由处于所述查询区域内的节点组成簇结构,该簇结构的簇头融合由其簇成员收集的与所述查询任务相关的感知数据;如图3所示,本步骤主要通过以下步骤实现:
210、拓扑结构参见图4,传感器网络中的节点收到所述查询请求6的同时,向其邻居节点发送路由广播包5;路由广播包5的内容包括本节点的地址、本节点的父节点地址、本节点跳数、序列号、邻居节点的接收链路估计以及候选簇头代价等内容。
220、每个节点获取其邻居节点的路由广播包,进行建立最小路由树、计算链路估计以及管理邻居表;
最小路由树是用于对整个网络进行划分层次。最小路由树的建立是利用路由广播包中的跳数信息:最初基站的跳数被设置成0,其余节点都设置成255;在建立最小路由树的过程中,每个节点的跳数都设置成为它所能收到最小跳数加上1,如此按照跳数信息对整个网络进行有层次的划分。
链路估计是用来表示节点间的通信质量的表征量,分为发送链路估计(receiveEst)和接收链路估计(sendEst)。发送链路估计(receiveEst)采用指数加权移动平均估计器(Exponentially Weighted Moving Average,EWMA)计算得来。假设时间序列为y1,y2,…,yt…,则指数加权移动平均的公式为:
其中,St (1)为第t周期的指数移动平均值;α为加权系数,0<α<1。用上述指数加权移动移动平均值进行预测估计,其预测估计模型为:
即以第t时刻的指数加权移动平均值作为第t+1时刻的预测值。从公式2中可看出α的取值实际上体现了新样本值与原平滑值之间的比例关系,α越大,当前的信息就越重要。α=1时,t时刻滑动值就等于t时刻样值本身,即以现在的信息为重,而不考虑以往的影响。以接收节点成功接收到发送节点路由广播包的概率rpRev作为观察值,接收链路估计(receiveEst)定义为它的估计值,其计算方法如下:
receiveEST=a*rpRev+(1-a)receiveESThis (4)
公式3中missed是丢失的路由广播包的数量,其计算方法如下:当每个节点发送自己的路由广播包时,给每个路由广播包生成一个连续的序列号(Seqno)。收到路由广播包的节点将之与上一次收到该节点发送的路由广播包的序列号(lastSeqno)相比,即可以得出丢失的路由广播包数量。公式4中receiveESThis是上一时刻的接收链路估计。节点将邻居节点的接收链路估计存储到路由广播包中发送出去,则其接收链路估计值就是发送节点的发送链路估计值。依此互相广播,则所有节点通过解析邻居节点的路由广播包可以得知自己的发送链路估计值。
邻居表管理是簇头选举和路由选择的依据,本实施方式中的邻居表管理分为插入、更新和清空操作。其具体过程如下:假设当前有节点M与节点N,当节点M接收到节点N的路由广播包时,节点M的邻居表管理模块首先检查节点N是否已经在节点M的邻居表中,若是,则在节点M的邻居表中执行更新操作,更新节点N的信息。如果节点N不在节点M的邻居表中,则节点M的邻居表管理模块检查邻居列表的空间,如果还有空间则在节点M的邻居表中插入节点N,如果没有,则替换邻居列表中链路估计值最低的邻居节点记录,即取代通信质量最低的邻居纪录。每一轮结束后,邻居表清空重建。经过邻居表管理,每个节点记录了其邻居节点的信息。
230、获取本节点地址,判断本节点是否属于查询区域,若为是,则继续步骤240;若不是,则等待转发数据。
240、拓扑结构参见图5,属于所述查询区域的节点组成所述簇结构;本步骤包括以下步骤,如图6所示:
241、获取本节点的剩余电量值,判断所述剩余电量值是否小于所述电量门限值,若为否,则执行步骤242;若为是,则失去成为簇头的机会,因为传感器网络中传感器节点体积微小、采用有限能量的电池供电,计算能力和通信能力都很有限,如此可以保证不会有电量太少的节点成为簇头,以避免能量过少的节点耗尽自己的能量;
242、判断本节点的邻居表中是否已存在簇头,若为否,则执行步骤243;若为是,这个节点也失去成为簇头的机会;此步骤可避免簇头分布过密集而不均匀,能够减小簇之间的重叠;
243、用电量指标修正预设参数,即,获取节点剩余电量和初始电量,计算剩余电量和初始电量的比值,再将所述比值与预设数值的乘积赋予所述预设数值;此方法可以使得具有更多的剩余能量,与邻居节点的通信质量更好的节点更有可能被选为簇头;
244、用预设参数对预设数值进行修正,用户可以在查询请求中设定预设参数,计算所述预设参数与预设数值的乘积,并将所述乘积赋值给所述预设数值。此修正方法中的预设参数用于控制算法收敛的速度,即簇头选举的速度,收敛方向根据下一步骤中的选择标准的不同而不同,例如选择随机数大于预设数值的作为候选簇头,那么所述预设参数的值越大,算法收敛的越快。
245、生成一个随机数,比较所述随机数是否小于所述预设数值,若为否,则本节点作为候选簇头,并广播成为候选簇头的申明消息,执行步骤246;若为是,则循环步骤244,当该循环结束时,选择未收到簇头声明的节点作为簇头;这样可以避免某块区域没有任何簇头可以加入的情况;此步骤可避免簇头分布过稀疏而不均匀。作为本步骤的替代,还可以选择随机数小于预设数值的作为候选簇头,相应地,步骤243中可以用初始电量和剩余电量的比值进行修正,以期上述相应的效果能够得到确保;
246、判断所述候选簇头是否收到簇头声明,若为否,则选择通信代价最大的候选簇头作为簇头;所述通信代价(tent_CH_Cost)的意义是指如果本节点成为簇头,其与周围所有邻居节点的通信代价,其计算方法如下:
其中,j是节点i的邻居节点,Emax是节点初始电量,Ere是节点的剩余电量。从公式5中可以看出,被选为簇头的节点具有更多的剩余能量,与邻居节点的通信质量更好。
以上选举簇头算法的伪代码如表1所示:
表1
1. If My_ID is not in query area Return;2. If(Ere<ET)Return;3. If CH_Set is not empty{4. joinClusterHead();5. Return;6. }7. p=Pinit*(Ere/Emax);8. If(random(0,1)<p){9. My_state=Tent_CH;10. Broadcast(My_ID,Tent_CH,tent_CH_Cost);11. Add(My_ID,tent_CH_Cost)into tent_CH_Set,Neighbor_Set;12.else13. My_state=Non_CH;14.do{15. p=k*p;16. If CH_Set is empty&&p>=1&&My_state==Non_CH17. Broadcast(My_ID,CH);18. My_state=CH;19. If My_state==Tent_CH{20 If CH_Set is not empty21 break;22 else{23. MaxID=the Max tent_CH_Cost in Neighbor_Set;24. If My_ID is the MaxID and p>=1 |
25. Broadcast(My_ID,CH);26. My_state=CH;27. }28. }while(p<1)29.} |
表1中的Pinit为每个节点Si成为候选簇头的初始概率,Ere是节点目前的剩余电量,ET是预设的成为簇头最小的电量门限值。代码的主体是一段循环代码,代码的第1行表示只有在查询区域的节点才参与组簇。第2行是指在循环开始前,每个节点要先判断自己的剩余电量时候是否大于最小的电量门限值,如果小于门限则失去成为簇头的机会。3-6行表示节点首先会判断自己的簇头表中是否已经有簇头的记录,即在自己的邻居节点中是否已有簇头,如果有则调用加入簇头的函数,节点也失去成为簇头的机会。7-13行表示节点生成一个随机数,只有当该随机数小于事先设定的概率p时,该节点才会成为候选簇头,然后广播成为候选簇头的申明消息。14-28行是一段循环运行的迭代算法,k的值表示算法收敛的速度,k取的值越大,算法收敛的越快。其中16-18行表示当循环结束时,还没有收到任何成为簇头申明的节点自动成为簇头,这样不会出现某块区域没有任何簇头可以加入的情况。22-26行则表示如果候选簇头一直没有收到其它节点成为簇头的申明消息,则在迭代结束时,候选簇头代价最大的候选簇头成为正式簇头。
采用以上的簇头选举方法,能够减少簇之间的重叠,降低相邻簇中节点间通信发生碰撞的概率。这解决了目前有些的协议中存在的簇头分布不均匀的现象,例如,LEACH(Low energy adaptive clustering hierarchy,低能耗自适应分簇)协议,因为其簇头选举完全是随机分布,会造成簇头分布不均匀的现象:在某一块区域选出的簇头分布过于集中,节点间通信发生碰撞的可能性增加,而在另一区域内的节点则找不到可以加入的簇头。
247、簇头广播簇头申明,非簇头节点选择通信质量最好的簇头作为其父节点,向簇头发送成员消息包,组成所述簇结构。
300、将所述感知数据返回至所述用户,撤销所述簇结构。
在上述实施方式加入以下改进作为另一种实施方式:所述查询请求还包括查询时间;当所述查询时间开始时,执行步骤200;当所述查询时间结束时,执行所述步骤300。这是为了使得传感器网络中的节点周期地进行收集和返回感知数据,提高感知数据的实时性。
本发明还提供一种实现无线传感器网络数据传回的方法,如图7所示,包括以下步骤:
400、传感器网络中选出簇头;
500、所述簇头广播簇头申明,并在其邻居节点中选择一个节点成为网关节点;拓扑结构如图8所示,候选簇头成为簇头2后,在其邻居节点中选择一个节点成为网关节点7,并广播其成为簇头的申明消息;接收到簇头申明的节点将该簇头2添加到簇头表。
600、收到所述簇头申明后,判断本节点是否是所述网关节点,若为否,则本节点作为候选簇成员;若为是,则禁止本节点加入任何簇头。这是为了避免网关节点再把感知数据传回给原来的簇头而产生路由环路。
700、候选簇成员加入所述簇头,组成簇结构;本步骤包括以下步骤:
710、判断所述簇头是否已找到网关节点,若为是,则所述候选簇成员将该簇头作为其候选父节点;即,还没有找到网关节点的簇头不能进行组簇,这也是为了避免网关节点再把感知数据传回给原来的簇头而产生路由环路,如果簇头先进行组簇后再选择网关节点,这就可能存在网关节点再把感知数据传回给原来的簇头。
720、在所述候选父节点中选择最大发送链路估计的簇头加入,成为该簇头的正式簇成员,组成簇结构。
以上选择簇头加入的伪代码如表2所示:表2
1.If My_state==Gateway Return;2.For each Ci in CH_Set{3. If Ci->parent==NULL continue;4. Choose the best CH with the max sendEST;5.} |
表2中Ci是节点簇头表中记录的簇头。代码的第1行表示网关节点不会再加入任何簇头。第3行是指如果这个簇头还没有找到网关节点的则不会选其成为父节点。第4行是在符合条件的簇头中选择有最大发送链路估计的簇头作为自己的父节点。
800、所述簇结构的簇头融合簇成员收集的感知数据,将融合后的感知数据返回基站。本步骤由以下步骤实现:
810、所述簇结构中的簇头融合由簇成员收集的感知数据;
820、将融合后的感知数据传递至所述网关节点;
830、选择下一跳节点将所述感知数据路由至基站。数据路由回基站3的拓扑结构见图9,簇头2完成数据融合操作后,通过网关节点7将融合后的数据传出查询区域4,网关节点7和查询区域外4的普通节点也会周期性的选出自己的下一跳节点。其选择的依据是:在邻居节点中选择跳数最小的节点,如果跳数相同则选择发送链路估计最大的节点作为其下一跳节点。
本步骤包括以下两个步骤:
831、判断所述网关节点的邻居节点是否属于所述簇结构,若为否,则该邻居节点作为所述网关节点的候选下一跳节点;
832、在所述候选下一跳节点中选择一个节点作为所述网关节点的下一跳节点,将融合数据传递至所述下一跳节点。本步骤是在所述候选下一跳节点中选择跳数最小的节点作为所述网关节点的下一跳节点,如果所述候选下一跳节点中存在跳数相同的节点,在跳数相同的节点中选择发送链路估计最大的节点,作为所述网关节点的下一跳节点。
选择下一跳节点的伪代码见表3:表3
1.For each Si in Neighbor_Set{2. If My_state==Gateway and Si->parent==My_child continue;3. If Si->parent==My_ID continue;4. If Si->parent==NULL continue;5. Choose parent with the min hop or the max sendEST with the same hop;6.} |
表3中的Si表示节点邻居表中记录的邻居节点。代码的第2行表示网关节点不会选择原来簇中成员成为自己的下一跳节点,第3行的作用是不会选原来的簇头成为自的下一跳节点,它们都是用来避免网关节点与原簇头之间可能会产生的路由回路。第5行意思是在自己的邻居表中选择跳数最小的邻居节点作为下一跳节点,若跳数相同时选择发送链路估计最大的节点作为下一跳节点。
以上使用网关节点转发簇头的数据,可以在簇头和簇成员间使用同一个能量级别通信的情况下传输数据,降低了节点上运行程序的复杂程度,同时也减少了碰撞发生的概率。
图10是本发明的一个实施例。在图中显示的当前时刻,查询区域中的第35号节点被选为簇头,第30,34,37号节点将自己的数据上报给该簇头,然后簇头将数据传到作为网关节点的第14号节点,最后传回给基站即0号节点。
图11是当节点的通信距离更小一些时的实施例。从图中可以看出,当节点的通信距离降低后,查询区域选出了三个簇头才能覆盖整个查询区域,它们分别是第一簇头第30号节点、第二簇头第31号节点、第三簇头第39号节点,同样查询区域的数据需要更多跳数的传递才能路由回到基站。第35号节点成为第一簇头的网关节点,第26号节点是第二簇头的网关节点,第号33节点是第三簇头的网关节点。查询区域的数据最终汇集到第二簇头即第31号节点,然后经过第26号节点——>第31号节点——>第3号节点——>第1号节点——>第0号节点的顺序路由回基站。
以上使用网关节点转发簇头的数据,可以在簇头和簇成员间使用同一个能量级别通信的情况下传输数据,降低了节点上运行程序的复杂程度,同时也减少了碰撞发生的概率。
本发明通过灵活的查询策略控制组簇的范围,减少不必要的数据和控制信号的能量开销;采用均匀分布的簇头选举方法,减少簇之间的重叠,降低相邻簇中节点间通信发生碰撞的可能性;使用网关节点转发簇头的数据,可以在簇头和簇成员间使用同一个能量级别通信的情况下传输数据,降低了节点上运行程序的复杂程度,同时也减少了碰撞发生的概率。仿真和实验结果显示本发明能够获得较好的能量节省和性能上的提升,显示了较好的能效性、扩展性和鲁棒性。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。