发明内容
针对上述现有技术中存在的缺陷和不足,本发明的目的在于,提供一种基于信道调度的区域协作式休眠调度方法,降低节点数据源拥塞概率和额外通信开销。
为了实现上述任务,本发明采用以下技术方案:
一种基于休眠调度的数据源拥塞控制方法,该方法包括以下步骤:
步骤一,无线传感器网络节点在部署后,每个传感器节点收集其通信范围内其他节点的状态信息,并将这些信息存储在本地;
步骤二,节点根据自身信息和收集的其他节点状态信息,确定自身是否为数据爆发型节点,具体过程如下:
记Tf为数据溢出时间,其计算公式为:
Tf=Buffermax/Vdata (公式1)
计算节点转发数据时最大可能等待时间Tawake,并与Tf进行比较,如满足下面公式,则该节点为数据爆发型节点:
Tf<Tcycle-Tawake (公式2)
在公式1和公式2中,Tawake=Tcycle·Ron,Buffermax为节点自身缓存大小,Vdata为节点自身数据产生速率,Tcycle为休眠周期,Tawake为节点在每一个周期的工作时间长度,Ron为节点在休眠周期的工作时间与休眠周期的比值;
步骤三,经过步骤二的判断,非数据爆发型节点直接进入休眠调度模式,数据爆发型节点计算出所需要协调的节点个数;
步骤四,数据爆发型节点向其邻居节点发送消息,令所有邻居节点保持射频模块开启,进入同步模式,并创建环搜索请求包进行广播;
数据爆发型节点的邻居节点响应环搜索请求包,并创建自愈环寻找包进行广播,寻找适合被协调的候选节点,在该过程中,数据爆发型节点保持对无线信道的侦听,并记录找到的自愈环;
步骤五,数据爆发型节点选择数据源拥塞概率最低的一个自愈环,修改所有环成员的休眠时间,创建节点调度表,并将修改后的结果封装成环申请包进行广播;
步骤六,候选节点接收到环申请包后,若没有发现自己的ID出现在节点调度表中,则退出同步模式,进入休眠调度模式;否则,候选节点存储该节点调度表,按节点调度表中修改自己的本地时钟,并向数据爆发型节点返回确认包之后退出同步模式,进入休眠调度模式;
步骤七,数据爆发型节点接收所有环成员的确认包后,退出同步模式,进入休眠调度模式。
进一步地,步骤三的具体过程如下:
步骤30:记m为数据爆发型节点,计算节点m的数据源拥塞概率PSDC_m:
(公式3)
公式3中,x为节点m的邻居节点个数,Rf=Tf/Tcycle×100%;PD_mi为节点m和节点i之间因通信失败而造成数据源拥塞的概率的期望;
步骤31,对比节点m的数据源拥塞概率PSDC_m与数据源拥塞概率阈值Pth,如果PSDC_m≤Pth,则节点m进入休眠调度模式,结束;否则执行步骤32;
步骤32,记当前数据爆发型节点m的x个邻居的编号分别为{i0,i1,i2,...,ix};对于任意编号的邻居节点i∈{i0,i1,i2,...,ix},m节点与其通信成功率为RD_mi,令RD_mi=100%,执行步骤33;
步骤33,节点m计算需要协调的邻居节点的个数y,此时节点m的数据拥塞概率P′SDC_m为:
P′SDC_m=D1·D2 (公式4)
上式中,
在D1和D2中,x≥2,TBSP=Tawake+Tf;
当节点m的邻居节点个数x大于1时,令y=2,代入公式4中计算出P′SDC_m,执行步骤34;若x不大于1,则节点m进入休眠调度模式,结束;
步骤34,判断是否有PSDC_m>Pth,如果该式成立,则给y的值加1然后执行步骤35,否则执行步骤38;
步骤35,判断y>x是否成立,若成立,则将y的值减1,然后执行步骤37,否则执行步骤36;
步骤36,将此时的y值代入公式4,计算出P′SDC_m,然后返回步骤34;
步骤37,m节点向邻居节点发送消息,令其邻居节点的射频模块保持打开状态;
步骤38,节点m调取环估计表RET,根据当前的x值和y值进行查表搜索,获得当前环估计数QE_xy,判断QE_xy>Qth是否成立,若成立,则执行步骤39,否则,令当前的y值为y0,执行步骤四;Qth为自愈环阈值;
步骤39,将当前的y值减1,然后判断y<2是否成立,如成立,则节点m进入休眠调度模式,结束;否则执行步骤38;
进一步地,步骤四中所述的自愈环的建立过程如下:
数据爆发型节点的邻居节点响应环搜索请求包后,创建环寻找包进行广播;环寻找包若被节点转发,则该环寻找包记录此节点的ID编号;经过多次转发的环寻找包会依次记录多个节点ID编号,形成路径PATH,所有组成PATH的转发节点ID称为PATH的元素;当PATH的第一个元素与最后一个元素相同时,则表示发现自愈环,自愈环由该PATH的所有元素按照元素添加到PATH时的顺序组成;在此过程中,m节点保持对无线信道的侦听,记录找到的自愈环。
本发明给出一种数据源拥塞控制方法(DCS),DCS与传统研究调度的工作不同,传统研究调度信道的目的在于降低信息碰撞的概率,缓解信道争用的现象,并达到降低节点功耗的效果。而DCS调整节点休眠时刻的目的在于降低数据源拥塞的概率。DCS与现有技术相比具有以下技术特点:
1)本调度方法仅需要对网络中的节点进行一次协调操作,即可满足节点对数据源拥塞现象的有效控制;
2)本调度方法不需要网络统一时钟,不需要节点之间进行频繁的时间同步,不需要在网络中增加额外的同步设备或者时间基准;
3)本调度方法具有休眠次序自动复位机制,能够有效地抑制由于节点硬件差异性导致的时钟漂移问题;
4)本调度方法对数据源拥塞现象进行初步的建模分析,并提出了一种根据节点的数据产生速率、缓存大小、邻居个数、链路质量、休眠周期和工作占空比这几个参数估计数据源拥塞概率的方法,可以在一定程度上预测数据源拥塞的发生概率。
具体实施方式
传统传感网中,构成网络的节点类型单一,数据产生速率较低,对这种网络的节点统一设置较短的休眠周期和休眠占空比,可达到较好的节能效果,且不易
发生数据源拥塞问题。随着传感网的发展,在同一个网络中会有多种不同类型的节点共存,具有这种特性的网络称为异构传感网。异构传感网有多种类型,如能量异构,通信距离异构和传感器异构。本方案所讨论的网络为传感器异构网络,这种网络每个节点产生数据的速率不尽相同。若对网络中数据产生速率高的节点使用低的休眠周期,势必造成这类节点的生命周期短于其它节点,不利于整个网络的长期运行。
申请人在传感器异构的传感网络中,为了令不同数据产生速率的传感网节点获得对事件高保真度的记录,需要建立可靠的数据源拥塞控制方法,以保障节点在短时间内产生的大量数据不被丢失。本发明通过修改节点的时钟,达到的调度效果如图2所示。本发明的整体流程图如图1所示。
本发明详细步骤如下:
在整个传感器网络部署时,每个传感器位置是固定的。
步骤一,无线传感器节点在部署到网络中后,每个收集其通信范围R内其他节点的状态信息,并检测自己硬件信息,将这些信息存储在本地;记当前节点为m,其获得的信息包括以下数据:
Vdata:节点自身数据产生速率,由自身检测获得;Buffermax:节点自身缓存大小,由自身检测获得;x:邻居节点个数;RD_mn:节点m与节点n之间的通信成功率,通过监听信道获得;Tcycle:休眠周期,由于网络中每个节点的休眠周期均一致,该参数可以由该节点附近的任意一个邻居提供;Ron:节点在休眠周期的工作时间与休眠周期的比值,通过邻居节点获得;Tawake:节点在每一个周期的工作时间长度,通过邻居节点获得;Pth:数据源拥塞概率阈值,人工设定,在节点部署前存入节点中;Qth:自愈环阈值,节点被部署前存入节点;RET:环估计表,用于查询节点发布环建立请求后,该节点可能收到的自愈环的个数;该表在节点被部署前存入节点,该表使用计算机做大量统计仿真确定。当一个编号为m的节点已知存在x个邻居,且需要修改其中y个邻居的本地时钟时,m节点可通过调用RET表,得到可能收到的自愈环的个数QE_xy。如图17所示,横坐标代表邻居个数x,纵坐标代表y,颜色深度代表QE_xy的大小。
步骤二,节点根据自身信息和收集的其他节点状态信息,节点判断自身是否为数据爆发型节点:
步骤20,记Tf为数据溢出时间,其计算方法为:
Tf=Buffermax/Vdata (公式1)
步骤21,计算节点转发数据时最大可能等待时间Tawake,并与Tf进行比较,如满足下面公式,则该节点为数据爆发型节点:
Tf<Tcycle-Tawake (公式2)
其中,Tawake=Tcycle·Ron;
步骤三,经过步骤二的判断,非数据爆发型节点直接进入休眠调度模式,结束;如节点m为数据爆发型节点,则需计算出所要协调的节点个数,具体步骤如下:
步骤30:计算节点m的数据源拥塞概率PSDC_m:
(公式3)
公式3中,Rf=Tf/Tcycle×100%;
步骤31,对比节点m的数据源拥塞概率PSDC_m与数据源拥塞概率阈值Pth,如果PSDC_m≤Pth,则节点m进入休眠调度模式,结束;否则执行步骤32;
步骤32,记当前数据爆发型节点m的x个邻居的编号分别为{i0,i1,i2,...,ix};对于任意编号的邻居节点i∈{i0,i1,i2,...,ix},m节点与其通信成功率为RD_mi,令RD_mi=100%,执行步骤33;
步骤33,节点m计算需要协调的邻居节点的个数y,此时节点m的数据拥塞概率P′SDC_m为:
P′SDC_m=D1·D2 (公式4)
上式中,
在D1中,PD_mi为节点m和节点i之间因通信失败而造成数据源拥塞的概率的期望;x≥2,TBSP=Tawake+Tf;
当节点m的邻居节点个数x大于1时,令y=2,代入上式中计算出P′SDC_m,执行步骤34;若x不大于1,则节点m进入休眠调度模式,结束;
步骤34,判断是否有P′SDC_m>Pth,如果该式成立,则给y的值加1然后执行步骤35,否则计算步骤38;
步骤35,判断y>x是否成立,若成立,则将y的值减1,然后执行步骤37,否则执行步骤36;
步骤36,将此时的y值代入公式4,计算出P′SDC_m,然后返回步骤34;
步骤37,m节点持续发布同步消息,令其邻居节点的射频模块保持打开状态;
步骤38,节点m调取RET,根据当前的x值和y值进行查表搜索,获得当前环估计数QE_xy,判断QE_xy>Qth是否成立,若成立,则执行步骤39,否则,令当前的y值为y0,执行步骤四;
步骤39,将当前的y值减1,然后判断y<2是否成立,如成立,则节点m进入休眠调度模式,结束;否则执行步骤38;
y为当前节点所需修改时钟的节点个数,即需要协调节点的个数。由于本方法是通过修改节点的休眠调度时间降低数据源拥塞概率的,因此,需要确定需要协调的节点的数量,以及需要对哪个邻居进行协调。假设当前节点为m,m节点在刚被部署到网络中时,其y值为0。在m节点决定修改其编号为a和b的邻居的时钟时,a和b则称为m所需要协调的邻居节点,此时y值为2;由于本步骤有多个y的计算过程,为了使下面描述的更清楚,将本步骤最后确定出的y值记为y0。图10给出了m节点确定y0的流程。
关于休眠调度模式:
休眠调度模式是指节点运行在射频模块定时开启与关闭的一种模式,主要用于节约节点的能量。射频模块是节点硬件中主要负责无线通信的部分,由于该部分的能耗在节点的所有组成部分中是最高的,因此,当射频模块关闭时,节点的功耗最低,此时节点无法与其邻居进行通信,处于休眠状态。当休眠状态持续一段时间后,节点又会将射频模块打开,监听信道,以执行数据发送与转发的通信任务。
在网络中,节点一般处于休眠调度模式。当节点接收到同步信号时,节点会跳出休眠调度模式,进入同步模式,即保持其射频模块持续开启。当节点退出同步模式时,会进入休眠调度模式。
公式3的证明:
设节点m有且只有一个编号为n的邻居节点,二者的通信成功率为RD_mn,则有:
TBSP=Tawake+Tf (公式31)
Rl_mn=1-RD_mn (公式32)
h=Minimum(Tf,Tawake) (公式33)
(公式34)
PSDC_m=(1-TBSP/Tcycle)+PD_mn·TBSP/Tcycle (公式35)
在上式中,TBSP,R1_mn和PD_mn分别为数据爆发安全时间段、通信失败率和因通信失败导致数据源拥塞概率的期望;取一个特殊场景为例说明以上三个参数:先令两个节点AB(即节点m和n)间的通信成功率为100%,且B是A的唯一可以转发数据的邻居。A的Tf=4,节点Tawake=3。图3截取B的一个工作周期[t0,t9]进行分析,其射频模块打开的时间段为[t4,t6],若A在B射频模块打开的时间段内监测到事件,则通信链路可以立刻被建立,因此不会导致数据源拥塞。同时,A具有一定的数据存储能力,可最多持续记录4个时隙的事件,若在第5个时隙依然无法转发数据,则导致数据溢出。所以A所探测的事件在t4之前的4个时隙之内发生,都不会导致A发生数据源拥塞。因此,节点A在[t0.t6]这段时间产生爆发式数据不会造成数据源拥塞,这段时间称为数据爆发安全时间段(Burst Save Period,BSP),用TBSP表示。若事件在[t7,t9]发生,则A节点必定会发生数据源溢出现象。此时,节点A在与其候选节点的通信成功率为100%的情况下,发生数据源溢出的概率为1-TBSP/Tcycle=0.3。
显然,真实情况下节点间的通信成功率通常小于100%,由于通信失败会令源节点发送的通信请求无法被接收方正常接收,进而导致接收方认为发送方无数据发送而进入休眠状态。因此,即使事件发生在TBSP时间段内,A依然有发生数据源拥塞的可能。本方案设置参数PD_mn用以描述由通信失败造成数据源拥塞的概率:继续以图3为例,若A在t0时刻探测到事件,则其必须与B在t4时刻成功建立通信,否则将会造成数据源拥塞,通信的失败概率为1-RD_mn。若A在t1时刻探测到事件,则A与B在t4和t5建立通信都失败才会造成数据源拥塞,该事件发生的概率为(1-RD_mn)2,以此类推。对所有因通信失败而导致数据源拥塞的概率求平均值,即获得其期望,用PD_mn表示;式(7)、(8)的证明属于数列求和公式推导,在此不再赘述。令本例中的节点与其邻居节点通信成功率RD_mn=80%,则由于通信失败而导致数据源拥塞的概率为PD_mn×TBSP/Tcycle=0.3528。则本例中节点A的数据源拥塞概率为0.3+0.3528=65.28%。
当某数据爆发型节点存在x个候选节点,候选节点i的编号分别对应为1到x。由于其邻居之间的休眠次序相互独立,根据公式35,该数据爆发型节点的数据源拥塞概率可写为
(公式36)
公式36综合考虑了节点的通信成功率、工作占空比、休眠周期、数据产生速率、内存大小以及候选节点个数共6个因素对数据源拥塞概率的影响。将Tawake=Tcycle·Ron和Rf=Tf/Tcycle×100%代入公式36,可得到公式3:
(公式3)
公式4的证明:
本方法通过协调数据爆发型节点的后端节点的休眠时刻,以避免候选节点射频模块开启时间重叠,最终达到降低数据爆发型节点数据源拥塞概率的目的。
x≥2约束了y的上下界。若受协调节点的数量y<2,则无任何意义,因此y不能小于2。当时,数据爆发型节点的一个周期已经小于y个邻居的TBSP总和,假设所有节点之间的通信成功率都为100%,则D1≤0,表示此时已无法通过增加y达到降低数据源拥塞概率的目的,数据爆发型节点与其邻居的通信成功率已经成为制约数据源拥塞概率降低的主要因素。
对于一个编号为m的数据爆发型节点,设其存在x个候选节点,需要选择其中y个节点进行协调,其中y∈[2,x],x∈[2,∞);令被协调的y个节点依ID大小排序,其编号依次为{1,2,…,y-1,y},对于这y个节点,其每个节点的本地时钟分别对应为{c1,c2,…,cy-1,cy};取最小值c0=inf{c1,c2,…,cy-1,cy}作为参照时刻,并计算休眠间隔Tint=Tcycle/y。m创建节点调度表(Schedule Table,ST){c0,c0+Tint,…,c0+(y-2)Tint,c0+(y-1)Tint},并发给受协调的y个节点,以修改这些节点的时钟。
为确保节点的时钟计数值小于Tcycle,需要对超出值进行调整。 若则令ci=ci-Tcycle。令其它未被协调的x-y个节点编号为{y+1,y+2,…,x-1,x}。则经过协调后数据爆发型节点m的数据源拥塞概率可以表示为:
P′SDC_m=D1·D2 (公式4)
(公式41)
(公式42)
(公式43)
若公式41计算出D1<0,则令D1=0;公式42与公式3同样是描述未受协调的候选节点对数据爆发型节点数据源拥塞概率的影响。公式41描述的是受协调的邻居对数据爆发型节点数据源拥塞概率的影响,若取y=0,则公式4即为公式3(P′SDC_m=PSDC_m)。
公式41证明,由于受协调的节点依次唤醒的时间间隔为Tint,不再是相互独立的事件,它们之间的唤醒时间相互不重叠,因此,数据爆发型节点在Tcycle内未被该y个候选节点的TBSP覆盖的时间长度为Tcycle-y×TBSP,见图4。设某受协调节点的编号为i,其对数据爆发型节点m的通信成功率为RD_mi,则由于通信失败造成数据源拥塞概率的期望值为PD_mi。对于m,在其一个周期长度Tcycle时间内因通信失败造成数据源拥塞的概率为结合因候选节点未及时开启的情况,最终数据爆发型节点m的数据源拥塞概率为 即得公式41。
步骤四,数据爆发型节点向其邻居节点发送消息,令所有邻居节点保持射频模块开启,进入同步模式,并创建环搜索请求包进行广播;
数据爆发型节点的邻居节点响应环搜索请求包,并创建自愈环寻找包进行广播,寻找适合被协调的候选节点,在该过程中,数据爆发型节点保持对无线信道的侦听,并记录找到的自愈环;
仍以节点m为例:m创建环搜索请求包(RS-RST),将其广播,寻找自愈环,步骤如下:
步骤40,节点m向邻居节点发送消息,令其所有邻居节点保持射频模块开启,进入同步模式;节点m创建环搜索请求包RS-RST并广播,该请求包中包括节m的ID号和所需要修改时钟的节点个数y0;
步骤41,节点m启动定时器Timer,并保持对信道监听,每隔一段时间检测信道中是否有环寻找包(RS-PKT)在广播,如果有,m重置一次Timer,否则认为m寻找自愈环的进程已经结束,直接执行步骤44;若在Timer时间耗尽前发现环发现包(RD-PKT),则执行步骤42;Timer长度通常设置为1s;RS-PKT和RD-PKT由m的邻居节点产生;
RS-PKT若被节点转发,则该RS-PKT记录此节点的ID编号。经过多次转发的RS-PKT则会依次记录多个节点ID编号,形成路径PATH。所有组成PATH的转发节点ID称为PATH的元素。当PATH的第一个元素与最后一个元素相同时,则表示发现自愈环,自愈环由该PATH的所有元素按照元素添加到PATH时的顺序组成。对于拥有首尾元素相同的PATH的RS-PKT,称为RD-PKT。对于首尾元素相同的PATH,称其为自愈环。
当m节点的邻居收到并响应m节点的邻居发送的环搜索请求包RS-RST后,创建环寻找包(RS-PKT)进行广播,寻找适合被协调的候选节点。在该过程中,m节点保持对无线信道的侦听,并记录找到的自愈环。设i节点为m节点的其中一个邻居节点。当i接收到RS-RST后,创建RS-PKT,并将其ID号添加入RS-PKT的路径PATH。RS-PKT包含m的ID号,当前跳步数HOPtemp和RS-PKT的路径信息,并拥有最大跳数HOPmax=y0+1。i将RS-PKT进行广播。j节点为i节点的其中一个邻居。当j节点收到此RS-PKT时,进行以下步骤的处理:
(1)判断是否接收到数据包,如果没有,则保持当前对信道的监听状态,如果接收到RS-PKT,则进入S51。如果接收到RA-PKT,则进入步骤六;
(2)判断m是否为j邻居,是则进入步骤(3),否则丢弃该数据包;
(3)判断HOPtemp是否超过HOPmax,未超过则进入步骤三,否则丢弃该数据包;
(4)检测PATH中是否曾经记录过自己的ID号j,如果是,则进入步骤(5),否则进入步骤55;
(5)检测自己的ID号是否位于PATH的首位,如果是,则创建RD-PKT发送给节点m,表示已经发现一个自愈环,并回到步骤(1),否则直接丢包,回到步骤(1);
(6)将自身ID号加入PATH末尾,令HOPtemp=HOPtemp+1,将新的RS-PKT进行广播,回到步骤(1);
步骤42,判断是否已经记录过当前环:节点m从接收到的环发现包RD-PKT提取PATH信息并扫描PATH的元素,m认为拥有相同PATH元素(无论顺序如何)的RD-PKT为相同的RD-PKT。若m发现已经记录过当前RD-PKT,则忽略此RD-PKT,回到步骤41,否则,将PATH所有元素取出,并获得m节点与这些邻居的通信成功率信息PD_mi(节点m和节点i之间因通信失败而造成数据源拥塞的概率的期望),代入公式4计算该环的P′SDC_m,并存储,然后执行步骤43;
步骤43,进行存储环个数的检测:节点m存储自愈环的个数不超过K,若第K+1个环被发现,m则只存储P′SDC_m最小的前K个环,然后回到步骤41;K通常取值为10;执行步骤五;
关于自愈环:
本方案使用协调数据爆发型节点的邻居节点休眠时刻的方法达到降低数据源拥塞概率的目的,这一方法十分依赖于节点本地时钟的精确性。由于节点普遍存在时钟漂移现象,该现象导致节点时钟走时不准确,经过网络长时间运行后,原来被协调过的休眠次序会被时钟漂移所打乱,造成PSDC_m重新升高。自愈环的目的在于检测射频模块重叠时间,并将休眠次序复位。
要达到节点间检测射频模块开启时间重叠(简称重叠,下同)的目的,则重叠双方必须互为邻居;图5中的(a)和(b)分别显示了两种不同拓扑结构,痰图5中(c)和(d)分别为(a)和(b)的休眠效果图。A为数据爆发型节点,B、C、D和E为A的邻居。设A将邻居的休眠次序设置为B→C→D→E→B,E的本地时钟比真实时钟慢。图5的(a)和(b)中,双箭头代表两个节点互为邻居,虚线表示A的通信范围。对于拓扑(a),当E与B的射频模块打开时间重叠时,由于二者不为邻居,因此重叠事件无法被探测。直到E的漂移累积到与其邻居D发生射频重叠,E的时钟漂移才会被发现。对于拓扑(b),由于B和E互为邻居,当E与B发生重叠时,可以被重叠双方发觉。因此,具有时漂检测能力的环应具有的性质可以描述为:若构成环的成员间存在休眠相邻关系,则必须在拓扑上具有相邻关系。
当环成员检测到时漂后,即可进行复位。最普遍的方法为更改重叠双方其中一方的本地时间,修改其下一次射频模块打开的时刻。但是这样会造成“越位”现象。图6中的(a)举例说明了“越位”现象。
沿用图5(b)中列举的拓扑结构举例说明“越位”现象。在图5(a)中,C和D的本地时钟快于真实时钟。节点B在t0时刻开启射频模块,C在t1时刻与节点B发生射频重叠,通过检测本地ST可知C排在B之后,B将本地时钟告知C,则C修改本地时钟为treset,计算treset的公式为:
treset=Tcycle-Tint+(tA-tB)
其中tA为重叠双方休眠次序较早的节点的本地时钟,tB为休眠次序较晚的节点的本地时钟。设本场景中Tcycle=100,Tint=100,Tawake=5。B,C,D分别在t0=0,t1=3和t2=11时隙唤醒。在t0时隙时,B节点打开其射频模块此时B节点的本地时钟ClockB=0,在t1时刻,C打开射频模块,并与B发生重叠。此时B与C的本地时钟分别为ClockB=2和ClockC=0。B当前本地时钟告知C后,C将本地时钟更改为ClockC=77,即经过23个时隙后,C将重新打开射频模块。经过复位后,虽然能够保证C下个周期的射频模块开启时刻晚于B节点Tint个时隙,但同时C的开启时刻也晚于D,原来的休眠次序B→C→D→E→B被破坏为B→D→C→E→B,这种现象称为“越位”。
本方案通过引入适当的时钟补偿以解决“越位”问题,当检测到重叠时,ST中次序靠后的节点在修改本地时钟后,通过补偿当前周期的射频模块开启时间达到消除“越位”的目的。补偿的时间长度Toffset可通过下式给出:
Toffset=Tint-(tA-tB)
图6(b)中,当C在t1时刻与节点B发生射频重叠后,C将本地时钟修改为treset,同时保持其唤醒状态从t1时刻持续到t1+Toffset时刻。在补偿时间段内,C将会与D发生射频重叠,引起第二次复位的发生。D采用同样的方法进行时钟复位和补偿。在下一周期,该环依然保持原有的休眠次序,且休眠次序相邻节点之间的本地时钟差值恢复为Tint。
关于RET表
RET表主要用于限制自愈环的数量。
RSA依靠广播RS-PKT寻找各种长度的环,这在一个高密度部署的网络中,极有可能造成当前区域网络的通信拥塞。且符合条件的环非常多,数据爆发型节点如果希望找到一个P′SDC_m最低的环,则必须遍历搜索所有自愈的环,这对于一个硬件资源有限的传感网节点来说是不切实际的。
在最复杂的环境下,假设数据爆发型节点m存在着x个邻居,且所有邻居两两之间可以相互通信。如果m希望找到一个长度为y的环,则环的种类Comb(y,x)可以表示为
(公式51)
对于同一种环,可以有多种顺序,因此,m实际上获得的所有自愈环的数量为:
(公式52)
对于一个长度为y的环,RS-PKT需要无重复地经过所有环成员并回到产生RS-PKT的节点才能发现该环的存在,希望找到其中PSDC最小的环。这与旅行商问题(TSP)类似,已被证明为NP难问题,找到最优解的算法复杂度为O(x!)。令x=y=10,则本例中自愈环的个数将高达9864010个,这将会对节点造成严重的负担,并令RSA进程过长,影响正常数据的转发。因此,在对邻居节点协调之前,需要对自愈环的数量进行估计,并使用阈值Qth控制自愈环的规模;自愈环的阈值Qth在节点部署前同RET表一起存储到节点中。
公式52表明自愈环的数量与数据爆发型节点邻居数量x以及所搜索的环长度y相关,实际上,与邻居节点的拓扑结构也相关。图9举例说明这一现象:
A为数据爆发型节点,B,C,D,E和F为A的邻居,所有节点通信半径为R。在图9(a)的拓扑结构中,所有邻居都能被一个半径为0.5R的圆覆盖,被该圆覆盖的任意两个节点可以相互通信,则所有长度为5的自愈环个数总共有5!=120个。而对于拓扑图9(b),长度为5的自愈环个数却只有10个。显然,由于网络节点时随即部署的,因此(a)(b)两种拓扑结构产生都具有一定概率的。本方案通过建立“环估计表”(rings estimate table,RET)帮助数据爆发型节点判断是否对邻居节点进行协调,该表通过线下大量统计记录当邻居节点数量不同,搜索不同长度的环时数据爆发型节点获得自愈环的个数,表1为RET的格式。
RET的规模可以根据网络实际部署密度,由仿真统计建立,并在所有节点部署之前存入节点中。如果网络中一个节点最多存在不超过x个邻居,则该表的规模应该为x×x。该统计表由仿真统计生成,并在节点部署前通过编程写入节点。表中元素QE_pq指当节点存在p个邻居,并希望找到长度为q的环时,自己可能接收到的自愈环的个数为QE_pq个。
表1 RET格式
步骤五,数据爆发型节点选择数据源拥塞概率最低的一个自愈环,修改所有环成员的休眠时间,创建节点调度表,并将修改后的结果封装成环申请包进行广播;
步骤50,m节点选择数据源拥塞概率P′SDC_m最低的一个环发现包RD-PKT,并提取出对应的PATH;
步骤51,分离PATH中包含的y0个节点的ID,对于这y0个节点,设其每个节点的本地时钟分别对应为{c1,c2,…,cy0-1,cy0};取其中最小值c0=inf{c1,c2,…,cy0-1,cy0}作为参照时刻;
步骤52,m节点计算休眠间隔Tint=Tcycle/y0,创建节点调度表(ST):{c0,c0+Tint,…,c0+(y0-2)Tint,c0+(y0-1)Tint};
步骤53,对修改后的时钟进行调整:为确保节点的时钟计数值小于Tcycle,需要对超出值进行调整: 若 则令ci=ci-Tcycle;
步骤54,m将创建好的ST封装成环申请包(RA-PKT),并进行广播发送,然后进入等待模式;
步骤六,候选节点接收到环申请包后,若没有发现自己的ID出现在节点调度表中,则退出同步模式,进入休眠调度模式;否则,候选节点存储该节点调度表,按节点调度表中修改自己的本地时钟,并向数据爆发型节点返回确认包之后退出同步模式,进入休眠调度模式;
步骤60:m节点的邻居节点收到RA-PKT,并提取其中的ST;
步骤61:邻居节点扫描该ST,如果m节点自己的ID不存在ST中,直接执行步骤62,否则按照ST表中对应时间修改本地时钟,并发送确认包ACK给m节点,执行步骤62;
步骤62,邻居节点进入休眠调度模式。
步骤七:数据爆发型节点接收所有环成员的确认包后,退出同步模式,进入休眠调度模式;
m节点接收所有y0个被修改时钟的邻居的确认包ACK后,退出同步模式,进入休眠调度模式,结束。
以上步骤一至步骤七中,数据爆发型节点与受调度节点的程序运行流程图分别如图7和图8所示。
本发明的相关实验:
在各种描述网络拥塞的指标中,数据丢包率是一个重要的指标。本发明方法(DCS)专注于解决因数据源拥塞造成的丢包现象,我们重点关注数据源拥塞比率(SDCR)以及模型误差err,其中SDCR是数据源拥塞概率的观察值,为发生数据源拥塞次数与监测到事件发生次数之比,反映了数据丢包率。二者定义式分别如下:
SDCR=SDC_times/Total_events
err=|SDCR-P′SDC_m|
其中SDC_times和Total_events分别表示节点发生数据源拥塞的次数和检测到事件发生的次数。为简化问题的讨论,实验采用MAC层协议为RI-MAC,路由协议使用TADR。节点休眠周期Tcycle=100个时隙。事件触发概率以及事件持续的时间长度分别为1%和Tcycle。节点的工作占空比为Ron=3%,节点的最大存储空间Buffermax=4Kb,并令一个时隙表示10ms。
由于模型参数较多,本文主要讨论影响数据源拥塞的三个主要参数,分别为DCS协调的候选节点个数y,节点的通信成功率RD_mn和溢出时间比Rf。实验将分别验证各参数对数据源拥塞概率的影响。
实验一:候选节点数量与数据源拥塞概率的关系
为验证DCS在不同Pth下通过协调数据爆发型节点的邻居,降低数据源拥塞概率的能力,本实验令所有节点的通信成功率为100%。实验研究数据爆发型节点在不同Rf与候选节点个数情况下数据源拥塞的情况。其中,Rf取值为[1%,100%],候选节点个数x取值范围为[1,100]。不同场景下,Rf和x不同,每个场景的节点随机产生100000组本地时钟,对使用不同本地时钟的网络,模拟其连续运行1天的情况(8.64×107ms)。
令Pth=0,图11为实验的统计结果,图中(a)、(c)分别是使用DCS和不使用DCS时,数据爆发型节点的数据源溢出概率,(b)、(d)分别是(a)、(c)的4倍放大图。图11反映了数据爆发型节点在不同邻居个数与不同数据产生速率情况下的SDCR,纵坐标Rf反映了数据产生的速率,横坐标为邻居个数。图中不同色度表示SDCR的大小。由图11可知,无论是否使用DCS,数据源拥塞现象普遍发生于数据源产生速率过大且邻居节点数量较少的区域。为方便比较实验结果,令SDCR0和SDCR1分别代表使用DCS前和使用DCS后数据爆发型节点的SDCR。则DCS降低数据源拥塞的效果Pimprove可以表示为下式:
Pimprove=SDCR0-SDCR1
在不同的Pth下,数据爆发型节点调度邻居节点的个数与DCS的提高效果如图12所示。图12中,(a)到(d)是DCS分别运行在Pth为0、0.05、0.1、0.15情况下的提高效果。不同色度表示Pimprove的大小。(e)到(h)分别是数据爆发型节点处于(a)到(d)情况下数据爆发型节点所需要协调的邻居个数,其色度代表所需协调的候选节点个数。为直观分析,在图13中取图12的(c)和(g)中Rf=10%的XZ平面组成双纵坐标图,P0SDC和P1SDC分别代表节点不使用DCS和使用DCS的数据源拥塞概率理论值。图13中,左方纵坐标代表数据源拥塞概率,右纵坐标代表协调节点个数。当候选节点个数为1时,DCS无显著降低数据源拥塞概率作用。随着候选节点个数提高至7,SDCR0和SDCR1分别为41.633%和9.852%,DCS降低数据源拥塞效果达到最大值31.781%。此时P1SDC理论值为9%,已小于阈值Pth=0.1,故即使x增加,y依然保持不变。随着x增加,数据源拥塞概率逐渐减小,当x=12时,数据爆发型节点只需要协调6个候选节点即可令数据源拥塞概率小于0.1,因此,受协调的节点个数此后逐渐减少。实验结果显示,观察值普遍比理论值高,这是由于网络所使用的路由协议决定的。DCS虽然给节点增加了数据转发的机会,但最终仍然是由节点使用的路由协议决定是否转发数据,使用TADR路由协议的网络会存在节点即使有数据要发送且其候选节点唤醒,但却不转发数据的情况。本次试验err均值为0.0083,最大值为0.06。图14显示,err<0.02的概率为88.549%,结合图13观察,实验结果与理论值相差不大,趋势基本一致。因此,本实验验证了本发明计算所需要协调的邻居节点的正确性。
实验二:通信成功率与数据源拥塞概率关系
实验一已邻居节点个数x,协调邻居个数y与溢出时间比Rf对数据源拥塞概率影响与理论值基本一致,本节主要论证数据爆发型节点与其邻居节点通信成功率对其数据源拥塞概率的影响。因此,需要固定其余参数,具体参数配置如表3所示。当这些参数发生变动时,可使用同样的方法进行验证。由于数据爆发型节点m与其每个候选节点的通信成功率取值随机且相互独立,而数据爆发型节点的数据源拥塞概率是受所有候选节点的通信成功率共同影响。本实验设参数RD_mean作为m与其所有候选节点通信成功率的平均值,总体反映链路质量。将所有候选节点与数据爆发型节点的一组通信成功率的取值看作一组样本,在第i组样本中,各样本随机地在范围[(i-1)×5%,(i+1)×5%]中取值。本实验随机产生10组样本,且对每个样本随机产生100000组本地时间,对使用不同本地时间的网络,模拟其运行1天的情况。10组样本具体情况如表2所示,网络配置如表3所示。
表2 10个样本具体取值 表3 网络参数配置
图15列出了实验结果,纵坐标为数据源拥塞概率,横坐标为邻居个数。随着候选节点的通信成功率增加,数据爆发型节点的数据源拥塞概率也相应减少,这与本文分析结果趋势一致。该实验中,使用DCS的数据爆发型节点的数据源拥塞概率普遍比未使用DCS时要高,再次印证了DCS对于数据源拥塞的改进效果。此外,本实验中的模型误差如图16所示,err最大值为0.0788,平均值为0.0249,其err<0.04所占的比重为85.84%。观察值与理论值基本相同。因此,该模型对于数据源拥塞的预测具有重要参考价值。
实验三:自愈环对传感网时漂的抑制作用
对于不同的时漂设置,DCS对网络数据可靠性的改进程度不同。为方便讨论和实现现象明显,场景中所有节点的时钟分为快钟和慢钟两种类型。在每经过100时隙后都会有80%的几率产生2时隙的时钟漂移。例如,对于有一个本地时钟为快钟的节点,在当前的100个时隙中的第50个时隙开启射频模块。则在下一次100个时隙内,会有80%的概率在第48个时隙唤醒。节点部署区域为600×600m2,通信距离R=50m。随机部署300个节点,数据爆发型节点共10个,其数据产生速率为1~300 bytes/slot。网络详细配置如表3所示,0号节点为Sink节点。总体拓扑结构如图18所示,其中(b)图为(a)图虚线区域的放大图。由于本实验中任意一个节点的邻居节点个数不超过10个,因此建立的RET表规模为9×9。经过100000次仿真统计,得到RET的统计结果如图17所示。该图中的色条是以自然对数e为底,取对数显示的,例如图中坐标为(6,10)的色块,其数值约为5.3904×104,代表某数据爆发型节点存在10个邻居,且希望找到长度为6的自愈环,则该数据爆发型节点在运行换搜索算法时能够获得的自愈环结果约为5.3904×104个,ln(5.3904×104)≈10.895。
本次仿真中,ID编号为1到10的节点是随机产生的数据爆发型节点,表4列举了该10个节点的详细情况,包括邻居个数、数据产生速率、Rf和估算出的P’SDC。本次仿真将持续运行100000个时隙。为方便讨论缓存溢出和时漂抑制问题,本仿真以节点1为例子进行详细分析。节点1的邻居ID号分别为36、111、153和212。节点1在第3385时隙检测到事件发生。图19截取3385至3949这110个时隙进行绘图。图中色块代表事件发生的时隙以及节点唤醒的时隙。横坐标为时刻,纵坐标为节点的缓存负载。
表4 数据爆发型节点的详细参数
节点ID |
Vdata |
Rf |
邻居个数 |
P′SDC_m |
1 |
129 |
31% |
4 |
1.98*10^(-1) |
2 |
190 |
21% |
5 |
2.61*10^(-1) |
3 |
47 |
85% |
5 |
2.77*10^(-5) |
4 |
61 |
65% |
7 |
3.49*10^(-4) |
5 |
42 |
95% |
4 |
1.65*10^(-7) |
6 |
266 |
15% |
6 |
3.03*10^(-1) |
7 |
117 |
34% |
5 |
9.92*10^(-2) |
8 |
235 |
17% |
3 |
5.14*10^(-1) |
9 |
152 |
26% |
6 |
1.31*10^(-1) |
10 |
205 |
19% |
8 |
1.46*10^(-1) |
总数据为这5个节点的缓存负载总和。图19(a)中无DCS调度,节点1从第5时隙开始累积数据,到第35时隙时,其缓存区基本达到饱和(3999 bytes)。其邻居212号在第57时隙才唤醒,因此1号节点丢失了时隙从36到57的数据。图19(b)中节点1找到了{36,153,212}的环。212号节点在第32时隙唤醒,及时转存了节点1的数据。避免了数据源拥塞。
令DLR0和SDCR0表示未受DCS调度时节点的数据丢失情况,DLR1和SDCR1表示受DCS调度节点的数据丢失情况,可得图20(仅列出启动DCS的节点)。使用DCS后数据爆发型节点数据丢失情况要好于未使用DCS的时候。
为描述环对时漂抑制和保障休眠次序的性能,本文使用爆发数据安全时间比率(BurstSave Period Ratio,BSPR)描述这一性能。该参数的定义为:在Tcycle时间长度范围内,数据爆发型节点产生爆发数据的安全时间长度与Tcycle的比值,该参数在仿真过程中每隔Tcycle记录一次。数据爆发安全时隙定义为,若节点在某个时隙记录事件不会造成节点因无邻居节点转发数据而导致数据源溢出,则该时隙为数据爆发安全时隙。数据爆发安全时隙的总和为数据爆发安全事件长度。在上例场景中,对节点1-10号BSPR统计如表5所示。
表5 使用DCS与不使用DCS时节点BSPR比较
由于每个节点本地时钟会产生定向的时钟偏移,因此每个节点BSPR显现一定的周期性。图21的(a)和(b)分别反映了节点1和8在连续10000个时隙中BSPR变化情况。
以节点8的BSPR变化情况为例,其邻居ID编号分别为43、193和176。除193号节点本地时钟慢于真实时钟外,其余节点本地时钟都快于真实时钟。其休眠环的次序为43→193→176→43。在8号节点的第5个Tcycle到第12个Tcycle期间,8号节点的邻居发生时钟漂移,导致节点193和176的TBSP开始重叠,降低8号节点的BSPR。在第12个Tcycle时,节点193和176的发生射频重叠,触发环复位机制。在第13个Tcycle时,节点8的BSPR提升到60%。因此,本实验验证了环对DCS休眠次序的恢复功能。