主要内容

基于模拟数据的多类故障检测

此示例显示如何使用Simulink模型来生成故障和健康数据。金宝app数据用于开发多级分类器以检测故障的不同组合。该示例使用Triplex往复泵模型,包括泄漏,阻塞和轴承故障。

设置模型

这个示例使用了许多存储在zip文件中的支持文件金宝app。解压缩文件以访问支持文件,加载模型参数,并创建往复泵库。金宝app

如果〜存在(' + mech_hydro_forcesPS '“dir”)解压缩('pdmrecippump_金宝appsupportingfiles.zip'结束%负荷参数pdmRecipPump_Parameters%泵CAT_Pump_1051_DataFile_imported% CAD如果需要,%创建Simscape库如果存在('mech_hydro_forcesps_lib''文件')〜= 4 ssc_buildmech_hydro_forcesPS结束

往复泵模型

往复泵由电动机、泵壳、泵曲柄和泵柱塞组成。

mdl ='pdmrecippump';open_system (mdl)

(mdl open_system (,“/泵”])

所述泵型号配置为模拟三种类型的故障;汽缸泄漏,入口堵塞,轴承摩擦增加。这些错误被参数化为工作空间变量,并通过泵块对话框进行配置。

模拟故障和正常数据

为这三种故障类型中的每一种创建一个表示故障严重程度的值数组,范围从无故障到严重故障。

定义故障参数变化numparvalues = 10;Leak_area_set_factor = linspace(0.00,0.036,numparvalues);leak_area_set = leak_area_set_factor * trp_par.check_valve.in.max_area;LEAD_AREA_ET = MAX(LEAD_AREA_SET,1E-9);%泄漏区域不能为0blockinfactor_set = linspace (0.8, 0.53, numParValues);bearingfactor_set = linspace(0 6的军医numParValues);

由于泵的型号被设置为包含噪声,因此使用相同的故障参数值运行该型号会产生不同的仿真输出。这对于开发分类器很有用,因为这意味着对于相同的故障条件和严重程度可以有多个模拟结果。为了配置此类结果的模拟,创建故障参数值的向量,其中的值代表无故障、单个故障、两个故障的组合和三个故障的组合。对于每组(无故障、单个故障等),根据上面定义的故障参数值创建125个故障值组合。这总共提供了1000个故障参数值的组合。请注意,在标准桌面上并行运行这1000个模拟需要大约一个小时,并生成大约620MB的数据。为了减少模拟时间,可以通过改变故障组合的数量来减少到20个润尔=真实runall = false。注意A.更大的数据集产生更健壮的分类器。

%设置每个故障组的元素个数runAll = false;如果%创建大型数据集以构建健壮的分类器npergroup = 125;其他的%创建更小的数据集以减少模拟时间nPerGroup = 20;% #好< UNRCH >结束无故障模拟LeakeRea = Repmat(Leak_area_set(1),npergroup,1);blockingfactor = repmat(blockinfactor_set(1),npergroup,1);FiritesFactor = Repmat(AssitingFactor_Set(1),NPERGOUP,1);%单故障模拟idx =装天花板(10 *兰德(nPerGroup, 1));leakArea = [leakArea;leak_area_set (idx)];blockingFactor = [blockingFactor; repmat (blockinfactor_set (1) nPerGroup, 1)];bearingFactor = [bearingFactor; repmat (bearingfactor_set (1) nPerGroup, 1)];idx =装天花板(10 *兰德(nPerGroup, 1));leakArea = [leakArea;nPerGroup repmat (leak_area_set (1), 1)];blockingFactor = [blockingFactor; blockinfactor_set (idx)];bearingFactor = [bearingFactor; repmat (bearingfactor_set (1) nPerGroup, 1)]; idx = ceil(10*rand(nPerGroup,1)); leakArea = [leakArea; repmat(leak_area_set(1),nPerGroup,1)]; blockingFactor = [blockingFactor;repmat(blockinfactor_set(1),nPerGroup,1)]; bearingFactor = [bearingFactor;bearingfactor_set(idx)'];双故障模拟idxA =装天花板(10 *兰德(nPerGroup, 1));idxB =装天花板(10 *兰德(nPerGroup, 1));leakArea = [leakArea;leak_area_set (idxA)];blockingFactor = [blockingFactor; blockinfactor_set (idxB)];bearingFactor = [bearingFactor; repmat (bearingfactor_set (1) nPerGroup, 1)];idxA =装天花板(10 *兰德(nPerGroup, 1));idxB =装天花板(10 *兰德(nPerGroup, 1));leakArea = [leakArea;leak_area_set (idxA)]; blockingFactor = [blockingFactor;repmat(blockinfactor_set(1),nPerGroup,1)]; bearingFactor = [bearingFactor;bearingfactor_set(idxB)']; idxA = ceil(10*rand(nPerGroup,1)); idxB = ceil(10*rand(nPerGroup,1)); leakArea = [leakArea; repmat(leak_area_set(1),nPerGroup,1)]; blockingFactor = [blockingFactor;blockinfactor_set(idxA)']; bearingFactor = [bearingFactor;bearingfactor_set(idxB)'];三次故障模拟idxA =装天花板(10 *兰德(nPerGroup, 1));idxB =装天花板(10 *兰德(nPerGroup, 1));idxC =装天花板(10 *兰德(nPerGroup, 1));leakArea = [leakArea;leak_area_set (idxA)];blockingFactor = [blockingFactor; blockinfactor_set (idxB)];bearingFactor = [bearingFactor; bearingfactor_set (idxC)];

使用故障参数组合来创建金宝app仿真软件。SimulationInput对象。对于每个模拟输入,确保随机种子的设置不同,以产生不同的结果。

simminput (ct) = Simulink.SimulationInput金宝app(mdl);simInput (ct) = setVariable (simInput (ct),“leak_cyl_area_WKSP”leakArea (ct));simInput (ct) = setVariable (simInput (ct),'block_in_factor_wksp'blockingFactor (ct));simInput (ct) = setVariable (simInput (ct),'bearing_fault_frict_wksp'bearingFactor (ct));simInput (ct) = setVariable (simInput (ct),“noise_seed_offset_WKSP”,CT-1);结束

使用generateSimulationEnsemble函数来运行由金宝app仿真软件。SimulationInput上面定义的对象并将结果存储在本地子文件夹中。然后创建一个SimulationEneMbledAtastore.从存储的结果。

%运行模拟并创建一个集成来管理模拟%的结果如果isfolder (“。/数据”%删除现有的mat文件删除(“/数据/ * .mat。”结束(好的,e) = generateSimulationEnsemble (simInput fullfile (“。”“数据”),“UseParallel”,真的);
[08-SEP-2020 21:01:46]检查并行池的可用性...使用“本地”配置文件...启动并行池(Parpool)...连接到并行池(工人数:6)。[08-SEP-2020 21:02:27]在并行工人上启动Si金宝appmulink ... [08-Sep-2020 21:02:55]配置并行工人的模拟缓存文件夹... [08-SEP-2020 21:02:55]在平行工人上加载模型...... [08-sep-2020 21:03:02]将模型中使用的基础工作空间变量传输到平行工人... [08-SEP-2020 21:03:08]运行模拟...... [08-SEP-2020 21:04:21]完成了160个模拟运行中的1个中的1个[08-SEP-2020 21:04:21] 160个模拟运行中的2个中的2个[08-SEP-2020 21:04:22] 160个模拟运行中的3个中完成了3个[08-SEP-2020 21:04:23] 160个仿真运行中的4个[08-SEP-2020 21:04:24]完成了160个模拟运行中的5个[08-sep-2020 21:04:24]完成了160个仿真运行中的6个[08-SEP-2020 21:04:47] 160个模拟运行中的7个(160秒)[08-SEP-2020 21:04:48]中完成了160个模拟运行中的8个[08-SEP-2020 21:04:49]完成了16个仿真运行中的9个[08-SEP-2020 21:04:50] 160个仿真运行中的10个[08-SEP-2020 21:04:52]完成了11个160仿真运行[08-SEP-2020 21:04:53]完成了160个仿真运行中的12种[08-SEP-2020 21:05:14]完成了160个模拟运行中的13个[08-Sep-2020 21:05:15] 160个模拟中的14个跑步[08-SEP-2020 21:05:17]完成了160个仿真运行中的15个[08-SEP-2020 21:05:18]完成16个仿真运行中的16个(160秒)[08-SEP-2020 21:05:20]完成160个仿真运行中的17个[08-sep-2020 21:05:21]完成了160个模拟运行中的18个[08-sep-2020 21:05:41] 160个仿真运行中的19个[08-sep-2020 21:05:43] Completed 20 of 160 simulation runs [08-Sep-2020 21:05:45] Completed 21 of 160 simulation runs [08-Sep-2020 21:05:47] Completed 22 of 160 simulation runs [08-Sep-2020 21:05:49] Completed 23 of 160 simulation runs [08-Sep-2020 21:05:51] Completed 24 of 160 simulation runs [08-Sep-2020 21:06:08] Completed 25 of 160 simulation runs [08-Sep-2020 21:06:10] Completed 26 of 160 simulation runs [08-Sep-2020 21:06:13] Completed 27 of 160 simulation runs [08-Sep-2020 21:06:16] Completed 28 of 160 simulation runs [08-Sep-2020 21:06:18] Completed 29 of 160 simulation runs [08-Sep-2020 21:06:21] Completed 30 of 160 simulation runs [08-Sep-2020 21:06:34] Completed 31 of 160 simulation runs [08-Sep-2020 21:06:38] Completed 32 of 160 simulation runs [08-Sep-2020 21:06:41] Completed 33 of 160 simulation runs [08-Sep-2020 21:06:44] Completed 34 of 160 simulation runs [08-Sep-2020 21:06:48] Completed 35 of 160 simulation runs [08-Sep-2020 21:06:51] Completed 36 of 160 simulation runs [08-Sep-2020 21:07:01] Completed 37 of 160 simulation runs [08-Sep-2020 21:07:05] Completed 38 of 160 simulation runs [08-Sep-2020 21:07:09] Completed 39 of 160 simulation runs [08-Sep-2020 21:07:13] Completed 40 of 160 simulation runs [08-Sep-2020 21:07:17] Completed 41 of 160 simulation runs [08-Sep-2020 21:07:21] Completed 42 of 160 simulation runs [08-Sep-2020 21:07:32] Completed 43 of 160 simulation runs [08-Sep-2020 21:07:37] Completed 44 of 160 simulation runs [08-Sep-2020 21:07:41] Completed 45 of 160 simulation runs [08-Sep-2020 21:07:46] Completed 46 of 160 simulation runs [08-Sep-2020 21:07:50] Completed 47 of 160 simulation runs [08-Sep-2020 21:07:58] Completed 48 of 160 simulation runs [08-Sep-2020 21:08:04] Completed 49 of 160 simulation runs [08-Sep-2020 21:08:10] Completed 50 of 160 simulation runs [08-Sep-2020 21:08:16] Completed 51 of 160 simulation runs [08-Sep-2020 21:08:23] Completed 52 of 160 simulation runs [08-Sep-2020 21:08:33] Completed 53 of 160 simulation runs [08-Sep-2020 21:08:41] Completed 54 of 160 simulation runs [08-Sep-2020 21:08:51] Completed 55 of 160 simulation runs [08-Sep-2020 21:09:01] Completed 56 of 160 simulation runs [08-Sep-2020 21:09:11] Completed 57 of 160 simulation runs [08-Sep-2020 21:09:22] Completed 58 of 160 simulation runs [08-Sep-2020 21:09:34] Completed 59 of 160 simulation runs [08-Sep-2020 21:09:45] Completed 60 of 160 simulation runs [08-Sep-2020 21:09:57] Completed 61 of 160 simulation runs [08-Sep-2020 21:10:08] Completed 62 of 160 simulation runs [08-Sep-2020 21:10:16] Completed 63 of 160 simulation runs [08-Sep-2020 21:10:25] Completed 64 of 160 simulation runs [08-Sep-2020 21:10:36] Completed 65 of 160 simulation runs [08-Sep-2020 21:10:44] Completed 66 of 160 simulation runs [08-Sep-2020 21:10:57] Completed 67 of 160 simulation runs [08-Sep-2020 21:11:10] Completed 68 of 160 simulation runs [08-Sep-2020 21:11:21] Completed 69 of 160 simulation runs [08-Sep-2020 21:11:31] Completed 70 of 160 simulation runs [08-Sep-2020 21:11:44] Completed 71 of 160 simulation runs [08-Sep-2020 21:11:55] Completed 72 of 160 simulation runs [08-Sep-2020 21:12:11] Completed 73 of 160 simulation runs [08-Sep-2020 21:12:28] Completed 74 of 160 simulation runs [08-Sep-2020 21:12:43] Completed 75 of 160 simulation runs [08-Sep-2020 21:12:59] Completed 76 of 160 simulation runs [08-Sep-2020 21:13:12] Completed 77 of 160 simulation runs [08-Sep-2020 21:13:27] Completed 78 of 160 simulation runs [08-Sep-2020 21:13:43] Completed 79 of 160 simulation runs [08-Sep-2020 21:13:58] Completed 80 of 160 simulation runs [08-Sep-2020 21:14:18] Completed 81 of 160 simulation runs [08-Sep-2020 21:14:30] Completed 82 of 160 simulation runs [08-Sep-2020 21:14:36] Completed 83 of 160 simulation runs [08-Sep-2020 21:14:42] Completed 84 of 160 simulation runs [08-Sep-2020 21:14:47] Completed 85 of 160 simulation runs [08-Sep-2020 21:14:53] Completed 86 of 160 simulation runs [08-Sep-2020 21:14:59] Completed 87 of 160 simulation runs [08-Sep-2020 21:15:05] Completed 88 of 160 simulation runs [08-Sep-2020 21:15:12] Completed 89 of 160 simulation runs [08-Sep-2020 21:15:18] Completed 90 of 160 simulation runs [08-Sep-2020 21:15:26] Completed 91 of 160 simulation runs [08-Sep-2020 21:15:33] Completed 92 of 160 simulation runs [08-Sep-2020 21:15:40] Completed 93 of 160 simulation runs [08-Sep-2020 21:15:46] Completed 94 of 160 simulation runs [08-Sep-2020 21:15:53] Completed 95 of 160 simulation runs [08-Sep-2020 21:16:00] Completed 96 of 160 simulation runs [08-Sep-2020 21:16:07] Completed 97 of 160 simulation runs [08-Sep-2020 21:16:14] Completed 98 of 160 simulation runs [08-Sep-2020 21:16:21] Completed 99 of 160 simulation runs [08-Sep-2020 21:16:29] Completed 100 of 160 simulation runs [08-Sep-2020 21:16:36] Completed 101 of 160 simulation runs [08-Sep-2020 21:16:41] Completed 102 of 160 simulation runs [08-Sep-2020 21:16:48] Completed 103 of 160 simulation runs [08-Sep-2020 21:16:53] Completed 104 of 160 simulation runs [08-Sep-2020 21:16:58] Completed 105 of 160 simulation runs [08-Sep-2020 21:17:02] Completed 106 of 160 simulation runs [08-Sep-2020 21:17:10] Completed 107 of 160 simulation runs [08-Sep-2020 21:17:15] Completed 108 of 160 simulation runs [08-Sep-2020 21:17:21] Completed 109 of 160 simulation runs [08-Sep-2020 21:17:26] Completed 110 of 160 simulation runs [08-Sep-2020 21:17:32] Completed 111 of 160 simulation runs [08-Sep-2020 21:17:37] Completed 112 of 160 simulation runs [08-Sep-2020 21:17:43] Completed 113 of 160 simulation runs [08-Sep-2020 21:17:48] Completed 114 of 160 simulation runs [08-Sep-2020 21:17:54] Completed 115 of 160 simulation runs [08-Sep-2020 21:18:00] Completed 116 of 160 simulation runs [08-Sep-2020 21:18:05] Completed 117 of 160 simulation runs [08-Sep-2020 21:18:12] Completed 118 of 160 simulation runs [08-Sep-2020 21:18:18] Completed 119 of 160 simulation runs [08-Sep-2020 21:18:24] Completed 120 of 160 simulation runs [08-Sep-2020 21:18:30] Completed 121 of 160 simulation runs [08-Sep-2020 21:18:36] Completed 122 of 160 simulation runs [08-Sep-2020 21:18:42] Completed 123 of 160 simulation runs [08-Sep-2020 21:18:49] Completed 124 of 160 simulation runs [08-Sep-2020 21:18:57] Completed 125 of 160 simulation runs [08-Sep-2020 21:19:03] Completed 126 of 160 simulation runs [08-Sep-2020 21:19:09] Completed 127 of 160 simulation runs [08-Sep-2020 21:19:14] Completed 128 of 160 simulation runs [08-Sep-2020 21:19:20] Completed 129 of 160 simulation runs [08-Sep-2020 21:19:28] Completed 130 of 160 simulation runs [08-Sep-2020 21:19:35] Completed 131 of 160 simulation runs [08-Sep-2020 21:19:41] Completed 132 of 160 simulation runs [08-Sep-2020 21:19:47] Completed 133 of 160 simulation runs [08-Sep-2020 21:19:54] Completed 134 of 160 simulation runs [08-Sep-2020 21:20:03] Completed 135 of 160 simulation runs [08-Sep-2020 21:20:12] Completed 136 of 160 simulation runs [08-Sep-2020 21:20:19] Completed 137 of 160 simulation runs [08-Sep-2020 21:20:27] Completed 138 of 160 simulation runs [08-Sep-2020 21:20:35] Completed 139 of 160 simulation runs [08-Sep-2020 21:20:43] Completed 140 of 160 simulation runs [08-Sep-2020 21:20:50] Completed 141 of 160 simulation runs [08-Sep-2020 21:20:56] Completed 142 of 160 simulation runs [08-Sep-2020 21:21:03] Completed 143 of 160 simulation runs [08-Sep-2020 21:21:13] Completed 144 of 160 simulation runs [08-Sep-2020 21:21:19] Completed 145 of 160 simulation runs [08-Sep-2020 21:21:25] Completed 146 of 160 simulation runs [08-Sep-2020 21:21:32] Completed 147 of 160 simulation runs [08-Sep-2020 21:21:42] Completed 148 of 160 simulation runs [08-Sep-2020 21:21:49] Completed 149 of 160 simulation runs [08-Sep-2020 21:21:57] Completed 150 of 160 simulation runs [08-Sep-2020 21:22:05] Completed 151 of 160 simulation runs [08-Sep-2020 21:22:14] Completed 152 of 160 simulation runs [08-Sep-2020 21:22:22] Completed 153 of 160 simulation runs [08-Sep-2020 21:22:31] Completed 154 of 160 simulation runs [08-Sep-2020 21:22:39] Completed 155 of 160 simulation runs [08-Sep-2020 21:22:47] Completed 156 of 160 simulation runs [08-Sep-2020 21:22:55] Completed 157 of 160 simulation runs [08-Sep-2020 21:23:03] Completed 158 of 160 simulation runs [08-Sep-2020 21:23:12] Completed 159 of 160 simulation runs [08-Sep-2020 21:23:21] Completed 160 of 160 simulation runs [08-Sep-2020 21:23:23] Cleaning up parallel workers...
实体= simulationEnsembleDatastore (fullfile (“。”“数据”));

对仿真结果进行特征处理和提取

该模型配置为记录泵输出压力、输出流量、电机转速和电机电流。

ens.DataVariables
ans =8×1的字符串"SimulationInput" "SimulationMetadata" "iMotor_meas" "pIn_meas" "pOut_meas" "qIn_meas" "qOut_meas" "wMotor_meas"

对于集合中的每个成员预处理泵输出流量和基于泵输出流量的计算条件指示。条件指示器后来用于故障分类。对于预处理,请删除输出流程的前0.8秒,因为这包含来自仿真和泵启动的瞬态。作为预处理的一部分计算输出流程的功率谱,并使用SimulationInput返回故障变量的值。

配置集合,以便只读取兴趣的变量并调用进行预处理函数,该函数在本示例的最后定义。

ens.selectedvariables = [“qOut_meas”“模拟input”];Reset (ens) data = read(ens)
data =1×2表qout_meas simulationInput __________________ ______________________________ {2001×1时间表} {1×1 simulin金宝appk.simulationInpult}
(流、flowP flowF faultValues] =预处理(数据);

绘制流量和流量频谱。绘制的数据是为无故障的情况。

%数字标称值次要情节(211);情节(flow.Time flow.Data);次要情节(212);semilogx (flowF pow2db (flowP));包含(“赫兹”

流谱揭示了在期望频率处的共振峰。具体来说,泵的电机转速为950 rpm,或15.833 Hz,由于泵有3个气缸,流量预计在3*15.833 Hz,或47.5 Hz,以及在47.5 Hz的倍数谐波。流谱清楚地显示出预期的共振峰。在泵的一个汽缸故障将导致在泵电机转速,15.833 Hz及其谐波共振。

流谱和慢信号给出了一些可能的条件指标。具体来说,是常见的信号统计量,如均值、方差等,以及频谱特征。计算与预期谐波有关的频谱状况指标,例如峰值幅度的频率、15.833 Hz左右的能量、47.5 Hz左右的能量、100 Hz以上的能量。并计算了谱峰的频率。

配置条件指标的数据变量和故障变量值的条件变量。然后调用extractCI函数来计算特征,并使用writeToLastMemberRead命令,将特性和故障变量值添加到集成。的extractCI函数在本例的最后定义。

ens.DataVariables = [ens.DataVariables;......“fPeak”“犁”“pMid”“pHigh”“pkurtosis”......“Qmean”“qVar”“qskewness”“qkurtosis”......“qPeak2Peak”“查收我们”“则”“qmad”“qCSRange”];ens.ConditionVariables = [“泄漏跳”“BlockingFault”“BearingFault”];壮举= extractCI(流、flowP flowF);datatwrite = [faultValues, feat];writeToLastMemberRead(实体,dataToWrite {:})

上述代码预处理并计算模拟集成的第一个成员的条件指示器。使用集合对集合中的所有成员重复此操作hasdata命令。为了得到不同故障条件下的仿真结果,每绘制集合的百分之一元素图。

%数字与名义和错误图,子图(211);lflow = plot(flow.time,flow.data,“线宽”2);次要情节(212);lFlowP = semilogx (flowF pow2db (flowP),“线宽”2);包含(“赫兹”) ct = 1;lColors = (lFlow。父母,'colorOrder');lidx = 2;Preprocess中的所有成员循环%循环%并计算每个成员的特征hasdata(实体)读取成员数据data =阅读(ens);%对成员数据进行预处理和提取特征(流、flowP flowF faultValues] =预处理(数据);壮举= extractCI(流、flowP flowF);%将提取的特征值添加到成员数据中datatwrite = [faultValues, feat];writeToLastMemberRead(实体,dataToWrite {:})%绘制每100个成员的成员信号和频谱如果Mod (ct,100) == 0 line(“父”, lFlow。父母,'xdata',流。时间,“YData”,流。数据,......“颜色”lColors (lIdx:));线(“父”, lFlowP。父母,'xdata',flowf,“YData”pow2db (flowP),......“颜色”lColors (lIdx:));如果lIdx == size(lColors,1);其他的lIdx = lIdx + 1;结束结束Ct = Ct + 1;结束

请注意,在不同的故障条件和严重程度下,频谱包含在预期频率的谐波。

泵故障的检测和分类

前一节对仿真集合中所有成员的流量信号进行预处理和条件指标计算,对应不同故障组合和严重程度的仿真结果。状态指示器可用于从泵流量信号中检测和分类泵故障。

配置模拟集成以读取条件指示器,并使用tall和gather命令将所有条件指示器和故障变量值加载到内存中

%获取数据以设计分类器。重置(ens) ens. selectedvariables = [......“fPeak”“犁”“pMid”“pHigh”“pkurtosis”......“Qmean”“qVar”“qskewness”“qkurtosis”......“qPeak2Peak”“查收我们”“则”“qmad”“qCSRange”......“泄漏跳”“BlockingFault”“BearingFault”];IdxlastFeature = 14;%加载状态指示器数据到内存中数据=聚集(高(ens));
使用Parallel Pool 'local'计算tall表达式
- 第1条:1:在11秒内完成的11秒评估完成
数据(1:10,:)
ans =表10×17fPeak犁pMid pHigh pKurtosis qMean qVar qSkewness qKurtosis qPeak2Peak查收我们则qMAD qCSRange LeakFault BlockingFault BearingFault  ______ _______ ______ ______ _________ ______ ______ _________ _________ __________ ______ ______ ______ ________ _________ _____________ ____________ 43.909 0.84932 117.83 18.867 276.49 35.573 7.5235 -0.730642.778 13.86 1.1491 35.679 2.2319 42692 0 1 e-09 0.8 43.909 0.46288 126.04 18.969 12.417 35.577 7.8766 -0.70939 2.63 13.336 1.1451 35.688 2.3235 42699 0 1 e-09 0.8 44.03 66.853 151.07 23.624 230.13 34.357 9.4974 -0.54522 2.8046 15.243 1.1665 34.495 2.4703 41231 1.6 e-06 0.71 0 40.699 6.0325 89.768 21.02 252.48 32.617 6.7424 -0.70295 2.7538 12.2640.8 - 6.6667 1.1457 32.721 2.1208 39139个4 e-07 e-05 8.6012 14.366 29.295 9.8881 485.93 18.623 9.325 -0.02553 2.0546 14.315 1.3422 18.871 2.6236 22347 2.8 e-06 0.8 0.0006 43.969 33.122 141.94 24.284 154.8 34.682 8.6405 -0.53746 2.7521 15.692 1.1955 34.807 2.3614 41620 1.2 e-06 0.8 0 9.5096 25.219 31.388 13.27 65.397 21.352 6.7393 -0.25342 2.4885 13.7041.2738 21.509 2.1357 25619 2e-06 0.8 0.00046667 26.83 1.114 31.794 15.963 434.6 21.432 3.6724 -0.44013 2.6938 10.304 1.2108 21.517 1.5589 2571615.015 1.1585 35.101 2.2984 41987 8e-07 0.8 0

每个集合成员的故障变量值(数据表中的行)可以转换为故障标志,故障标志组合到捕获每个成员的不同故障状态的单个标志。

%将故障变量值转换为标志data.leakflag = data.leakfault> 1e-6;data.blockingflag = data.blockingfault <0.8;data.bearingflag = data.bearingfault> 0;data.combinedflag = data.leakflag + 2 * data.blockingflag + 4 * data.bearingflag;

创建一个分类器,该分类器将条件指示器作为输入,并返回组合的错误标志。训练一个使用二阶金宝app多项式核的支持向量机。使用cvpartition命令将集合成员分区成用于培训和用于验证的集合。

rng (“默认”%的再现性预测=数据(:,1:idxLastFeature);响应= data.CombinedFlag;本量利= cvpartition(大小(预测,1),“KFold”5);%创建和培训分类器模板= templateSVM (......“KernelFunction”多项式的......'polynomialOrder'2,......“KernelScale”“汽车”......'boxconstraint', 1......“标准化”,真正的);combinedClassifier = fitcecoc (......预测(cvp.training (1):)......响应(cvp.training (1):)......“学习者”模板,......“编码”'Onevsone'......“类名”, (0;1;2;3;4;5;6;7);

使用验证数据检查训练分类器的性能,并在混淆图上绘制结果。

通过计算和绘制混淆矩阵来检查性能actualValue =响应(cvp.test (1):);predictedValue = predict(combinedClassifier, predictors(cvp.test(1),:));confdata = confusionmat (actualValue predictedValue);图,标签= {“没有”“泄漏”“阻止”“泄露”&阻塞“轴承”......'轴承和泄漏'轴承和阻塞的“所有”};h =热图(confdata,......'ylabel'“实际泄漏故障”......“YDisplayLabels”、标签......“包含”“预测故障”......“XDisplayLabels”、标签......“ColorbarVisible”“关闭”);

混淆图显示了每个故障组合正确预测故障组合的次数(图的对角线项)和错误预测故障组合的次数(非对角线项)。

混淆图表明分类器没有正确地分类某些故障条件(非对角项)。然而,没有错误的条件被正确地预测。在一些地方,当出现故障时(第一列)预测了无故障条件,否则预测了故障,尽管它可能不是完全正确的故障条件。总体上验证的准确率为84%,预测错误的准确率为98%。

%计算分类器的整体准确性sum(诊断接头(confdata)) /笔(confdata (:))
ans = 0.5000
%计算分类器在预测时的准确率我知道有故障1-sum (confdata(2:最终,1))/笔(confdata (:))
ans = 0.9375

检查没有预测到故障但确实存在故障的情况。首先在验证数据中找到实际故障为阻塞故障但预测为无故障的情况。

vData =数据(cvp.test (1):);b1 = (actualValue==2) & (predictedValue==0);fData = vData (b1,十五17)
fData =2×3表LeakFault BlockingFault BearingFault  _________ _____________ ____________ 1 e-09 0.74 0 8 e-07 0.59 0

在验证数据中找出实际故障是轴承故障但预测没有故障的情况。

b2 = (actualValue==4) & (predictedValue==0);vData (b2,十五17)
Ans = 0×3空表

检查没有故障预测的情况,但存在故障的情况显示,当堵塞故障值为0.77的阻塞故障靠近其标称值0.8时,或者轴承故障值接近其标称值0.用小阻塞故障值绘制频谱,并与无故障情况进行比较,显示光谱非常相似的使检测难以。重新培训分类器,但包括0.77的阻塞值,因为非故障条件会显着提高故障检测器的性能。或者,使用额外的泵测量可以提供更多信息并提高检测小阻挡故障的能力。

%配置集成为只读取流和故障变量值ens.selectedvariables = [“qOut_meas”“泄漏跳”“BlockingFault”“BearingFault”];重置(实体)%将集合成员数据加载到内存中数据=聚集(高(ens));
使用Parallel Pool 'local'计算tall表达式
通过1 / 1:9.7秒完成评估9.8秒完成
查找被错误预测的成员,并且%计算它的功率谱Idx =.......数据。BlockingFault == fData.BlockingFault(1) &......数据。LeakFault == fData.LeakFault(1) &......数据。BearingFault = = fData.BearingFault (1);flow1 =数据(idx, 1);flow1 = flow1.qOut_meas {1};[flow1P, flow1F] = pspectrum (flow1);%查找一个没有任何错误的成员Idx =.......数据。BlockingFault == 0.8 &......数据。LeakFault == 1e-9 &......数据。BearingFault = = 0;flow2 =数据(idx, 1);flow2 = flow2.qOut_meas {1};[flow2P, flow2F] = pspectrum (flow2);%绘制功率谱semilogx (......flow1F pow2db (flow1P),......flow2F pow2db (flow2P));包含(“赫兹”)传说(“小阻塞故障”'没有错'

结论

该实例展示了如何利用Simulink模型对往复泵故障进行建模,仿真金宝app该模型在不同故障组合和严重程度下,从泵输出流量中提取工况指标,并用工况指标训练分类器检测泵故障。该示例检查了使用分类器进行故障检测的性能,并指出小阻塞故障与无故障情况非常相似,无法可靠地检测。

金宝app支持功能

函数(流、flowSpectrum flowFrequencies faultValues] =预处理(数据)%辅助功能,对记录的往复泵数据进行预处理。%移除流量信号的前0.8秒tmin =秒(0.8);flow = data.qout_meas {1};flow = flow(flow.time> = tmin,:);flow.time = flow.time  -  flow.time(1);%确保以统一的采样率进行流量采样流=调整时间(流,“普通”'线性'“步伐”秒(1 e - 3));%从流中取出平均值并计算流程谱fA =流;足总。Data =。数据——意味着(fA.Data);[flowSpectrum, flowFrequencies] = pspectrum(足总,“FrequencyLimits”[250]);%从SimulationInput中找到故障变量的值思敏= data.SimulationInput {1};var = {simin.Variables.Name};idx = strcmp (var,“leak_cyl_area_WKSP”);LeakFault = simin.Variables (idx) value;idx = strcmp (var,'block_in_factor_wksp');BlockingFault = simin.Variables (idx) value;idx = strcmp (var,'bearing_fault_frict_wksp');BearingFault = simin.Variables (idx) value;%收集单元格数组中的故障值faultValues = {......'泄漏'LeakFault,......'阻止',阻塞事实,......'autingfault'BearingFault};结束函数CI = ExtractCi(流量,流量,流量)%辅助功能从流量信号提取条件指示灯%和光谱。找出功率谱中峰值幅度的频率。pMax = max (flowP);fPeak = flowF (flowP = = pMax);%计算低频范围10-20 Hz的功率。>= 10 & > <= 20;犁=总和(flowP(纤毛刷));%计算中频范围40hz ~ 60hz的功率。>= 40 & > <= 60;pMid =总和(flowP(纤毛刷));%计算高频范围> 100hz的功率。frange = flowf> = 100;phigh = sum(flowp(frange));找出谱峰的频率[PKUR,FKUR] = pKurtosis(流量);PKUR = FKUR(PKUR == MAX(PKUR));%计算流量累积和范围。csFlow = cumsum (flow.Data);csFlowRange = max (csFlow)分钟(csFlow);%收集单元格数组中的特征和特征值。%增加流量统计量(平均值、方差等)和公共信号对电池阵列的%特性(RMS,Peak2Peak等)。ci = {......“qMean”,意味着(flow.Data),......“qVar”var (flow.Data),......“qSkewness”偏态(flow.Data),......“qKurtosis”峰度(flow.Data),......“qPeak2Peak”peak2peak (flow.Data),......查收我们的peak2rms (flow.Data),......“则”rms (flow.Data),......“qMAD”疯了(flow.Data),......“qCSRange”csFlowRange,......“fPeak”fPeak,......“犁”犁,......“pMid”pMid,......“pHigh”pHigh,......“pKurtosis”pKur (1)};结束

另请参阅

相关话题