主要内容

이번역페이지는최신내용을담고있지않습니다。최신내용을영문으로보려면여기를클릭하십시오。

시뮬레이션된데이터를사용한다중클래스결함검출

이예제에서는仿真金宝app软件모델을사용하여결함데이터와정상데이터를생성하는방법을보여줍니다。이데이터를사용하여여러결함조합을검출하는다중클래스분류기를개발합니다。이예제에서는삼중왕복펌프모델을사용하며,누,수막힘,베어링결함을포함합니다。

모델설정

zip파이예제에서는일에저장된여러지원파일을사용합니다。파일의압축을풀어서지원파일에액세스하고,모델파라미터를불러오고,왕복펌프라이브러리를만듭니다。

如果~ (' + 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;leak_area_set = max (leak_area_set 1 e-9);%泄漏区域不能为0blockinfactor_set=linspace(0.8,0.53,numParValues);承载因子_集=linspace(0,6e-4,数值);

펌프모델은잡음을포함하도록구성되므로동일한결함파라미터값으로모델을실행해도서로다른시뮬레이션출력값이생성됩니다。이는동일한결함상태및심각도에대해여러개의시뮬레이션결과가생성될수있음을의미하므로분류기를개발할때유용합니다。이러한결과를위한시뮬레이션을구성하려면값이결함없음,단일결함,두가지결함의조합,세가지결함의조합을나타내는결함파라미터값으로구성된벡터를만드십시오。각그룹(결함없음,단일결함등)에대해이렇게정의한결함파라미터값으로부터125개의결함값조합을만듭니다。이를통해총1000개의결함파라미터값의조합이만들어집니다。1000개의시뮬레이션을병렬로실행하면표준데스크탑에서약1시간이소요되며약620 mb의데이터가생성됩니다。시뮬레이션시간을줄이려면runAll = truerunAll = false。请注意,로변경하여오류조합의개수를20개로줄이십시오。데이터세트크기가클수록분류기성능이강력해집니다。

%设置每个故障组的元素个数runAll = false;如果runAll%创建大型数据集以构建健壮的分类器nPerGroup = 125;其他的%创建较小的数据集以减少模拟时间nPerGroup=20;% #好< UNRCH >结束无故障模拟leakArea = repmat (leak_area_set (1) nPerGroup, 1);blockingFactor = repmat (blockinfactor_set (1) nPerGroup, 1);bearingFactor = repmat (bearingfactor_set (1) nPerGroup, 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객체에의해정의된시뮬레이션을실행하고결과를로컬하위폴더에저장합니다。그런다음저장된결과에서simulationEnsembleDatastore를만듭니다。

%运行模拟并创建一个集成来管理模拟%的结果如果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个[08-SEP-2020 21:04:22]完成了160个模拟运行中的3个中的3个[08-SEP-2020 21:04:23] 160个仿真运行中的4个中的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个[08-sep-2020 21:04:48]完成了160个模拟运行中的8个[08-SEP-2020 21:04:49]完成了160个仿真运行中的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个仿真运行[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”“SimulationInput”];Reset (ens) data = read(ens)
data =1×2表qOut_meas SimulationInput  __________________ ______________________________ { 2001×1时间表}{1×1仿真软件。金宝appSimulationInput}
(流、flowP flowF faultValues] =预处理(数据);

유속과유속스펙트럼을플로팅합니다。플로팅된데이터는결함없는상태에대한것입니다。

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

유속스펙트럼은예상한주파수에공명피크가있음을나타냅니다。구체적으로보면,펌프모터속도는950转/ 15.833 hz이고,펌프에실린더3개가있으므로유속은3 * 15.833 hz = 47.5 hz에기본주파수를,47.5赫兹의배수에고조파를가질것으로예상됩니다。유속스펙트럼에서예상되는공명피크를명확히확인할수있습니다。펌프의실린더중하나에서발생한결함은펌프모터속도15.833赫兹와그고조파에서공명으로나타납니다。

유속스펙트럼과느린신호를통해상태지표가될수있을만한특징을대략적으로파악할수있습니다。구체적으로는평균,분산과같은일반적인신호통계량과스펙트럼특징이여기에해당합니다。피크크기를갖는주파수,15.833赫兹부근의에너지,47.5赫兹부근의에너지,100 hz이상에서의에너지와같은예상되는고조파와관련된스펙트럼상태지표가계산됩니다。스펙트럼첨도피크의주파수도계산됩니다。

상태지표를위한데이터변수와결함변수값을위한상태변수로앙상블을구성합니다。그런다음extractCI함수를호출하여특징을계산하고,writeToLastMemberRead명령을 사용하여 앙상블에 특징과 결함 변수 값을 추가합니다.extractCI함수는이예제의끝에정의되어있습니다。

ens.DataVariables = [ens.DataVariables;...“fPeak”“犁”“pMid”“pHigh”“pKurtosis”...“qMean”“qVar”“qSkewness”“qKurtosis”...“qPeak2Peak”“qCrest”“则”“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);包含(“赫兹”) 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;结束

서로다른결함상태와심각도하에서스펙트럼이예상주파수에서고조파를포함하는것을볼수있습니다。

펌프결함검출및분류하기

이전섹션에서는서로다른결함조합과심각도를갖는시뮬레이션결과에대응되는시뮬레이션앙상블의모든멤버에대해유속신호로부터상태지표를전처리하고계산했습니다。상태지표는펌프유속신호에서펌프결함을검출하고분류하는데사용할수있습니다。

상태지표를읽을수있도록시뮬레이션앙상블을구성하고,高및收集명령을사용하여모든상태지표와결함변수값을메모리로불러옵니다。

%获取数据以设计分类器。重置(ens) ens. selectedvariables = [...“fPeak”“犁”“pMid”“pHigh”“pKurtosis”...“qMean”“qVar”“qSkewness”“qKurtosis”...“qPeak2Peak”“qCrest”“则”“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查收我们则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

각앙상블멤버의결함변수값(데이터테이블에서행으로나타남)을여러결함플래그로변환할수있으며,여러결함플래그는각멤버의서로다른결함상태를캡처하는하나의플래그로결합할수있습니다。

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

상태지표를입력값으로받아서결합된결함플래그를반환하는분류기를만듭니다。2차다항식커널을사용하는서포트벡터머신을훈련시킵니다。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에가깝거나베어링결함값6.6 e-5가공칭값0에가까운경우임을알수있습니다。막힘결함값이작은경우의스펙트럼을플로팅하고결함없음상태와비교해보면스펙트럼이매우비슷하여검출이어려움을알수있습니다。0.77을막힘값결함없음상태로포함하여분류기를다시훈련시키면결함검출기의성능이대폭개선될것입니다。또는추가펌프측정값을사용해더많은정보를제공하면작은막힘결함을검출하는능력이개선될수있습니다。

%配置集成为只读取流和故障变量值ens.SelectedVariables = [“qOut_meas”“LeakFault”“BlockingFault”“BearingFault”];重置(实体)%将集合成员数据加载到内存中data =收集(高(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 &...data.LeakFault==1e-9&...数据。BearingFault = = 0;flow2 =数据(idx, 1);flow2 = flow2.qOut_meas {1};[flow2P, flow2F] = pspectrum (flow2);%绘制功率谱semilogx (...flow1F pow2db (flow1P),...flow2F pow2db (flow2P));包含(“赫兹”)传说(“小阻塞故障”“没有错”

결론

이예제에서는仿真金宝app软件모델을사용하여왕복펌프의결함을모델링하고,여러결함조합과심각도하에서모델을시뮬레이션하고,펌프출력유속에서상태지표를추출하고,상태지표를사용하여분류기가펌프결함을검출하도록훈련시키는방법을보여주었습니다。이예제에서는분류기를사용하여결함검출의성능을검토한결과크기가작은막힘결함은결함없음상태와매우비슷하기때문에안정적으로검출될수없다는사실을알수있었습니다。

지원함수

函数(流、flowSpectrum flowFrequencies faultValues] =预处理(数据)%辅助功能,对记录的往复泵数据进行预处理。%移除流量信号的前0.8秒tMin =秒(0.8);流= data.qOut_meas {1};流=流(流。时间> = tMin:);流。时间=流。时间——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”LeakFault,...“BlockingFault”BlockingFault,...“BearingFault”BearingFault};结束函数ci = extractCI(流、flowP flowF)辅助函数从流量信号中提取条件指示器%和频谱。找出功率谱中峰值幅度的频率。pMax = max (flowP);fPeak = flowF (flowP = = pMax);%计算低频范围10 ~ 20hz的功率。>= 10 & > <= 20;犁=总和(flowP(纤毛刷));%计算中频范围40hz ~ 60hz的功率。>= 40 & > <= 60;pMid =总和(flowP(纤毛刷));%计算高频范围> 100hz的功率。>= 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”,峰度(流量数据),...“qPeak2Peak”peak2peak (flow.Data),...查收我们的peak2rms (flow.Data),...“则”rms (flow.Data),...“qMAD”疯了(flow.Data),...“qCSRange”csFlowRange,...“fPeak”fPeak,...“犁”犁,...“pMid”pMid,...“pHigh”pHigh,...“pKurtosis”pKur (1)};结束

참고항목

관련항목