发明内容
针对上述需求,本发明的解决的技术问题是,提供一种基于零领域知识的传感器网络故障诊断方法。该方法会自动探索节点测量值的相关性,并利用这种相关性去检测故障。
本发明的无线传感器网络故障诊断方法的技术方案如下。
一种无线传感器网络故障诊断方法,包括以下步骤:
1)采集传感器节点的数据;
2)根据上述检测数据建立特征向量之间的关系模型;
3)时间维检测;
4)空间维检测;
5)根据运行决策函数值判断发生的故障区域。
其中,所述步骤1)中,收集的数据包括:天线打开次数、天线打开总时间、收到的数据包数量、发送的数据包数量、丢弃的包数量。
其中,建立关联度矩阵:
其中,所述传感器i在时间窗k内的任意两个计数器u,v的相关系数是其协方差除以二者的标准差,即
其中,σu,k和σv,k分别是计数器u和计数器V数据的标准差:
其中,所述σu,k和σv,k分别是计数器u和计数器v数据的标准差,相关系数是其协方差除以二者的标准差。
其中,所述丢弃的包数量包括因接收栈缓冲区溢出而丢弃的包数量以及重传次数达到上限的情况下仍然没有得到应答确认而丢弃的包数量。
其中,所述时间维检测的算法包括以下步骤:
算法输入:建立节点si的内部关联性状态序列{CGi,1,CGi,2,CGi,3,CGi,4,...};
置信度阈值的算法输出:
A):算法初始化:设置当前时间窗t=1;
B):在时间窗t结束时运行:
C):获得最新的关联性状态CGi,t,序列更新为
{CGi,1,CGi,2,CGi,3,...,CGi,t};
D):令变量d从1循环至p(p-1)/2:
E):对每个向量CGi,t,取其第d个元素,得新序列{c1,c2,...,ct}
F):(变化点ct_cand的置信度)=序列变化点检验({c1,c2,...,ct})
G):若置信度大于置信度阈值,
H):令节点si发生故障的时间terror等于最显著变化点的时间t_cand
I):输出结果terror及其置信度,并继续运行程序,
J):重复执行第4-9行直至取完向量CGi,t的所有p(p-1)/2个元素
K):在下一时间窗结束时重复执行2-10行,时间窗t=t+1
其中,上述步骤C)中,挑选出序列{c1,c2,...,ct}中的最显著变化点的具体算法如下:
算法输入:到时间窗t截至,节点si的内部任意两种测量值的关联性序列{c1,c2,...,ct},引导分析的最高执行次数M(默认为10000)
算法输出:
序列中最显著的变化点及置信度
a):算法初始化:
令累积和CS0=0;
b):时间变量i从1循环至至当前时间窗t,分别计算累积和:
c):寻找CS1,CS2,CS3,...,CSt中的最大最小值,分别记为max(CSi),min(CSi)
d):令序列的最大变化幅度CSdiff=max(CSi)-min(CSi)
e):置计数器R=0;
f):令变量j从1循环至引导分析的最高执行次数M,执行以下引导分析:
g):将原始序列c1,c2,...,ct随机打乱,生成新序列c’1,c’2,...,c’t;
h):按照同样的方法计算其对应的累积和序列CS’0,CS’1,CS’2,...,CS’n;
i):求得新累积和序列的的最大变化幅度CS’diff=max(CS’i)-min(CS’i);
j):若原序列的最大变化幅度大于新序列的最大变化幅度,即CSdiff>CS’diff,计数器R自增1;
k):重复执行本算法步骤g)-j)行直到变量j的值大于最高执行次数M;
l):计算累积和序列CSi,1,CSi,2,CSi,3,...,CSi,t中绝对值最大的点,即CSk=max|CSi|;
m):输入序列中的最显著变化点即ck,其置信度为conf=R/M。
其中,所述步骤3)中,还包括以下步骤:
算法输入:
在时间窗t网络中所有节点si的内部关联性状态CG1,t,CG2,t,...,CGN,t;
低维空间的维度m(m取值远小于p*(p-1)/2)。
算法输出:
在时间窗t节点发生故障的可能性排序sil,si2,...,siN(从高到低)。
A1):算法初始化:
取向量CGi,t的转置,记为列向量Xi;
构造数据矩阵X=[X1,X2,...,Xn],X的第i列即为Xi;
B1):对矩阵XTX作特征值分解,得到其特征向量v1,v2,...,vm;
C1):构造新的数据矩阵Z=(v1v2...vm)T,其大小为m*N;
D1):Z的第i列bi即原关联性向量CGi,t在低维空间中的投影;
E1):利用K-Means算法将数据集{bi}分为K个聚类,对应的聚类中心分别为B1,B2,...,BK;
F1):对任意节点si,其发生故障的概率正比于min(dist(CGi,k,Cj)),其中dist(CGx,CGy)为向量间的距离函数;
G1):将所有节点按照发生故障的概率由高到低排列,得到序列Si1,Si2,...,siN.。
其中,所述步骤5)中的故障区域为所述置信度的数值大于所述置信度阈值的节点。
本发明的有益效果如下。
本发明与传统的传感器网络诊断方法相比,该方法既能探测出软件纠错所无法侦测的故障,又不需要网络管理人员具有传感器网络故障的先验知识。另外,实验表明,基于本发明可以发现一般统计方法无法检测到的故障。
具体实施方式
以下结合附图对本发明的无线传感器网络故障诊断方法进行进一步说明。
参见附图所示,依照本发明的一种无线传感器网络故障诊断方法包括具体而言,本方法的实施分为四个阶段,分别为:(1)数据收集;(2)关联矩阵建立;(3)时间维检测;(4)空间维检测。
(1)数据收集阶段,首先要在传感器节点的程序中加入一些计数器,每个计数器都是占用四字节的整数。这些技术器分别记录了可以描述节点状态的测量值。自节点的启动阶段开始,计数器就基于对应的事件开始进行累加。比如,计数器RadioOnTimeCounter(天线开启时间计数器),开始在节点启动后被置零,然后每当有天线打开关闭事件发生时,这段打开的总时间就被累加进计数器中(单位:毫秒)。同样的,计数器DuplicationCounter(重复包数量计数器)在每次收到一个重复的包时,都会累加1。节点被部署以后,每隔十五分钟就将所有计数器的值存储在数据包中,向终端发送。这些计数器包括但不局限于:RadioOnCounter,记录天线打开次数;RadioOnTimeCounter,记录天线打开总时间;ReceiveCounter(收到的数据包数量计数器);TransmitCounter(发送的数据包数量计数器);ReceiveOverflowDropCounter(接收栈缓冲区溢出而丢弃的包数量计数器);TransmitNoACKDropCounter(重传次数达到上限的情况下仍然没有得到应答确认而丢弃的包数量计数器)。
(2)终端每隔十五分钟都会收到各个节点汇报计数器数值的数据包。取两小时为时间窗,在每个时间窗内为各节点分别建立关联矩阵。假设网络中共有N个传感器节点,在每个节点上都记录有p个测量值(相应的,也有p个不同的计数器)。于是,在第t个数据包发送周期,节点si(1=i=N)发送回的数据包可以表示成一个p维的向量,即Metrici,t=(m1,t,m2,t,...,mp,t),其中m1,t为节点si在第t个周期结束后第1号计数器的值,其余以此类推。同时,设每个时间窗的长度都是数据包发送周期十五分钟的W倍。那么,在第k个时间窗,终端所收集的数据包含了从周期(k-1)*W+1到周期k*W各周期内节点所有计数器的值。此时,可以建立si在时间窗k的关联矩阵如下:
其中,ci,k(u,v)是一个区间[-1,+1]内的实数,表示在时间窗k内,节点si的第u个和第v个计数器所表征的测量值的关联性。计数器u和v的关联性越强,ci,k(u,v)的绝对值越接近1。关联向越弱,ci,k(u,v)的绝对值越接近0。大于0的值表明两者之间存在正相关,小于0的值表明两者之间存在负相关,等于0表明两者在统计上不存在任何关联。由于时间窗k对应了周期(k-1)*W+1到周期k*W,这W个数据包中第u个计数器的数据实际上是(mu,(k-1)*w+1,mu,(k-1)*w+2,...,mu,k*w),mu,(k-1)*w+1的意义如前所述。同理,第v个计数器的数据也有W个,分别是(mv,(k-1)*w+1,mv,(k-1)*w+2,...,mv,t*w)。根据Pearson的线性相关系数,计数器u与计数器v的关联度可以定义:
其中,σu,k和σv,k分别是计数器u和计数器v数据的标准差,而相关系数实际是其协方差除以二者的标准差。在关联矩阵ci,k(u,v)建立以后,实际上得到了在窗口k内传感器si内部运行状况的一种矩阵表达。
错误!未找到引用源。和错误!未找到引用源。分别展现了健康和故障节点的内部关联性图。图中,每个圈代表一种计数器,两个圈之间的边表示相应的计数器之间存在着强关联性。实际上,任意两种计数器之间都存在关联性,无论关联性是强是弱。可以发现,健康节点的内部关联性与故障节点的内部关联性之间存在显著区别。比如,对于表示节点操作系统下达任务数量的计数器与操作系统执行任务数量的计数器而言,在健康的节点上,两者应该是强相关的,有多少任务被下达,就有多少相应的任务被执行。即使可能由于栈溢出等原因某些任务未能被执行,但是两者的数量应该相差无几。但是对于故障节点而言,可能有很大部分被下达的任务都丢失了,而且这种丢失行为比较随机,导致两者之间的关联性变得很弱。于是,通过比较两种节点的内部关联性矩阵,可以很容易的分析出来哪些节点是健康的,哪些节点是故障的。
(3)时间维检测,时间维度的检测侧重在单个节点内部,是为了发现在时间轴上单个节点状态发生突变的时刻。定义节点si在各时间窗内的关定义节点si在各时间窗内的关联矩阵分别为CMi,1,CMi,2,CMi,3,CMi,4,...。将关联矩阵CMi,t按行拼接,我们可以得到一个与CMi,t等价的1*p2维行向量,而实际上,由于关联矩阵CMi,t是对称矩阵,行向量的大小可以进一步压缩为1*p(p-1)/2,记作CGi,t。于是节点si的内部关联性变化对应于时间序列{CGi,1,CGi,2,CGi,3,CGi,4,...}。若时间窗t内的关联矩阵CGi,t是关联矩阵序列中的一个显著的变化点,则此时节点si即为疑似故障点,其发生故障的概率为CGi,t是变化点的置信度。值得注意的是,由于向量CGi,t是包含了p(p-1)/2种不同的关联性,而实际上任一种关联性的显著变化都意味着潜在的错误,所以我们必须对每一种关联性序列单独进行检测。以第d种关联性为例,对时间序列{CGi,1,CGi,2,CGi,3,CGi,4...}中的每个向量CGi,t取第d个元素,得新序列{c1,c2,c3,c4,...},若其最显著的变化点ct_cand(候选点)的置信度大于conf_threshold(预设的置信度阈值),则时间窗t_cand内节点si很有可能发生了故障。检测的具体过程如算法1所述。
算法1:时间维检测算法
算法输入:
1.节点si的内部关联性状态序列{CGi,1,CGi,2,CGi,3,CGi,4...};
2.置信度阈值conf_threshold。
算法输出:
节点si段生故障的时间terror,若没有发生任何故障,故障时间terror=-1。
1:算法初始化:
当前时间窗t=1;
2:在时间窗t结束时运行:
3:获得最新的关联性状态CGi,t序列更新为
{CGi,1,CGi,2,CGi,3,...,CGi,t};
4:令变量d从1循环至p(p-1)/2:
5:对每个向量CGi,t,取其第d个元素,得新序列{c1,c2,...,ct}
6:(变化点ct_cand,置信度conf)=序列变化点检验({c1,c2,...,ct})
7:若置信度conf大于置信度阈值conf_threshold,
8:令节点si发生故障的时间terror等于最显著变化点的时间t_cand
9:输出结果terror其置信度conf,并继续运行程序
10:重复执行第4-9行直至取完向量CGi,t的所有p(p-1)/2个元素
11:在下一时间窗结束时重复执行2-10行,时间窗t=t+1
其中,算法1的第四行需要调用序列变化点检验算法来挑选出序列{c1,c2,...,ct}中的最显著变化点,我们采用了CUSUM(累积和)算法来实现这一功能,即算法2。其基本思想为,定义累积和CSi,c1直到ci累计与平均值的差值。若序列{c1,c2,...,ct}中没有显著的变化点,可以想象累积和CSi会始终在0左右摆动;若序列中存在显著变化点ck,不妨设一开始ci的值都大于均值,而ck处显著变小,那么CSi首先会逐步增加,直到CSk处值开始减小,于CSk-1处形成峰值。通过检测累积和的峰值,可以帮助找出原序列的显著变化点,定义其最大变化幅度为CSi的最大值与最小值之差。同时,为了模拟没有显著变化点时序列的表现,可以执行引导分析。引导分析首先将序列随机打乱,然后像之前一样计算重新排列后序列的累积和变化并找出最显著变化点。若在M次引导分析中,原序列的最大变化幅度有R次是大于随机打乱后序列的最大变化幅度的,则原序列最显著变化点的置信度为R/M。具体步骤参见算法2。
算法2:序列变化点检验算法CUSUM
算法输入:
1.到时间窗t截至,节点si的内部任意两种测量值的关联性序列{c1,c2 ,...,ct}
2.引导分析的最高执行次数M(默认为10000)
算法输出:
序列中最显著的变化点dt_cand置信度conf:
算法初始化:
令累积和CS0=0;
2:时间变量i从1循环至至当前时间窗t,分别计算累积和:
3:寻找CS1,CS2,CS3,...,CSt中的最大最小值,分别记为max(CSi),min(CSi)
4:令序列的最大变化幅度CSdiff=max(CSi)-min(CSi)
5:置计数器R=0;
6:令变量j从1循环至引导分析的最高执行次数M,执行以下引导分析:
7:将原始序列c1,c2,...,ct随机打乱,生成新序列c’1,c’2,...,c’t;
8:按照同样的方法计算其对应的累积和序列CS’0,CS’1,CS’2,...,CS’n;
9:求得新累积和序列的的最大变化幅度CS’diff=max(CS’i)-min(CS’i);
10:若原序列的最大变化幅度大于新序列的最大变化幅度,即CSdiff>CS’diff,计数器R自增1;
11:重复执行本算法8-11行直到变量j的值大于最高执行次数M;
13:计算累积和序列CSi,1,CSi,2,CSi,3,...,CSi,t,CSi,t中绝对值最大的点,即CSk=max|CSi|;
14:输入序列中的最显著变化点即ck,其置信度为conf=R/M。
(4)空间维检测:通过网络中所有节点的普遍模式来辨别故障点。尽管网络中节点分布在不同的位置,也不存在完全一样的两个节点,但是它们的分布区域、在系统中起的作用依然决定了其内部模式享有一定的共同之处。举例而言,部署在同一区域的节点,周围的网络环境、链路质量相似,故而成功传输的数据包与传输数据包总量之间的相关性也相同。基于这样的分析,取时间窗t所有节点的内在关联性向量CG
1,t,CG
2,t,…,CG
N,t,,空间维检测的任务是挑出其中最不正常的值。基于聚类的思想,作如下定义:假设这些向量可以被归为K类,每类的中心点为C
1,C
2,...,C
K。相应的,每一个向量CG
i,t,所对应的节点发生故障的概率正比于
其中dist(CG
x,CG
y)为向量间的距离函数。换而言之,若向量CG
i,t距离所有中心点C
j的最近距离
越大,节点i的内在关联性模式与其他节点的相似之处则越少,节点i发生故障的概率就越大。反之,若
越小,与节点i的内在关联性模式类似的节点就越多,节点i发生故障的概率就越小。
向量CGi,t的维度是p(p-1)/2,随着测量值种p的上升,向量维度呈其平方倍增长。而在一般应用中,p的数量至少为几十或者数百,因而普通的聚类算法在此并不适用。于是我们提出了利用PCA分析进行空间检测的方法,基本思想是先将高维向量CGi,t投影至低维空间,然后再进行聚类计算:首先可以构造数据矩阵X,X的列Xi是高维向量CGi,t的转置。若将矩阵XTX特征值分解,并把得到的特征向量逐行排列,可以构成新的数据矩阵Z。Z的第i列bi就是原关联性向量CGi,t在低维空间中的投影。于是,对数据集{bi}进行聚类分析,每个低维向量都会被指定到一个聚类中去。若某向量bi离其所属的聚类中心越远,那么对应的节点i在当前时间窗t内的内部关联性与其他节点的就越不一样,从而发生故障的概率就越大。具体步骤参见算法3。
算法3:空间维检测算法
算法输入:
1.在时间窗t网络中所有节点si的内部关联性状态CG1,t,CG2,t,...,CGN,t;
2.低维空间的维度m(m取值远小于p*(p-1)/2)。
算法输出:
在时间窗t节点发生故障的可能性排序si1,si2,...,siN(从高到低)。
1:算法初始化:
取向量CGi,t的转置,记为列向量Xi;
构造数据矩阵X=[X1,X2,...,Xn],X的第i列即为Xi;
2:对矩阵XTX作特征值分解,得到其特征向量v1,v2,...,vm;
3:构造新的数据矩阵Z=(v1 v2...vm)T,其大小为m*N;
4:Z的第i列bi即原关联性向量CGi,t在低维空间中的投影;
5:利用K-Means算法将数据集{bi}分为K个聚类,对应的聚类中心分别为C1,C2,...,CK”;
6:对任意节点si,其发生故障的概率正比于min(dist(CGi,k,Cj)),其中dist(CGx,CGy)为向量间的距离函数;
7:将所有节点按照发生故障的概率由高到低排列,得到序列si1,si2,...,siN。
在具体的实施过程中,我们发现低维空间的维度m取15能够收到比较好的效果。
以下结合附图和实例对本发明做进一步说明。
图3说明了时间维检测的一般步骤。图3中的曲线描述了两种测量值的关联性变化。图4中的实线对应于原始序列对应的累积和。而三条虚线则是将原始关联性序列分别作随机打乱所计算得出的累积和序列。每种曲线最高点的值减去最低点的值即为对应序列的最大变化幅度。我们可以看到,实线的最大变化幅度是所有曲线中最高的。于是,原始序列发生变化的点即为实线中纵坐标绝对值最大的点,置信度为100%。
图5显示了空间维检测的过程。在部署区域上,每个节点都会被计算其对应的内在关联性矩阵。为了说明的方便,我们将最强的关联性±1映射为自色(灰度值255),最弱的关联性0映射为黑色(灰度值0)。可以看到,在关联矩阵的相同位置上,右下角的传感器节点总是与其他节点表现出差异很大的颜色。也就是说,对于同样两个变量,在右下角节点上的关联性是与其他节点截然不同的,从而该节点就有着很大的概率成为故障点。
本发明所述的方法已经成功应用于无线传感器网络。在绿野千传(http://www.greenorbs.org)项目中,有多达350个节点在野外协同工作,采集环境的温度、湿度、光照以及二氧化碳浓度等数据,为森林监测以及林业研究提供了重要信息。通过在系统中收集测量数据,本发明成功的检测出了多种类型的故障,比如进入丢失(Ingress Drop)、路由回路、节点失效和链路错误等等。检测的过程并没有融入相关的领域知识,而检测结果也显示,这些错误发生的时间常常与系统效率降低(如数据包回收率下降)的时间相吻合。
以上所述仅是本发明的优选实施方式,应当指出,对于本领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应当视为本发明的保护范围。