主要内容

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

这个示例展示了如何使用Simulink模型来生成故障和健康数据。金宝app这些数据被用来开发一个多类分类器来检测不同的故障组合。该实例使用了三缸往复泵模型,包括泄漏、堵塞和轴承故障。

设置模型

这个示例使用了许多存储在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)

Open_System([MDL,“/泵”])

泵模型配置成模拟三种类型的故障;圆筒泄漏,阻塞入口和增加的轴承摩擦。这些故障被参数化为工作区变量,并通过泵块对话框配置。

模拟故障和健康数据

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

%定义故障参数变体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;leak_area_set = max (leak_area_set 1 e-9);%泄漏区域不能为0blockinfactor_set = linspace(0.8,0.53,numparvalues);ubsertFactor_set = Linspace(0,6e-4,NumParValues);

泵模型被配置为包括噪声,从而运行具有相同故障参数值的模型,将导致不同的仿真输出。这对于开发分类器是有用的,因为它意味着可以有多个模拟结果对于相同的故障状况和严重性。要为此类结果配置模拟,请创建故障参数值的向量,其中值表示没有故障,单个故障,两个故障的组合以及三个故障的组合。对于每个组(无故障,单个故障等),从上面定义的故障参数值创建125个故障值组合。这为此提供了1000个故障参数值组合。请注意,在标准桌面上并行运行这1000个模拟需要大约一个小时,并生成大约620MB的数据。要降低模拟时间,请通过更改将故障组合的数量减少到20runAll = truerunAll = false。请注意,更大的数据集产生更健壮的分类器。

%故障组中的元素数runAll = false;如果runAll%创建一个大型数据集以构建强大的分类器nPerGroup = 125;其他的%创建一个较小的数据集以减少模拟时间npergroup = 20;%#OK 结束%没有故障模拟leakArea = repmat (leak_area_set (1) nPerGroup, 1);blockingFactor = repmat (blockinfactor_set (1) nPerGroup, 1);bearingFactor = repmat (bearingfactor_set (1) nPerGroup, 1);%单故障模拟IDX = CEIL(10 * rand(npergroup,1));leakArea = [leakArea;LEAD_AREA_ET(IDX)'];blockingFactor = [blockingFactor; repmat (blockinfactor_set (1) nPerGroup, 1)];bearingFactor = [bearingFactor; repmat (bearingfactor_set (1) nPerGroup, 1)];IDX = CEIL(10 * rand(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”,泄露(CT));simInput (ct) = setVariable (simInput (ct),“block_in_factor_WKSP”,阻塞物(CT));simInput (ct) = setVariable (simInput (ct),“bearing_fault_frict_WKSP”bearingFactor (ct));simInput (ct) = setVariable (simInput (ct),“noise_seed_offset_WKSP”, ct-1);结束

使用生成仿制性函数来运行由金宝app仿真软件。SimulationInput对象,并将结果存储在本地子文件夹中。然后创建一个simulationEnsembleDatastore从存储的结果。

