主要内容

基于数据模型的故障检测

这个示例展示了如何使用基于数据的建模方法进行故障检测。

简介

早期检测和隔离机器运行中的异常有助于减少事故,减少停机时间,从而节省运营成本。该方法涉及处理来自系统操作的实时测量,以标记任何指向新出现故障的意外行为。

本例主要介绍故障诊断的几个方面:

  1. 通过残差分析检测异常系统行为

  2. 通过建立损坏系统的模型来检测损坏情况

  3. 利用模型参数的在线自适应跟踪系统变化

识别系统行为的动态模型

在基于模型的检测方法中,首先使用测量的输入和输出数据建立有关系统的动态模型。一个好的模型能够准确地预测系统在未来一定时间范围内的响应。当预测不好时,残差可能很大,可能包含相关性。利用这些方面来检测故障的发生率。

考虑受冲击和振动影响的建筑物。振动的来源可以是不同类型的刺激,取决于系统,如阵风,与运行的发动机和涡轮机的接触,或地面振动。冲击是对系统进行脉冲碰撞测试的结果,该测试是为了充分激发系统而添加的。金宝app仿真软件模型pdmMechanicalSystem.slx是这种结构的一个简单例子。激励来自于周期性的颠簸以及由过滤白噪声模拟的地面振动。系统的输出由一个受测量噪声影响的传感器收集。该模型能够模拟结构处于健康或受损状态的各种情况。

