赵欣奕,刘 蕾,段思佳,仵 博
(1.中国电子科技集团 第15研究所,北京 100083;2.航天系统部装备部 信息保障室,北京 100094)
卫星在轨健康状态评估是卫星健康管理的重要环节,在对卫星在轨状态进行异常、异变检测和预测的基础上,对卫星在轨的实际健康状态进行科学、准确评估,是制定卫星测控与使用计划及逆行故障处置的依据和前提[1],对提高卫星在轨可靠性、延长卫星在轨使用寿命、充分发挥卫星效能十分重要[2]。
随着航天技术的不断发展,高轨资源逐渐耗尽[3-7],面向下一代导航系统结合高中低轨构建导航星座的设想[8],激增的卫星数量给导航卫星的健康评估带来了新的挑战。一方面,随着监测卫星数量的增加,传统的人工监测卫星健康状态的方法需要花费较高的人力物力,难以继续适用;另一方面,评估单颗卫星健康状态需要监测的遥测参数也大幅度增长,传统基于知识和经验的健康状态评估方法无法有效利用海量遥测数据,准确度较低,面对未知故障时,故障机理推断时间较长。
针对传统健康评估方法存在的问题,国内外学者结合机器学习、深度学习等新型技术,提出了许多基于数据驱动的卫星健康评估方法。文献[9]提出一种基于概率降维与聚类的卫星健康监测和异常检测方法,并验证了其有效性;文献[10]根据元件健康状态依赖关系和运行数据开发了一种编队卫星故障分级诊断和健康评估框架;文献[11]针对卫星遥测数据,采用离群点检测算法寻找数据集中存在异常的部分以达到健康检测和异常识别的目的。
国内方面,我国学者在健康评估方面的研究最早为文献[12]运用了层次分析法对卫星姿态控制系统进行分析,采用模糊无量纲化函数和稳定更新过程计算卫星的健康状态。此后,文献[13]采用非参数回归法综合评估部件的健康状态,建立基于可重构度的系统结构树,实现从部件到系统的加权综合和卫星系统的健康状态评估;文献[14]发明了一种基于缓变模拟量遥测数据的卫星单机部件健康性评估方法;文献[15]针对了当时无法准确量化反映在轨卫星健康状态的问题,提出一种基于卫星部组件逻辑连接关系的健康状态分层评估模型并且详细讨论了遥测参数的变化类型;文献[16]基于高斯混合模型来提供卫星系统的健康评估方法。多数研究表明,健康评估方法需要具体分为单机/部件级健康评估以及系统级健康评估。根据评估对象的不同选取不同的健康评估算法。
研究分析和工程实践表明,贝叶斯网络由于其优秀的可解释性,在卫星健康评估领域有着较为优秀的前景。文献[17]基于贝叶斯网络的方法构建了卫星姿态控制分系统的健康评估模型,但是并未对健康评估方法做系统级和单机级的详细区分;文献[18]构建了供配电系统的贝叶斯网络评估模型,并简单描述了蓄电池组底层遥测参数异常判别方法,但未根据参数变化类型进行详细区分。行业内某机构建立了一套完整的导航卫星健康评估贝叶斯网络,但是网络的构建为手动构建,较为依赖专家的先验知识,不能充分利用遥测数据进行深度发掘。
本文拟采用局部异常因子检测法进行导航卫星基础遥测参数异常检测并生成载荷分系统单机级健康评估结果;利用基于结构学习的贝叶斯网络方法构建系统级健康评估模型。相较前人研究,本文优势在于:
1)行业内大多数研究集中于姿态控制系统以及供配电系统等平台分系统,对于导航卫星的载荷分系统尚无充分研究。
2)总结了导航卫星载荷分系统遥测参数的变化规律,根据参数异常类型选择健康评估算法。
3)基于结构学习的方式构建贝叶斯网络,比较了3种不同评分函数对于卫星数据集的适应性。
导航卫星载荷分系统的健康评估基本流程如图1所示。
图1 载荷分系统健康评估基本流程
流程内各环节功能如下:
1)数据集构建:通过预先分析近年来卫星发生的故障,整理相关故障涉及的单机,查找其所处分系统,将其余单机遥测参数纳入,补全原始数据集。
2)数据预处理:卫星在轨运行时会面临复杂的宇宙环境,极易产生电平跳变、单粒子反转等异常现象,导致传输数据发生误码。因此需要对下行遥测数据进行野值剔除,常见方法有53H法与前推差分算法等。
3)单机级健康评估:单机级健康评估由基础遥测参数直接反映,按影响因素划分可分为单一参数影响和多参数影响[12];按遥测参数异常变化规律划分,可将算法分为针对跳变型参数和针对缓变型参数,依据遥测参数异常变化规律选择适应的单机级健康评估算法,常见方法包括基于模糊无量纲化函数的方法、基于非参数回归的方法、基于局部异常因子检测的方法等。
4)系统级健康评估:系统级健康评估无法直接由底层遥测参数反映得出,因此一般都采用层次分析的思想进行赋权,自底向上逐层计算,综合得出顶层的健康评估结果。
5)模型检验:模型的检验分为定性检验和定量检验两种,定性检验指计算出的卫星系统健康状态要与实际一致,定量检验指模型的准确度需要到达一定门限。
6)输出结果:输出结果分为定性输出和定量输出,定性输出指以健康/不健康作为粗粒度的评价结果输出,定量输出指使用百分比的方式表示卫星系统健康程度。
在导航卫星载荷分系统的健康评估流程中,需要处理以下几个关键问题:1)导航卫星载荷分系统的重点单机的遥测参数规律总结;2)导航卫星载荷分系统的单机级健康评估方法选用;3)导航卫星载荷分系统的系统级健康评估方法选用。
针对上述问题,确定本文的技术路线,即导航卫星载荷分系统的健康评估流程中每个环节所需的关键技术,于2.1至2.4节进行详细描述。
根据变化方式的不同,可以将遥测参数的异常类型分为两种:一是跳变型异常,即该类参数在部件正常工作状态下,处于特定的数值区间,呈现平稳或波动的态势,如载荷分系统中的铷钟电压、温度等参数。当部件发生故障时,此类参数会跳出正常区间,离散或连续地分布在正常区间之外,另一种是缓变型异常,该类参数一般会处于一个特定的数值区间中,呈现一种退化过程,即数值越低(或是数值越高),部件的健康状态就越差,如姿轨控分系统中的姿态角误差、供配电分系统中的蓄电池当前电量参数等。
经过查阅卫星参数相关文档并查验已有数据集,导航卫星载荷分系统关键单机的遥测参数异常类型以跳变型异常为主。
53H法的基本思想是产生一个曲线的平滑估计,然后通过测量值与该估计值的比较来识别野值。首先对数据值序列求两次中值得到新的数据值序列,然后将新序列通过下式组合成参考值[19]:
x3(i)=0.25x2(i-1)+0.5x2(i)+0.25x2(i-1)
如果有下式成立则xi为野值,并用参考值替换,k为一预定值:
|x(i)-x3(i)|>k
LOF算法(Local Outlier Factor,局部离群因子检测方法),是一种无监督的离群检测方法,是基于密度的离群点检测,通过比较每个数据点与其周围邻近点的密度来确定异常程度[20]。
使用LOF算法进行单机级健康评估的优势在于对专业先验知识的需求较低,可以通过调整参数来动态修正健康评估结果的准确性和可靠性。
贝叶斯网络结构学习一般指在给定数据集的情况下,通过穷举所有可能的贝叶斯网络结构,并根据一定的评分策略,将评分最高的贝叶斯网络结构作为结构学习的最终结果。
通过贝叶斯网络结构学习,可以在相关故障知识欠缺的情况下,通过积累相关故障的历史数据集,自动构建贝叶斯网络结构,同时,由于其具备白盒网络的特点,构建的贝叶斯网络结构可以通过专家评定的方式进行进一步修正,使其更加贴合实际故障模式。
本实验使用Python 3.7.6进行开发,使用Anaconda进行Python环境管理,Anaconda版本为4.8.2,使用Jupyter Notebook以交互式Web应用的形式为Python提供代码执行和交互环境,Jupyter Notebook版本为6.0.3,系统环境为Windows7。
根据第一节中健康评估流程中各环节所需功能,导航卫星载荷分系统健康评估系统包括数据准备模块、数据预处理模块、单机级健康评估模块、系统级健康评估模块、模型检验模块和输出结果模块,各模块功能与健康评估流程中各环节描述一致,在结果输出模块,还需要将训练好的模型进行保存和输出,如图2所示。
图2 导航卫星载荷分系统健康评估软件架构
本实验使用Jupyter Notebook进行交互式开发。Jupyter Notebook是一款交互式的Web应用程序,可以便捷地创建和共享程序文档,支持实时代码,即以代码块为编译单元,可以及时地查看代码结果。
因此,本实验将导航卫星载荷分系统的健康评估系统的每一个环节作为一个单独的代码块进行处理,基于健康评估流程设计各代码块,设计思路和编程方法如下:
1)数据集构建。由于采集到的原始二进制数据经处理后以csv文件格式进行存储,因此使用Python提供的pandas包对数据进行分析和处理。pandas包提供了read_csv方法,用于从csv文件中读取数据。
2)数据预处理。数据预处理包括野值剔除、归一化以及划分训练集和测试集。构建好的数据集存储在pandas包中定义的DataFrame数据结构中,可以通过Python的循环逻辑遍历DataFrame,使用53H方法逐列进行野值剔除。53H方法根据其判别公式,通过Python条件语句进行实现。
归一化使用pandas提供的to_numpy方法、factorize方法实现。to_numpy方法将DataFrame中的数据规范为NumPy数组,factorize方法将各种类型的数据映射为数字,reshape方法将映射后的数字按比例缩放至指定的区间内。
训练集与测试集的划分使用Python的机器学习库sklearn中提供的train_test_split函数来随机划分数据集,一般将数据集70%划分为训练集,30%划分为测试集。
3)单机级健康评估。使用局部异常因子检测方法进行单机级健康评估,用粗粒度的健康/不健康来对单机健康状态进行划分,即检测到特征参数异常时,标记单机为“不健康”状态。使用Python机器学习库sklearn.cluster中的DBSCAN方法来实现局部异常因子检测方法。需要根据不同数据集进行调整的参数有2个,分别是eps和min_samples。
在LOF算法中,密度相近的邻近点群可以成为主群,对于每个数据点,其局部密度即其k个最近邻点的平均距离的倒数。由此可见,待检测点离主群的距离越远,越有可能被判定为离群点,也就是局部异常因子。eps代表检测半径,即当待检测点离主群的距离大于eps时,就会被判定为离群点;min_samples代表最小样本数,只有当某一簇密度相近的点群中样本点的数量超过min_samples规定的个数时,才会被判定为主群。
4)系统级健康评估。使用贝叶斯网络的方法把获得的单机级健康状态统合,形成系统级的健康评估结果。使用Python概率图模型库中的pgmpy进行实现,从数据中学习到最优的贝叶斯网络结构和对应的节点概率表。
贝叶斯网络结构学习需要根据数据集进行调整的参数主要为评分函数,Python提供的评分函数主要包括K2Score、BDeuScore以及BicScore。BDeuScore基于贝叶斯方法,适用于离散变量的网络,考虑分布的先验知识,适用于规模较小的数据集;K2Score基于最大似然估计,对每个节点使用一个虚拟计数防止出现概率为零的情况,适用于大型数据集;BicScore同样基于最大似然估计,适用于连续变量的网络。
5)模型检验。从数据集中学习到的贝叶斯网络结构和节点概率表构成一个贝叶斯模型。将测试集中某一列数据作为预测结果检验数据,从测试集中去除,将剩余参数输入训练好的贝叶斯模型,对被去除列的数据进行预测输出。将预测结果与实际结果进行比对,得到模型的预测正确率。
6)结果输出。使用Python提供的pickle库对训练好的模型进行存储和加载。使用pickle.dump方法将训练好的模型以pkl格式的文件进行存储,使用pickle.load的方法对存储的pkl格式的模型进行加载并使用。
4.1.1 数据集构建
本实验数据采集自某卫星系统共计13小时内导航载荷分系统下行的遥测参数,结合一定数量的仿真数据,共采集到870条数据。每条数据包括铷种、导航单元等不同单机的电压、状态字等共96个特征参数,总数据量共计83 520个数据点。使用pandas的read_csv方法进行读取,由于列名为中文,需要在方法可选参数中将encoding参数设为“gbk”。
根据专家知识,能够观察到部分参数异常。结合仿真数据,将异常数据开始出现和异常数据恢复正常期间内所有数据标记为卫星“不健康”的特征数据。
4.1.2 数据预处理
使用53H方法对读取到的数据集逐列进行野值剔除。野值剔除完成后,由于数据集中包含字符串类型的数据,需要对数据集进行归一化处理,本实验中,reshape方法的参数设定为(-1,1),表示将所有特征参数映射后的数字按比例缩放为一个(-1,1)之间的小数。归一化处理结束后,对数据集按照70%/30%的比例划分为训练集与测试集。由于异常数据占比较低,需要对划分后的训练集与测试集进行检查,确保训练集与测试集中都包含异常数据。
4.1.3 单机级健康评估
使用局部异常因子检测算法对剔除野点后的数据集进行处理,得到单机级健康评估结果。
使用Python机器学习库sklearn.cluster中的DBSCAN方法来实现局部异常因子检测方法,将初始参数eps设为0.5,min_samples设为10。由于某些参数在一定范围内进行波动属于正常现象,将eps设为0.5会导致某些正常参数被视为异常,因此需要调整eps的值。本实验以eps=0.5为起始点,以0.1为调整步长,逐渐增大eps的值,观察已知波动范围的参数能否被正确检测到。完成调整后,将所有被归集为主群的样本点置0,意为健康,将离群点置1,表示此刻该单机状态为不健康。
使用Python提供的seaborn库对离群点检测结果进行可视化展示。
4.1.4 系统级健康评估
基于得到的单机级健康评估结果,使用贝叶斯结构学习的方法,得到系统级的健康评估结果。
使用Python概率图模型库中的pgmpy.models和pgmpy.estimators进行贝叶斯网络结构的学习和节点参数表的生成。分别将贝叶斯网络结构学习的参数调整为K2Score、BDeuScore和BicScore,通过引入Graphviz提供的Digraph方法在Jupyter Notebook界面对生成的贝叶斯网络进行可视化展示。
4.1.5 模型检验
在测试集中利用pandas.Dataframe.drop方法去除“健康/非健康”的标记列,将剩余参数输入到训练好的贝叶斯模型中,使用pgmpy.model中的predict方法对去除的数据列进行预测,将预测结果与卫星实际健康状态进行比对得到3个模型各自的准确度指标。
4.1.6 结果输出
利用Python提供的pickle库分别将3个训练好的模型进行存储。
4.2.1 单机级健康评估结果
局部异常因子检测算法的调参结果如下:
1)由于卫星下行遥测参数多数较为稳定,因此几乎所有特征参数的主群都仅有一个,调整min_samples的值对结果的影响较小。
2)调整eps的值较为关键,在数据集完成归一化之后,若eps的值较小,则会导致某些在正常范围内波动的特征参数被视为异常;若eps的值较大,则会导致某些异常点无法被检测到。eps的调整值及结果如表1所示。
表1 eps调整值
某一特征参数样本的可视化结果如图3所示,图中横轴与纵轴均为样本数据具体数值,由于对数据进行了统一的映射处理,且为了观察方便,未缩放至(-1,1)区间前截图,因此图中“0”值代表正常的样本点,“1”至“7”为被映射的异常值,表明此样本中除正常参数外,还有7类异常数据。
图3 标准化异常数据展示
为更直观地观察样本中样本点的分布,附归一化之前的样本可视化结果如图4所示,图中122为正常数值,其余点均为异常数据,标记为因此特征数据异常导致单机“不健康”状态。
图4 原始异常数据展示
4.2.2 系统级健康评估结果
当贝叶斯网络结构学习的参数调整为BDeuScore时,输入数据包括96个特征参数样本,实际输出48个贝叶斯网络节点,原因为被筛选的48个特征参数数据保持稳定,未显示异常。学习到的贝叶斯结构部分如图5所示,可以观察到当评分函数选用BDeuScore时,爬山算法采用一种全关联的方式组织贝叶斯网络结构,即考虑尽可能多的参数之间的影响关系。图中的有向边表示当铷钟参数1变化时会引起铷钟参数2、铷钟参数3和铷钟参数4的变化,而铷钟参数2发生的变化也会导致铷钟参数3和铷钟参数4发生变化。因此铷钟参数3和铷钟参数4的节点概率表中会包含铷钟参数1和铷钟参数2的条件概率分布,并且铷钟参数3和铷钟参数4的概率分布相对独立。
图5 BDeuScore学习部分结构图
当贝叶斯网络结构学习的参数调整为BDeuScore时,节点概率表包含两部分:一部分为使用单机级健康评估方法获得的节点自身的异常概率;另一部分为少节点的条件概率分布。如铷钟参数1为异常的概率为16.2%,正常的概率为83.8%,而铷钟参数2除了拥有自己的异常概率外,还包含了铷钟参数1的条件概率分布。
当贝叶斯网络结构学习的参数调整为K2Score时,同样输出48个贝叶斯网络节点,学习到的贝叶斯网络结构部分如图6所示,观察到相较于BDeuScore,K2Score计算出的贝叶斯网络结构忽略了铷钟参数2对铷钟参数3和4造成的影响,这是因为Python中封装的K2Score计算公式是在BDeuScore计算公式上增加了边计数的减益函数,因此会生成更精简的贝叶斯网络结构。
图6 K2Score学习部分结构图
当贝叶斯网络结构学习的参数调整为BicScore时,输出48个贝叶斯网络节点,学习到的贝叶斯结构部分如图7所示,可以看到评分函数设定为BicScore时,能够在简化结构的同时,依靠依赖传递来保留节点之间的依赖关系,即由于铷钟参数1与铷钟参数3在同一路径上,因此当铷钟参数1发生变化时,铷钟参数3因为铷钟参数2发生变化,间接受到铷钟参数1的影响。
图7 BicScore学习部分结构图
选用不同评分函数计算得到的模型可以使用模型生成时间以及模型准确率作为评价,如表2所示。可以观察到BDeuScore由于考虑较复杂的贝叶斯网络结构,生成时间较长,准确率也较高;K2Score考虑较为简单的贝叶斯网络,造成了一定的节点依赖信息丢失,虽然生成时间较快但是准确度有所降低;BicScore在保持准确率的同时,相较于BDeuScore节约了28%的生成时间。
表2 贝叶斯网络学习结果比较
实验证明,在缺乏相关故障机理和行业专家知识较少的情况下,本文设计方法能够以健康/非健康的粗粒度方法对导航卫星载荷分系统健康状态进行输出。
在单机级健康评估环节,使用局部异常因子检测方法可以有效地检测到遥测参数的缓变型异常和跳变型异常,但是在某些极端情况下,如当采集的样本数量较少,且异常数据数量大于正常数据数量时,异常数据就会占据多数,成为主群,导致正常数据被检测为“异常”数据,因此使用异常因子检测方法进行单机级健康评估仍需一定的专家知识辅助,或者保证积累足够的数据量。
在系统级健康评估环节,使用贝叶斯结构学习的方法能够在相关故障机理不明时,根据卫星故障发生的时间点,对特征参数进行分析。由于贝叶斯结构学习会关注数据的变化对其他数据的影响,因此相对稳定的正常数据会在学习过程中被筛选掉,相比传统人为构建贝叶斯网络的方式,省略了主成分分析等选取特征参数的过程,对专家知识的需求大幅度降低。然而使用贝叶斯结构学习的方法仍然存在以下问题:
1)准确率较低。由于卫星的高可靠性,现今的卫星系统发生故障的频率较低,故障持续时间较短,难以积累足够的故障数据对模型进行训练,而使用仿真数据又难以准确构建真实卫星的贝叶斯结构,导致推断正确率较低。后续还需继续积累卫星故障数据,对模型进行多次训练,以得到稳定的贝叶斯网络模型。
2)部份依赖关系难以解释。贝叶斯网络相比于深度学习等黑盒网络,一大优势就是可以利用已有的专家知识对生成网络进行评价和修改。由于贝叶斯网络只关注数据之间的相互影响关系,有时会生成一些不合理的依赖关系。一方面,这些与传统专家知识相违背的依赖关系在经过分析和验证后有可能成为对传统专家知识补充;另一方面,对于经过验证后确实不合理的依赖关系,可以通过手动修改,或在结构学习开始前,通过调整参数,如加入不可翻转边等,对贝叶斯网络结构学习过程进行人为指导,提高生成结构的可解释性和可靠性。
针对传统健康评估无法充分发挥遥测参数潜力的问题,本文提出了基于局部异常因子检测-贝叶斯结构学习方法的导航卫星健康评估方法,并在导航卫星载荷分系统上进行了实验验证。实验证明此方法能够在缺乏相关故障知识的情况下,以健康/非健康的定性角度对导航卫星载荷分系统的健康程度进行评估,评估准确度基本达到预期。然而,局部异常因子检测方法和贝叶斯结构学习方法各自还存在一些问题。局部异常因子检测方法较为依赖数据集质量,在某些情况下会对单机级健康程度产生误判;贝叶斯结构学习方法得到的评估结果,其正确率仍有提升空间,从数据集中学习到的结构则仍需经过专家知识的检验和进一步修正。尽管如此,本文为导航卫星分系统乃至整星的健康评估提出了新的思路和方向,在未来的研究中应重点研究导航卫星各分系统特征参数的特点和异常类型,继续提高各系统贝叶斯模型的准确度和可解释度,使之能够达到工程应用的指标。