%运行模拟并创建一个组合以管理模拟%的结果如果isfolder ('。/数据'%删除现有垫文件删除(“/数据/ * .mat。”结束[确定,e] =生成idulateSenemble(SimInput,fullfile(“。”'数据'),“UseParallel”,真正的);
[08月-2020 21时01分46秒]使用“本地”的个人资料...连接到并行池(:6名工人的数量)检查并行池的可用性...开始并行池(parpool)。[08月-2020 21时02分27秒]并行的工人开始Simul金宝appink中... [08月-2020 21时02分55秒]配置模拟缓存文件夹上并行的工人... [08月-2020 21:二点55分]在平行工人加载模型... [08九月2020 21点03分02秒]转移模型中使用的平行工基工作区变量... [08九月2020 21点03分08秒]运行模拟... [08九月2020 21点04分21秒]已完成160 1的模拟运行[08九月2020 21点04分21秒]已完成2 160的模拟运行[08九月2020 21:04:22]已完成3 160的模拟运行[08九月2020 21点04分23秒]已完成4的160个模拟运行[08九月2020 21点04分24秒]已完成5 160的模拟运行[08-Sep-2020 21时04分24秒]已完成160 6的模拟运行[08九月2020 21时04分47秒]已完成160 7的模拟运行[08九月2020 21时04分48秒]已完成8的160个模拟运行[08九月2020 21点04分49秒]已完成160 9的模拟运行[08九月2020二十一点04分50秒]已完成10 160的模拟运行[08九月2020 21点04分52秒]完成11160个模拟运行[08硒P-2020 21时04分53秒]已完成160 12的模拟运行[08九月2020 21点05分14秒]已完成的160个模拟运行[08九月2020 21时05分15秒]已完成160模拟的14 13运行[08九月2020 21点05分17秒]已完成15 160的模拟运行[08九月2020 21点05分18秒]已完成16 160的模拟运行[08九月2020 21点05分二十秒]已完成的17个160模拟运行[08九月2020 21点05分21秒]已完成的160个模拟运行[08九月2020 21点05分41秒] 160的已完成19模拟运行[08九月2020 21:05 18: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...
ens = 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”“SimulationInput”];重置(ENS)数据=读取(ex)
data =1×2表qOut_meas SimulationInput  __________________ ______________________________ { 2001×1时间表}{1×1仿真软件。金宝appSimulationInput}
(流、flowP flowF faultValues] =预处理(数据);

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

%标称数字子图(211);绘图(flow.time,flow.data);子图(212);semilogx(flowf,pow2db(flowp));Xlabel('赫兹'

流谱揭示了在期望频率处的共振峰。具体来说,泵的电机转速为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”“qcrest”“qrms”“qMAD”“qCSRange”];ens.ConditionVariables = [“LeakFault”“BlockingFault”“BearingFault”];壮举= extractCI(流、flowP flowF);datatwrite = [faultValues, feat];writeToLastMemberRead(实体,dataToWrite {:})

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

%数字与名义和错误图中,次要情节(211);lFlow =情节(flow.Time flow.Data,'行宽',2);子图(212);lflowp = semilogx(flowf,pow2db(flowp),'行宽',2);Xlabel('赫兹') ct = 1;lColors = (lFlow。父母,“ColorOrder”);lIdx = 2;preprocess . %循环系统中所有成员%并计算每个成员的功能hasdata(ens)读取成员数据数据=读取(ens);来自成员数据的%预处理和提取特征(流、flowP flowF faultValues] =预处理(数据);壮举= extractCI(流、flowP flowF);%将提取的特征值添加到成员数据中datatwrite = [faultValues, feat];writeToLastMemberRead(实体,dataToWrite {:})每100个成员的%绘图成员信号和频谱如果mod(ct,100)== 0行(“父”,lflow.parent,“XData”,流。时间,“YData”,flow.data,...'颜色'lColors (lIdx:));线(“父”,lflowp.parent,“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”“qcrest”“qrms”“qMAD”“qCSRange”...“LeakFault”“BlockingFault”“BearingFault”];idxLastFeature = 14;%加载状态指示器数据到内存中data =收集(高(ens));
使用Parallel Pool 'local'计算tall表达式
11秒内完成评估
数据(1:10,:)
ans =.表10×17FPEAK犁PMID PHIGH pKurtosis qMean qVar qSkewness qKurtosis qPeak2Peak qCrest qRMS qMAD qCSRange LeakFault BlockingFault BearingFault ______ _______ ______ ______ _________ ______ ______ _________ _________ __________ ______ ______ ______ ________ _________ _____________ ____________ 43.909 0.84932 117.83 18.867 276.49 35.573 7.5235 -0.73064 2.778 13.86 1.1491 35.679 2.2319 42692 1E-09 0.8 0 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 1E-09 0.8 0 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.6E-06 0.71 0 40.699 6.0325 89.768 21.02 252.4832.617 6.7424 -0.70295 2.7538 12.264 1.1457 32.721 2.1208 39139 4E-07 0.8 6.6667e-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.8E-06 0.8 0.0006 43.969 33.122 141.94 24.284 154.8 34.682 8.6405 -0.53746 2.7521 15.6921.1955 34.807 2.3614 41620 1.2E-06 0.8 0 9.5096 25.219 31.388 13.27 65.397 21.352 6.7393 -0.25342 2.4885 13.704 1.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 25716 4E-07 0.8 0.00053333 9.0252 16.051 23.779 12.955 302.15 20.006 7.5907 -0.13753 2.2392 14.006 1.2837 20.195 2.302324010 2.4E-06 0.8 0.00053333 43.969 12.291 124.8 22.447 478.48 34.986 8.0954 -0.71245 2.9268 15.015 1.1585 35.15.015 1.1585 35.191212985 35.121 2.2984 41987 8E-07 0.8 0

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

%将错误变量值转换为标志数据。LeakFlag =数据。LeakFault > 1 e-6;数据。BlockingFlag =数据。BlockingFault < 0.8;数据。BearingFlag =数据。BearingFault > 0;数据。CombinedFlag = data.LeakFlag + 2 * data.BlockingFlag + 4 * data.BearingFlag;

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

RNG('默认'%的再现性预测器=数据(:,1:idxlastfeature);响应= data.combinedflag;cvp = cvpartition(大小(预测器,1),'kfold'5);%创建并训练分类器模板= templateSVM (...“KernelFunction”多项式的...“PolynomialOrder”2,...'kernelscale'“汽车”...“BoxConstraint”,1,...'标准化',真正的);combinedClassifier = fitcecoc (...预测器(cvp.tring(1),:),...响应(cvp.tring(1),:),...“学习者”模板,...“编码”“onevsone”...'classnames', (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))/ sum(confdata(:))
ans = 0.9375

检查未预测故障但未存在故障的情况。首先在验证数据中找到函数,其中实际故障是阻塞故障,但预测了没有故障。

vdata =数据(cvp.test(1),:);b1 =(amectualvalue == 2)&(predictedvalue == 0);FDATA = VDATA(B1,15:17)
fData =2×3表LeakFault BlockingFault BearingFault  _________ _____________ ____________ 1 e-09 0.74 0 8 e-07 0.59 0

在验证数据中找到函数,其中实际故障是轴承故障,但预测了无故障。

B2 =(amearyValue == 4)&(predigeValue == 0);VDATA(B2,15:17)
ans = 0×3空表

检查没有预测故障但确实存在故障的情况,表明它们发生在阻塞故障值0.77接近其标称值0.8,或轴承故障值6.6e-5接近其标称值0。绘制小阻塞故障值情况下的频谱,并与无故障情况进行比较,发现频谱非常相似,使得检测困难。重新训练分类器,但将阻塞值0.77作为非故障条件,将显著提高故障检测器的性能。另外,使用额外的泵测量可以提供更多的信息,并提高检测小堵塞故障的能力。

%配置集成为只读取流和故障变量值ens.SelectedVariables = [“qout_meas”“LeakFault”“BlockingFault”“BearingFault”];重置(ens)%将集合成员数据加载到内存中data =收集(高(ens));
使用Parallel Pool 'local'计算tall表达式
通过1 / 1:9.7秒完成评估9.8秒完成
%寻找错误预测的成员,以及%计算它的功率谱idx =...data.blockingfault == fdata.blockingfault(1)&...data.leakfault == fdata.leakfault(1)&...数据。BearingFault = = fData.BearingFault (1);flow1 =数据(idx, 1);flow1 = flow1.qOut_meas {1};[flow1P, flow1F] = pspectrum (flow1);%查找一个没有任何错误的成员idx =...数据。BlockingFault == 0.8 &...data.leakfault == 1e-9&...data.bearingfault == 0;Flow2 =数据(IDX,1);flow2 = flow2.qout_meas {1};[Flow2P,Flow2F] = PSPectrum(Flow2);%绘制功率谱semilogx(...flow1F pow2db (flow1P),...Flow2F,POW2DB(FLOW2P));Xlabel('赫兹') 传奇(“小阻塞故障”“没有错”

结论

此示例显示了如何使用Simulink模型在往复泵中模拟故障,模拟不金宝app同故障组合和严重性的模型,从泵输出流中提取条件指示器,并使用条件指示器培训分类器以检测泵故障。该示例使用分类器检查了故障检测的性能,并指出,小块阻塞故障与无故障条件非常相似,无法可靠地检测到。

金宝app支持功能

函数[流动,絮凝物,流量频,故障值] =预处理(数据)%辅助功能,对记录的往复泵数据进行预处理。%删除流量信号的1st 0.8秒tMin =秒(0.8);流= data.qOut_meas {1};流=流(流。时间> = tMin:);流。时间=流。时间——flow.Time (1);%确保以统一的采样率进行流量采样Flow = Retime(流量,“普通”“线性”'timestep',秒(1E-3));%从流量中去除平均值,计算流量谱Fa =流量;fa.data = fa.data  - 均值(fa.data);[Flowspectrum,Flowfruquence] = PSPectrum(FA,'surformlimits',[2 250]);%从SimulationInput中找到故障变量的值simin = data.simulationInput {1};vars = {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”LeakFault,...“BlockingFault”BlockingFault,...“BearingFault”,upansionfault};结束函数ci = extractCI(流、flowP flowF)辅助函数从流量信号中提取条件指示器%和频谱。找出功率谱中峰值幅度的频率。pMax = max (flowP);fPeak = flowF (flowP = = pMax);%计算低频范围10 ~ 20hz的功率。>= 10 & > <= 20;犁=总和(flowP(纤毛刷));%计算中频范围40hz ~ 60hz的功率。>= 40 & > <= 60;pMid =总和(flowP(纤毛刷));%计算高频范围> 100 Hz的功率。>= 100;pHigh =总和(flowP(纤毛刷));找出谱峰的频率[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”,kurtosis(flow.data),...“qPeak2Peak”peak2peak (flow.Data),...'qcrest'peak2rms (flow.Data),...“则”rms (flow.Data),...“qMAD”疯了(flow.Data),...'qcsrange',csflowrange,...“fPeak”,fpeak,...“犁”, 犁,...'pmid',pmid,...“pHigh”pHigh,...“pKurtosis”,pkur(1)};结束

另请参阅

相关的话题