sysA =“pdmMechanicalSystem”;open_system (sysA)将模型设置为正常运行模式set_param ([sysA,/机械系统的),“LabelModeActiveChoice”“正常”模拟系统并记录响应数据sim(sysA) ynormal = logout . getelement (“y”) . values;

输入信号未被测量;我们所记录的只是反应ynormal.因此,我们利用“盲识别”技术建立了系统的动态模型。特别地,我们建立了记录信号的ARMA模型作为系统的表示。当输入信号被假定为(过滤过的)白噪声时,这种方法是有效的。由于数据受到周期性颠簸的影响,我们将数据分成几个部分,每个部分都从颠簸的发生开始。这样,每个数据段都包含对一个碰撞和随机激励的响应——这种情况可以使用时间序列模型来捕捉,其中碰撞的影响归因于合适的初始条件。

Ts = 1/256;%数据采样时间Nr = 10;信号中突起数的%N = 512;碰撞之间数据长度的%Znormal = cell(nr,1);ct = 1:nr ysegment = ynormal.Data((ct-1)*N+(1:500));z = iddata(ysegment,[],Ts);Znormal {ct} = z;%每段只有一个凸起结束情节(znormal {}):绘制记录段的抽样图标题(“测量响应段”

将数据分割为估计和验证部分。

Ze = merge(znormal{1:5});Zv = merge(znormal{6:10});

用状态空间形式估计一个七阶时间序列模型党卫军()命令。模型顺序是通过交叉验证(检验验证数据的拟合)和残差分析(检验残差是否不相关)来选择的。

Nx = 7;模型= sest(ze, nx,“形式”“规范”“t”、Ts);礼物(模型)查看具有参数不确定性的模型方程
model =离散时间识别状态空间模型:x (t + Ts) = x (t) + K e (t) y (t) = C x (t) + e (t) = (x1, x2) x3 x1 0 1 0 x2 0 0 1 x3 0 0 0 x4 0 0 0 x5 0 0 0 x6 0 0 0 x7 0.5548 + / - 0.04606 - -2.713 + / - 0.2198 - 5.885 + / - 0.4495 x4 x5 x6 x1 0 0 0 x2 0 0 0 x3 1 0 0 x4 0 1 0 0 0 1 x5 x6 0 0 0 x7 -8.27 + / - 0.5121 - 9.234 + / - 0.3513 - -7.956 + / - 0.1408 x7 x1 0 x2 0 x3 0 x4 0 x5 0 x6 1 x7 4.263 + / - 0.02599 C = (x1, x2) x3 x4 x5 x6 x7 y1 1 0 0 0 0 0 0 K = 1.025 + / - 0.01401日元x1 x2 1.444 + / - 0.0131 x3 1.907 + / - 0.01271 x4 2.385 + / - 0.01203 x5 2.857 + / - 0.01456 x63.26 +/- 0.0222 x7 3.552 +/- 0.0336采样时间:0.0039062秒参数化:带指数的CANONICAL形式:7。自由系数数:14参数及其不确定性使用“idssdata”、“getpvec”、“getcov”。状态:终止条件:接近(局部)最小值,(范数(g) < tol)..迭代次数:7,函数求值次数:15在时域数据“ze”上使用SSEST估计。拟合估计数据:[99.07 99.04 99.15 99.05 99.04]%(预测焦点)FPE: 0.6242, MSE:[0.5974 0.6531 0.5991 0.5871 0.6496]更多信息在模型的“报告”属性。

模型显示参数估计的不确定性相对较小。我们可以通过计算测量信号估计频谱上的1-sd(99.73%)置信界来确认可靠性。

H =谱图(模型);showConfidence (h, 3)

虽然在较低频率的响应中约有30%的不确定性,但置信区域很小。验证的下一步是查看模型在验证数据集中预测响应的效果如何zv.我们使用提前25步的预测范围。

比较(zv, model, 25)%针对一个数据集的验证

该图表明,该模型能够预测验证数据集25个时间步(= 0.1秒)的第一次实验中的响应,准确率为> 85%。要查看与数据集中其他实验的契合度,请使用图轴的右键单击上下文菜单。

验证模型的最后一步是分析由它产生的残差。对于一个好的模型,这些残差应该是白色的,即对于非零滞后显示统计上不显著的相关性:

zv渣油(模型)

残差在非零滞后时大多不相关。在导出了正常行为的模型之后,我们继续研究如何使用该模型来检测故障。

基于健康状态模型的残差分析故障检测

故障检测是对系统观测中不需要的或意外的变化进行标记。故障会引起系统动态的变化,可能是由于逐渐的磨损,也可能是由于传感器故障或部件损坏引起的突然变化。当故障出现时,在正常工作条件下获得的模型无法预测观测到的响应。这导致测量响应和预测响应之间的差异(残差)增加。这种偏差通常由较大的残差平方和或相关性的存在标记出来。

将Simulin金宝appk模型放在损坏系统变体中进行仿真。我们使用单个bump作为输入,因为剩余测试需要白色输入,由于初始条件可能是瞬态的。

set_param ([sysA,/机械系统的),“LabelModeActiveChoice”“DamagedSystem”);set_param ([sysA,/脉冲的),“时间”“5120”%来强制只进行一次碰撞sim(sysA) y = logout . getelement (“y”) . values;

resid(model, y.Data) set_param([sysA,/脉冲的),“时间”“512”%恢复原始

残差现在更大,并在非零滞后时显示相关性。这是故障检测背后的基本思想——创建一个剩余度量,并观察它如何随着每一组新的测量而变化。这里使用的是基于1步预测误差的简单残差。在实践中,会生成更高级的残差,这些残差是为应用程序需求量身定制的。

使用正常和恶化状态模型的故障检测

故障检测的一种更详细的方法是识别系统故障(损坏)状态的模型。然后,我们可以分析哪个模型更有可能解释来自系统的实时测量。这种安排可以推广到各种类型故障的模型,因此不仅用于检测故障,而且还用于识别哪一个故障(“隔离”)。在本例中,我们采用以下方法:

  1. 我们收集系统运行在正常(健康)和已知的磨损引起的寿命结束状态下的数据。

  2. 我们确定一个动态模型来表示每个状态下的行为。

  3. 我们使用数据聚类方法来明确区分这些状态。

  4. 对于故障检测,我们从运行的机器中收集数据,并确定其行为模型。然后我们预测哪种状态(正常或受损)最有可能解释所观察到的行为。

我们已经模拟了系统的正常运行模式。现在我们模拟模型pdmMechanicalSystem在“生命终结”模式下。这是系统已经恶化到允许运行的最终状态的场景。

set_param ([sysA,/机械系统的),“LabelModeActiveChoice”“DamagedSystem”);sim(sysA) y = logout . getelement (“y”) . values;Zfault = cell(nr,1);ct = 1: nr z = iddata (y.Data ((ct-1) * N + (1:50 0)), [], Ts);Zfault {ct} = z;结束

现在我们创建一组模型,每个数据段一个模型。和之前一样,我们建立了状态空间形式的七阶时间序列模型。为了提高速度,关闭协方差计算。

mNormal = cell(nr,1);mFault = cell(nr, 1);Nx = order(model);opt = ssestOptions(“EstimateCovariance”, 0);znormal{ct} = sest(znormal{ct}, nx,“形式”“规范”“t”, Ts, opt);mFault{ct} = sest(zfault{ct}, nx,“形式”“规范”“t”, Ts, opt);结束

验证模型mFault都是故障运行模式的良好代表:

比较(合并(zfault{:}), mFault{:}, 25)

正常和故障估计谱图绘制如下。

Color1 =“k”;Color2 =“r”;ModelSet1 = cat(2,mNormal,repmat({Color1},[nr, 1]))';ModelSet2 = cat(2,mFault,repmat({Color2},[nr, 1]))';spectrum(ModelSet1{:},ModelSet2{:}) axis([1 1000 -45 40]) title(输出光谱(黑色:正常,红色:故障)

频谱图显示了不同之处:受损模式的主共振被放大,但频谱在其他方面是重叠的。接下来,我们创建了一种定量区分正常状态和故障状态的方法。我们可以使用数据聚类和分类方法,例如:

  • 模糊c均值聚类。看到fcm ()在模糊逻辑工具箱。

  • 金宝app支持向量机分类器。看到fitcsvm ()在统计和机器学习工具箱。

  • 自组织映射。看到selforgmap ()在深度学习工具箱中。

在这个例子中,我们使用支持向量机分类技术。金宝app两类模型的信息聚类(mNormal而且mFault)可以基于这些模型可以提供的不同类型的信息,例如它们的极点和零点的位置,它们的峰值共振的位置或它们的参数列表。在这里,我们根据两个共振对应的极点位置对模进行分类。对于聚类,我们用“good”标记健康状态模型的极点,用“faulty”标记故障状态模型的极点。

ModelTags = cell(nr*2,1);% nr为数据段数ModelTags(1:nr) = {‘好’};ModelTags(nr+1:end) = {“错误”};ParData = 0 (nr*2,4);plist = @ (p)[真正的(p(1)),图像放大(p(1)),真正的(p(3)),图像放大(p (3)));主导共振的%极点ct = 1:nr ParData(ct,:) = plist(esort(极点(mNormal{ct})));ParData (nr + ct:) = plist (esort(杆(mFault {ct})));结束cl = fitcsvm(ParData,ModelTags,“KernelFunction”“rbf”...“BoxConstraint”正,“类名”, {‘好’“错误”});cl.ConvergenceInfo.Converged
Ans =逻辑1

cl是一个分离训练数据的SVM分类器ParData分为好区域和坏区域。使用预测该分类器的方法1可以将输入nx × 1向量分配到两个区域之一。

现在我们可以测试分类器的预测(正常vs损坏),从一个系统收集数据批量,该系统的参数以一种连续的方式从健康(模式= '正常')到完全损坏(模式= '损坏系统')的方式发生变化。为了模拟这个场景,我们将模型置于“恶化系统”模式。

set_param ([sysA,/机械系统的),“LabelModeActiveChoice”“DeterioratingSystem”);sim(sysA) ytv = logout . getelement (“y”) . values;ytv = squeeze(ytv. data);PredictedMode = cell(nr,1);ct = 1: nr zSegment = iddata (ytv ((ct-1) * 512 + (1:50 0)), [], Ts);mSegment = sest(zSegment, nx,“形式”“规范”“t”、Ts);PredictedMode(ct) = predict(cl, plist(esort(pole(mSegment))));结束I = strcmp(PredictedMode,‘好’);Tags = ones(nr,1);Tags(~I) = -1;t = (0:5120)'* t;模拟时间%时间= t(1:12 12:end-1);情节(时间(I)、标签(我),“g *”、时间(~我),标签(~我),的r *“MarkerSize”12)网格轴([0 20 -2 2])“绿色:正常,红色:故障”)包含(“数据评估时间”) ylabel (“预测”

图中显示,分类器预测到大约中点的行为是正常的,此后处于故障状态。

基于模型参数在线自适应的故障检测

前面的分析使用了系统运行过程中不同时间收集的批量数据。监视系统健康状况的另一种更方便的方法是创建系统行为的自适应模型。新的测量值被连续处理,并以递归的方式用于更新模型的参数。磨损或故障的影响由模型参数值的变化表示。

再考虑一下磨损的情况。随着系统老化,出现了更大的“咔嗒声”,表现为几种共振模式的激发以及系统峰值响应的上升。此场景在模型中描述pdmDeterioratingSystemEstimation与“变质系统”模式相同pdmMechanicalSystem除了为脱机识别而添加的脉冲凸点不存在。系统的响应传递给一个“递归多项式模型估计器”块,该块已被配置为估计ARMA模型结构的参数。实际系统在正常状态下启动,但在200秒的时间跨度内恶化到生命终止状态。

Initial_model = translatecov(@(x)idpoly(x),模型);sysB =“pdmDeterioratingSystemEstimation”;open_system (sysB);

“ARMA模型”块已使用前一节中导出的正常行为估计模型的参数和协方差数据在转换为多项式(ARMA)格式后进行了初始化。的translatecov ()函数的使用,使参数协方差数据也转换。该块使用“遗忘因子”算法,遗忘因子设置为略小于1,以在每个采样瞬间更新参数。遗忘因子的选择影响系统更新的速度。一个小的值意味着更新将有高的方差,而一个大的值将使估计器更难适应快速的变化。

模型参数估计用于更新输出频谱及其3-sd置信区域。当频谱的置信区域在相关频率上与健康系统的置信区域不重叠时,系统将明显发生变化。故障检测阈值在图中使用黑线显示,标记在某些频率下的最大允许增益。随着系统变化的积累,光谱会漂移到这条线上。这可以作为故障的可视化指示器,可用于在实际系统中调用维修。

运行模拟并观察频谱图的更新。

sim (sysB)

模型参数的运行估计也用于计算系统极点位置,然后将其输入支持向量机分类器,以预测系统是否处于“良好”或“故障”状态。这个决定也显示在情节中。当预测的归一化得分小于.3时,该决策被认为是暂定的(接近区分边界)。查看脚本pdmARMASpectrumPlot.m详细介绍了如何计算频谱和分类器预测的运行估计。

在Simulink外部使用自适应估计和绘图程序是可能的金宝apprecursiveARMA ()函数。“递归多项式模型估计器”块以及recursiveARMA ()函数支持用于部署目金宝app的的代码生成。

分类方案可以推广到有几种已知失效模式的情况。为此,我们需要多组分类器,其中一个模式指的是某种类型的故障。本例中没有探讨这些方面。

结论

该实例显示了系统识别方案与数据聚类和分类方法相结合如何帮助检测和隔离故障。讨论了连续批量分析和在线自适应方案。确定了测量输出信号的ARMA结构模型。在可以访问输入和输出信号的情况下,可以采用类似的方法,并且希望使用其他类型的模型结构,如状态空间或Box-Jenkins多项式模型。

在这个例子中,我们发现:

  1. 基于正常运行模型的残差相关性可以指示故障的开始。

  2. 采用系统行为的连续自适应模型,可以检测逐渐恶化的故障。在模型的特征上预设阈值,例如输出频谱的界限,可以帮助可视化故障的发生和发展。

  3. 当需要隔离故障源时,一种可行的方法是预先为相关故障模式创建单独的模型。然后,可以使用分类方法将系统的预测状态分配给这些模式之一。

相关的话题