发明名称 一种多对一分簇无线传感器网络环境下节点睡眠调度方法
摘要 本发明公开了一种多对一分簇无线传感器网络环境下节点睡眠调度方法,包括1、网络初始化;2、获取无线传感器网络的数据聚合树,得到路由矩阵R;3、确定簇头节点的周期运行方法,构建基于能耗的跨层优化模型,获取每一个簇头节点的睡眠调度方法;4、开始运行,向父节点上传数据;5、当每个节点进入睡眠状态之前,获取该节点下一次的节点睡眠调度方法;6、判断簇头节点的能量是否耗尽;7、如果骨干网络中有簇头节点能量耗尽,采用路由查找算法,判断当前剩余的骨干网络节点是否能够重新构建数据聚合树,若能够重新构建数据聚合树,则返回步骤2,否则结束。本发明最大程度的减少节点状态转换的次数,避免了空闲侦听的能量损耗。
申请公布号 CN102946626B 申请公布日期 2014.11.05
申请号 CN201210464455.X 申请日期 2012.11.16
申请人 北京航空航天大学 发明人 徐桢;侯宏宇;张涛
分类号 H04W40/04(2009.01)I;H04W52/02(2009.01)I;H04W84/18(2009.01)I 主分类号 H04W40/04(2009.01)I
代理机构 北京永创新实专利事务所 11121 代理人 赵文利
主权项 一种多对一分簇无线传感器网络环境下节点睡眠调度方法,包括以下几个步骤:步骤1:进行网络初始化;对无线传感器网络环境进行初始化,完成网络中节点的部署、分簇,部署后,得到节点分布信息,分簇后,每个簇内有一个簇头节点,所有簇头节点构成骨干网络;设定数据聚合树中SINK节点的编号为1,骨干网络节点的编号在节点部署时随机分配;步骤2、根据路由查找算法,获取无线传感器网络的数据聚合树,得到路由矩阵R;将骨干网络节点分布信息作为输入,根据路由查找算法,得到适应于无线传感器网络的数据聚合树,树的顶点为SINK节点,根据数据聚合树得到路由矩阵R;根据路由矩阵R,获取父节点矩阵FN、子节点矩阵CN、层矩阵L、兄弟矩阵BN,具体为:路由矩阵R为:<img file="FDA0000555890610000011.GIF" wi="806" he="313" />其中<img file="FDA0000555890610000012.GIF" wi="724" he="238" />其中:N表示N个骨干网络中簇头节点的数量,r<sub>ij</sub>表示簇头节点i到簇头节点j的链路通断情况;父节点矩阵FN:簇头节点i的父节点编号用fn<sub>i</sub>表示,则父节点矩阵为:FN=[fn<sub>1</sub> fn<sub>2</sub>…fn<sub>N</sub>];若簇头节点j是簇头节点i的父节点,路由矩阵中r<sub>ij</sub>=1,则fn<sub>i</sub>=j,若簇头节点i没有父节点则fn<sub>i</sub>为0;子节点矩阵CN:簇头节点i的子节点编号用<img file="FDA0000555890610000013.GIF" wi="74" he="85" />表示,<img file="FDA0000555890610000014.GIF" wi="80" he="85" />中各个子节点的编号按递增顺序排列,则子节点矩阵为<img file="FDA0000555890610000015.GIF" wi="612" he="110" />没有子节点的位置和其他空余位置均补0;根据路由矩阵R,若簇头节点j是簇头节点i的子节点,有r<sub>ij</sub>=‑1,则<img file="FDA0000555890610000016.GIF" wi="178" he="80" />层矩阵L:簇头节点i在数据汇聚树中的层数用L<sub>i</sub>表示,即L=[L<sub>1</sub> L<sub>2</sub>…L<sub>N</sub>];其中,设定sink节点编号为1,位于第一层,即L<sub>1</sub>=1;根据子节点矩阵,获得每个簇头节点的子节点,若一个簇头节点的层数为l,则其子节点的层数为l+1,以此类推,得到所有节点的层数;兄弟节点矩阵BN:簇头节点i的兄弟节点编号用<img file="FDA0000555890610000021.GIF" wi="76" he="84" />表示,<img file="FDA0000555890610000022.GIF" wi="85" he="84" />中各个兄弟节点的编号按递增顺序排列,即<img file="FDA0000555890610000023.GIF" wi="622" he="110" />没有兄弟节点的位置和其他空余位置均补0;根据父节点矩阵和子节点矩阵,每个簇头节点获得与该节点有着相同父节点的所有子节点编号,即为该节点的兄弟节点编号;步骤3、确定簇头节点的周期运行方法,构建基于能耗的跨层优化模型,获取每一个簇头节点的睡眠调度方法;(1)确定簇头节点的周期运行方法;每个簇头节点的运行方法为:1、簇头节点处于睡眠状态,当簇头节点需要收发数据时,将簇头节点由睡眠状态切换至工作状态;簇头节点的状态转换时间为:父节点比第一个子节点晚唤醒ΔT,保证父节点可以开始收子节点数据的时候,该子节点已经准备好发送数据;兄弟节点之间,后面的子节点要依次比前一个子节点晚唤醒Δt,保证在前一个子节点完成发送数据后,该子节点恰好准备好向父节点发送数据;2、簇头节点收集簇内数据;簇头节点收集簇内节点在一个周期内的感知数据;簇内节点在对应簇头节点开始工作后,将一个周期内感知的数据上传给簇头节点,由簇头节点经由骨干网络的数据聚合树将数据汇聚到SINK节点;3、如果簇头节点有子节点,则簇头节点收集子节点数据;骨干网络中簇头节点收集数据聚合树中其子节点的数据;4、簇头节点向父节点发送数据;骨干网络簇头节点收集数据完毕之后,经过数据聚合,将自己存储的数据上传给父节点,子节点向父节点发送数据之前,要和父节点进行同步,周期性的向父节点发送同步请求包,得到父节点确认包后,再开始数据发送;数据发送完毕后,子节点需要等待父节点发送的反馈包,来判断数据是否发送成功,若本次数据发送失败,存储数据,等待簇头节点下一次唤醒时优先重新发送本次数据;5、簇头节点进入睡眠;骨干网络簇头节点完成数据的收集与发送工作后,将节点切换为睡眠状态;(2)构建基于能耗的跨层优化模型;1、获取参数:丢包率矩阵P为:<img file="FDA0000555890610000031.GIF" wi="873" he="313" />当r<sub>ij</sub>=0时,p<sub>ij</sub>=0其中:p<sub>ij</sub>表示簇头节点i到簇头节点j的链路上的丢包率;数据传输率矩阵F为:<img file="FDA0000555890610000032.GIF" wi="870" he="312" />当r<sub>ij</sub>=0时,f<sub>ij</sub>=0其中:f<sub>ij</sub>表示簇头节点i到簇头节点j的链路上的数据传输率;能耗矩阵E为:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>E</mi><mo>=</mo><msub><mrow><mo>[</mo><msub><mi>E</mi><mi>ij</mi></msub><mo>]</mo></mrow><mrow><mi>N</mi><mo>&times;</mo><mi>N</mi></mrow></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>3</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>4</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>5</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mo>&CenterDot;</mo><mn>6</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>E</mi><mn>11</mn></msub></mtd><mtd><msub><mi>E</mi><mn>12</mn></msub></mtd><mtd><msub><mi>E</mi><mn>13</mn></msub></mtd><mtd><msub><mi>E</mi><mn>14</mn></msub></mtd><mtd><msub><mi>E</mi><mn>15</mn></msub></mtd><mtd><msub><mi>E</mi><mn>16</mn></msub></mtd></mtr><mtr><mtd><msub><mi>E</mi><mn>21</mn></msub></mtd><mtd><msub><mi>E</mi><mn>22</mn></msub></mtd><mtd><msub><mi>E</mi><mn>23</mn></msub></mtd><mtd><msub><mi>E</mi><mn>24</mn></msub></mtd><mtd><msub><mi>E</mi><mn>25</mn></msub></mtd><mtd><msub><mi>E</mi><mn>26</mn></msub></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>3</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>4</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>5</mn></mrow></msub></mtd><mtd><msub><mi>E</mi><mrow><mi>N</mi><mn>6</mn></mrow></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000555890610000033.GIF" wi="1756" he="324" /></maths>其中:i表示簇头节点编号,j表示节点的能量属性编号,E<sub>i1</sub>表示簇头节点i的状态转换能耗;E<sub>i2</sub>表示簇头节点i的收簇内数据的能耗;E<sub>i3</sub>表示簇头节点i的收子节点数据的能耗;E<sub>i4</sub>表示簇头节点i的发送数据的能耗;E<sub>i5</sub>表示簇头节点i的睡眠能耗;E<sub>i6</sub>表示簇头节点i的数据处理能耗;第i个节点的能耗为<img file="FDA0000555890610000041.GIF" wi="256" he="148" />所有节点的总能耗为<img file="FDA0000555890610000042.GIF" wi="356" he="148" />睡眠调度矩阵T:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>T</mi><mo>=</mo><msub><mrow><mo>[</mo><msub><mi>t</mi><mi>ij</mi></msub><mo>]</mo></mrow><mrow><mi>N</mi><mo>&times;</mo><mn>4</mn></mrow></msub><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>t</mi><mrow><mo>&CenterDot;</mo><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mo>&CenterDot;</mo><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mo>&CenterDot;</mo><mn>3</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mo>&CenterDot;</mo><mn>4</mn></mrow></msub></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><msub><mi>t</mi><mn>11</mn></msub></mtd><mtd><msub><mi>t</mi><mn>12</mn></msub></mtd><mtd><msub><mi>t</mi><mn>13</mn></msub></mtd><mtd><msub><mi>t</mi><mn>14</mn></msub></mtd></mtr><mtr><mtd><msub><mi>t</mi><mn>21</mn></msub></mtd><mtd><msub><mi>t</mi><mn>22</mn></msub></mtd><mtd><msub><mi>t</mi><mn>23</mn></msub></mtd><mtd><msub><mi>t</mi><mn>24</mn></msub></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd><mtd><mo>.</mo></mtd></mtr><mtr><mtd><msub><mi>t</mi><mrow><mi>N</mi><mn>1</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mi>N</mi><mn>2</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mi>N</mi><mn>3</mn></mrow></msub></mtd><mtd><msub><mi>t</mi><mrow><mi>N</mi><mn>4</mn></mrow></msub></mtd></mtr></mtable></mfenced></mrow>]]></math><img file="FDA0000555890610000043.GIF" wi="1098" he="311" /></maths>其中:i表示簇头节点编号,j表示节点的时间属性编号,t<sub>i1</sub>表示簇头节点i的下次唤醒的时间;t<sub>i2</sub>表示簇头节点i的下次收簇内数据的时间;t<sub>i3</sub>表示簇头节点i的下次收子节点数据的时间;t<sub>i4</sub>表示簇头节点i的下次发送数据的时间;数据聚合率矩阵AG:簇头节点i的数据聚合率为ag<sub>i</sub>,即AG=[ag<sub>1</sub> ag<sub>2</sub>…ag<sub>N</sub>];基本功耗:状态转换一次能耗为E<sub>change</sub>,进行一次数据聚合的能耗为E<sub>agg</sub>,发送数据功耗为P<sub>send</sub>,接收数据功耗为P<sub>rec</sub>,空闲侦听功耗为P<sub>idle</sub>,睡眠功耗为P<sub>sleep</sub>;反馈矩阵FB:簇头节点i上一次发送数据的反馈情况用fb<sub>i</sub>表示,当需要重新发送数据时,fb<sub>i</sub>记录为需要重新发送的数据量;初始化时fb<sub>i</sub>均为0;FB=[fb<sub>1</sub> fb<sub>2</sub> fb<sub>3</sub>…fb<sub>N</sub>],其中<img file="FDA0000555890610000044.GIF" wi="841" he="167" />由于节点i向父节点发送数据的丢包率为<img file="FDA0000555890610000045.GIF" wi="128" he="82" />故fb<sub>i</sub>=S<sub>send,i</sub>的概率为<img file="FDA0000555890610000046.GIF" wi="129" he="82" />S<sub>send,i</sub>表示节点i本次需要重新发送的数据量;当节点i的数据发送成功时,节点i将收到反馈信息ACK,则fb<sub>i</sub>=0;当节点i的数据发送失败时,节点i将收到反馈信息NAK或者收不到反馈信息,则fb<sub>i</sub>=S<sub>send,i</sub>,其中,S<sub>send,i</sub>表示节点i本次需要重新发送的数据量;设定其他参数:t<sub>brc_i</sub>表示簇头节点i可以开始接收子节点数据的时刻;t<sub>bs_i</sub>=t<sub>i1</sub>+t<sub>i2</sub>+t<sub>i3</sub>表示簇头节点i可以开始向父节点发送数据的时刻;S<sub>SYN</sub>表示SYN包的大小;S<sub>ACK</sub>表示ACK包的大小;S<sub>FB</sub>表示FB包的大小;
地址 100191 北京市海淀区学院路37号