主要内容

采用Simu金宝applink生成故障数据

此示例显示如何使用Simulink模型来生成故障和健康数据。金宝app故障和健康数据用于开发一个条件监测算法。该示例使用传动系统和型号齿轮齿故障,传感器漂移故障和轴磨损故障。

传输系统模型

传输壳体模型使用Simscape Driveline块来模拟简单的传输系统。传动系统由扭矩驱动,驱动轴,离合器和连接到输出轴的高齿轮组成。

mdl ='pdmtransmissioncasing';Open_System(MDL)

传动系统包括监控壳体振动的振动传感器。壳体模型将轴角位移转换为壳体上的线性位移。壳体被建模为质量弹簧阻尼系统,并且从壳体中测量振动(壳体加速)。

Open_System([MDL'/套管'])

故障建模

传动系统包括振动传感器漂移、齿轮故障和轴磨损的故障模型。通过在传感器模型中引入偏移量,很容易对传感器漂移故障进行建模。偏移量由模型变量控制SDRIFT.,请注意sdrift = 0.意味着没有传感器故障。

Open_System([MDL'/振动传感器漂移'])

轴磨损故障由变体子系统建模。在这种情况下,子系统变型改变轴阻尼,但是变体子系统可用于完全改变轴模型实现。所选变体由模型变量控制Shaftwear.,请注意Shaftwear = 0.表示无轴故障。

Open_System([MDL'/ shaft'])

Open_System([MDL,'/轴/输出轴'])

轮齿故障是由在驱动轴的旋转固定的位置注入扰动转矩建模。轴位置以弧度测量并且当轴位置是围绕0的小窗口内的干扰力被施加到该轴上。干扰的大小由模型变量控制ToothFaultGain,请注意ToothFaultGain = 0意味着没有齿轮牙齿故障。

模拟故障和健康数据

传输模型配置有变量,可控制三种不同故障类型,传感器漂移,齿轮齿和轴磨损的存在和严重程度。通过改变模型变量,SDRIFT.ToothFaultGain, 和Shaftwear.,您可以为不同故障类型创建振动数据。使用数组金宝app仿真软件。SimulationInput对象定义许多不同的仿真方案。例如,为每个模型变量选择一个值数组,然后使用ndgrid函数创建金宝app仿真软件。SimulationInput为模型变量值的每个组合。

toothFaultArray = 2:2/10:0;%齿故障增益值sensordriftarray = -1:0.5:1;传感器漂移偏移值shaftweararray = [0 -1];%变型可用于驱动轴条件%创建包含所有值的n维数组[牙齿值,SensoldriftValues,Shaftwearvalues] =......ndgrid(Toothfaultarray,Sensordriftarray,Shaftweararray);CT = NUM​​EL(牙齿虚假值): -  1:1%为值的每个组合创建S金宝appimulink.SimulationInputsiminput = 金宝appsimulink.simulationInput(MDL);%修改模型参数siminput = setVariable(siminput,'toothfultgain',牙齿ultvalues(CT));siminput = setVariable(siminput,'闷闷',sensorDriftValues(CT));siminput = setVariable(siminput,“ShaftWear”,Shaftwearvalues(CT));%收集数组中的模拟输入gridSimulationInput (ct) = siminput;结束

类似地创建每个型号变量的随机值的组合。确保包括0.值,以便在组合中只表示这三种故障类型的子集。

rng (“默认”);%重置随机种子以进行再现性toothFaultArray = [0 -rand(1,6)]。%齿故障增益值sensordriftarray = [0 randn(1,6)/ 8];传感器漂移偏移值shaftweararray = [0 -1];%变型可用于驱动轴条件%创建包含所有值的n维数组[牙齿值,SensoldriftValues,Shaftwearvalues] =......ndgrid(Toothfaultarray,Sensordriftarray,Shaftweararray);CT = NUM​​EL(牙齿虚假值): -  1:1%为值的每个组合创建S金宝appimulink.SimulationInputsiminput = 金宝appsimulink.simulationInput(MDL);%修改模型参数siminput = setVariable(siminput,'toothfultgain',牙齿ultvalues(CT));siminput = setVariable(siminput,'闷闷',sensorDriftValues(CT));siminput = setVariable(siminput,“ShaftWear”,Shaftwearvalues(CT));%收集数组中的模拟输入randomSimulationInput (ct) = siminput;结束

与阵列金宝app仿真软件。SimulationInput定义的对象使用生成仿制性函数来运行模拟。这生成仿制性函数配置模型以将日志数据保存到文件,使用时间线格式进行信号记录并存储金宝app仿真软件。SimulationInput保存文件中的对象。这生成仿制性函数返回指示模拟是否成功完成的状态标志。

上面的代码创建了来自网格变量值的110个模拟输入98.模拟输入从随机变量的值给208个总模拟。在标准桌面上并行运行这208个模拟可能需要2个多小时,并生成约10GB的数据。为了方便起见,提供了只运行前10个模拟的选项。

%运行模拟并创建一个组合以管理模拟结果如果〜存在(fullfile(pwd,“数据”),“dir”)Mkdir(Fullfile(PWD,“数据”))%创建用于存储结果的目录结束runAll = true;如果runAll [ok,e] = generatessimulationensemble ([gridSimulationInput, randomSimulationInput],......fullfile(pwd,“数据”),“UseParallel”, 真的);其他的[确定,E] = generateSimulationEnsemble(gridSimulationInput(1:10),完整文件(PWD,“数据”));%#OK <* verch>结束
[28-Feb-2018 13:17:31]检查并行池的可用性…[28-Feb-2018 13:17:37]加载Simulin金宝appk on parallel workers…分析和传送文件给工人…完成。[28-Feb-2018 13:17:56]配置并行工作器上的模拟缓存文件夹…[28-Feb-2018 13:17:57] Running SetupFcn on parallel workers…[28-Feb-2018 13:18:01]并行工人的加载模型…[28-Feb-2018 13:18:02]将模型中使用的基本工作空间变量转移给并行工作者…[28-Feb-2018 13:18:07]运行模拟…[28-Feb-2018 13:18:29]完成了208次模拟运行中的2次[28-Feb-2018 13:18:29]完成了208次模拟运行中的3次…[28-Feb-2018 13:24:28]在208次模拟运行中完成204次[28-Feb-2018 13:24:28]在208次模拟运行中完成205次[28-Feb-2018 13:24:28]在208次模拟运行中完成206次[28-Feb-2018 13:24:28]在208次模拟运行中完成207次[28-Feb-2018 13:24:28]在208次模拟运行中完成207次[28-Feb-2018 13:24:29]在208次模拟运行中完成208次[28-Feb-2018 13:24:33]清理并行 workers...

生成仿制性运行并记录模拟结果。创建仿真集成来处理和分析仿真结果SimulationEneMbledAtastore.命令。

实体= simulationEnsembleDatastore (fullfile (pwd,“数据”));

处理仿真结果

SimulationEneMbledAtastore.命令创建指向仿真结果的集成对象。使用集成对象准备和分析集成的每个成员中的数据。集合对象列出了集合中的数据变量,默认情况下,所有变量都被选择用于读取。

实体
ex = simulationeSembledataStore与属性:Datavariables:[6×1字符串]独立variables:[0×0字符串]条件variables:[0×0字符串]选择variables:[6×1字符串] nummembers:208 lastmemberread:[0×0字符串]
ens.selectedvarialbles.
ans =6×1字符串数组“仿真”“Simulation MetaData”“Tacho”“振动”“Xfinal”“Xout”

为了分析,请阅读振动Tacho.信号与金宝app仿真软件。SimulationInput.这金宝app仿真软件。SimulationInput具有用于仿真的模型变量值,用于为集合成员创建故障标签。使用合奏命令获取合奏构件的数据。

ens.selectedvariables = [“振动”“测速”“模拟input”];数据=读取(ens)
data =1×3表振动tacho模拟___________________ ___________________ ________________________________________________________________________________金宝app

从返回的数据中提取振动信号并绘制它。

振动= data.vibration {1};绘图(振动.Time,Viaration.data)标题(“振动”)ylabel(“加速”

模拟的前10秒包含传输系统启动时的数据;为了进行分析,请丢弃这些数据。

idx =振动.time> =秒(10);振动=振动(IDX,:);振动.time =振动.time  - 振动.Time(1);

Tacho.信号包含驱动轴和负载轴旋转的脉冲,但分析,特别是时间同步平均,需要轴旋转的次数。下面的代码丢弃的前10秒Tacho.数据并找到轴旋转时间tachoPulses

转速计= data.Tacho {1};idx =转速计。时间> =秒(10);转速计=转速器(idx:);情节(tacho.Time tacho.Data)标题(“测速脉冲”) 传奇('传动轴''装载轴'%负载轴比驱动轴更慢地旋转

IDX = diff(tacho.data(:,2))> 0.5;tachpulses = tacho.time(find(idx)+1)-tacho.time(1)
tachoPulses =8×1时间数组2.8543 SEC 6.6508秒10.447秒244秒24.04秒21.837秒25.634秒29.43秒

金宝appSimulink.SimulationInput.Variables属性包含用于模拟的故障参数的值,这些值允许我们为每个集合成员创建故障标签。

var = data.SimulationInput {1} .Variables;idx = strcmp ({var。名称},'闷闷');如果任何(IDX)SF = ABS(vars(Idx).value)> 0.01;小漂移值不是故障其他的科幻小说= false;结束idx = strcmp ({var。名称},“ShaftWear”);如果任何(idx) sV = vars(idx)值< 0;其他的sV = false;结束如果任何(IDX)IDX =的strcmp({vars.Name}'toothfultgain');st = abs(vars(idx).value)<0.1;%小齿故障值不是故障其他的st = false.结束faultCode = sF + 2*sV + 4*sT;%a故障代码捕获不同的故障条件

将处理的振动和Tacho信号和故障标签添加到稍后使用的集合中。

sdata =表({振动},{tachoPulses},科幻,sV, sT, faultCode,......'variablenames',{“振动”'TachoPulses''sensordrift'“ShaftWear”'牙齿'“FaultCode”})
sdata =1×6表振动动脉振动速度牙齿牙齿牙齿故障代码________________________________________________________________________________________________________________________________________________________ [30106×1时间表] [8×1持续时间]真假假1
ens.DataVariables = [ens.DataVariables;“TachoPulses”];

合奏ConditionVariables属性可用于标识集成中包含条件或错误标签数据的变量。将属性设置为包含新创建的错误标签。

ens.ConditionVariables = [“sensordrift”“shaftwear”“牙齿”“FAURORCODE”];

上面的代码用于处理集合的一个成员。要处理上面的代码的所有合奏成员转换为函数prepareData并使用集合hasdata命令一个循环被用来应用prepareData所有合并成员。可以通过分区合并并并行处理集合分区来并行处理集合构件。

reset(ens) runLocal = false;如果runLocal%处理集合中的每个成员尽管Hasdata (ens) data = read(ens);addData = prepareData(数据);WriteTolastMemberRead(ex,adddata)结束其他的%将集合拆分为分区并并行处理每个分区n = numpartitions(ens,gcp);PARFORCt = 1:n subens = partition(ens,n, Ct);尽管Hasdata (subens) data = read(subens);addData = prepareData(数据);writeToLastMemberRead(subens的话,addData)结束结束结束

使用该集合的每个第10个成员的振动信号绘制hasdata命令提取振动信号。

重置(ens)ens.selectedvariables =“振动”;图,ct = 1;尽管Hasdata (ens) data = read(ens);如果mod(ct,10)== 0振动= data.vibration {1};绘图(振动.time,vigation.data)保持结束CT = CT + 1;结束持有离开标题('振动信号')ylabel(“加速”

仿真数据分析

既然数据已被清除并预处理数据已准备好提取功能以确定用于对不同故障类型进行分类的功能。首先配置集合,以便它只返回处理后的数据。

ens.selectedvariables = [“振动”“TachoPulses”];

对于组合中的每个成员计算许多基于时间和频谱的功能。这些包括信号统计,例如信号均值,方差,峰值,峰值,非线性信号特性,例如近似熵和Lyapunov指数,以及诸如振动信号的时间同步平均值的峰值频率的光谱特征以及振动信号的功率时间同步平均包络信号。这分析函数包含的提取功能的完整列表。通过示例的方式考虑计算时间同步的频谱平均振动信号。

Reset (ens) data = read(ens)
data =1×2表振动动力___________________ ______________ [30106×1时间表] [8×1持续时间]
振动= data.vibration {1};%将振动信号插入适用于FFT分析的周期性时基np = 2 ^地板(日志(高度(振动))/日志(2));dt = vibration.Time(结束)/ (np-1);电视= 0:dt: vibration.Time(结束);y =调整时间(振动、电视、'线性');%计算振动信号的时间同步平均值tp =秒(data.TachoPulses {1});vibrationTSA = tsa (y, tp);图绘制(vibrationTSA.ttTime vibrationTSA.tsa)标题('振动时间同步平均')ylabel(“加速”

%计算时间同步平均值的频谱np =元素个数(vibrationTSA);f = fft (vibrationTSA.tsa。*汉明(np)) / np;frTSA = f(1:地板(np / 2) + 1);%TSA频率响应WTSA =(0:NP / 2)/ NP *(2 * PI /秒(DT));%TSA频谱频率mTSA = abs (frTSA);%TSA频谱幅度图半径(WTSA,20 * log10(MTSA))标题(振动光谱的)xlabel('rad / s'

对应于峰值幅度的频率可以是一个可用于对不同故障类型进行分类的特征。下面的代码计算上述所有集合成员所提到的功能(运行此分析最多需要在标准桌面上的一个小时。可选代码以使用该集合并行运行分析划分命令提供。)在调用WriteTolastMemberRead之前将功能的名称添加到集合数据变量属性,以将计算的功能添加到每个集合成员。

重置(ens)ens.datavariables = [ens.datavariables;......“sigmean”“SigMedian”“SigRMS”“SigVar”“sigpeak”“sigpeak2peak”“sigskewness”......“sigkurtosis”“sigcrestfactor”“SigMAD”“SigRangeCumSum”“sigcorredimension”“SigApproxEntropy”......“siglyapexponent”“peakfreq”“高级重量”“envpower”“峰刺痛”];如果runLocal尽管Hasdata (ens) data = read(ens);addData = analyzeData(数据);writeToLastMemberRead(实体,addData);结束其他的%将集成划分为多个分区,并并行分析每个分区n = numpartitions(ens,gcp);PARFORCt = 1:n subens = partition(ens,n, Ct);尽管Hasdata (subens) data = read(subens);addData = analyzeData(数据);writeToLastMemberRead(subens的话,addData)结束结束结束

选择故障分类的功能

上面计算的功能用于构建分类器以对不同的故障条件进行分类。首先配置合奏以仅读取派生功能和故障标签。

featureVariables = analyzeData ('getfeaturenames');ens.DataVariables = [ens.DataVariables;featurevariables];ens.selectedvariables = [featurevariables;ens.conitionvariables];重置(ens)

将所有合奏成员的功能数据收集到一个表中。

Featureata =聚集(高(ens))
使用并行池“本地”评估高表达: -  PASS 1为1:在1.8分钟的评估中完成,在1.8167分钟内完成
featuredata =208×22表SigMean SigMedian SigRMS SigVar SigPeak SigPeak2Peak SigSkewness SigKurtosis SigCrestFactor SigMAD SigRangeCumSum SigCorrDimension SigApproxEntropy SigLyapExponent PeakFreq HighFreqPower EnvPower PeakSpecKurtosis SensorDrift ShaftWear ToothFault的faultcode ________ _________ _______ _______ _______ ____________ ___________ ___________ ______________ _______ ______________ ________________ ________________ _______________ ________ _____________ __________ ________________ ___________ _________ __________ _________ -0.94876 -0.9722 1.3726 0.983870.81571 3.6314 -0.041525 2.2666 2.0514 0.8081 28562 1.1427 0.031601 79.531 0 6.7528e-06 3.2349e-07 162.13真假假1 -0.97537 -0.98958 1.3937 0.99105 0.81571 3.6314 -0.023777 2.2598 2.0203 0.81017 29418 1.1362 0.03786 70.339 0 5.0788e-08 9.1568e-08 226.12真假假1 1.0502 1.0267 1.4449 0.98491 2.8157 3.6314 -0.04162 2.2658 1.9487 0.80853 31710 1.1479 0.031586 125.18 0 6.7416e-06 3.1343e-07 162.13真真假3 1.0227 1.0045 1。4288 0.99553 2.8157 3.6314 -0.016356 2.2483 1.9707 0.81324 30984 1.1472 0.032109 112.52 0 4.9934e-06 2.5787e-07 162.13 true true false 3 1.0123 1.0024 1.4202 0.99233 2.8157 3.6314 -0.014701 2.2542 1.9826 0.81156 30661 1.147 0.032891 109.02 0 3.619e-06 2.2397e-07 230.39 true true false 3 1.0275 1.0102 1.4338 1.0001 2.8157 3.6314 -0.02659 2.2439 1.9638 0.81589 31102 1.0975 0.033449 64.499 0 2.5493e-06 1.9224e-07 230.39 true true false 3 1.0464 1.0275 1.4477 1.0011 2.8157 3.6314 -0.042849 2.2455 1.9449 0.81595 31665 1.1417 0.034182 98.759 0 1.7313e-06 1.6263e-07 230.39 true true false 3 1.0459 1.0257 1.4402 0.98047 2.8157 3.6314 -0.035405 2.2757 1.955 0.80583 31554 1.1345 0.035323 44.304 0 1.1115e-06 1.2807e-07 230.39 true true false 3 1.0263 1.0068 1.4271 0.98341 2.8157 3.6314 -0.0165 2.2726 1.973 0.80624 30951 1.1515 0.03592 125.28 0 6.5947e-07 1.208e-07 162.13 true true false 3 1.0103 1.0014 1.4183 0.99091 2.8157 3.6314 -0.011667 2.2614 1.9853 0.80987 30465 1.0619 0.036514 17.093 0 5.2297e-07 1.0704e-07 230.39 true true false 3 1.0129 1.0023 1.419 0.98764 2.8157 3.6314 -0.010969 2.266 1.9843 0.80866 30523 1.1371 0.037234 84.568 0 2.1605e-07 8.774e-08 230.39 true true false 3 1.0251 1.0104 1.4291 0.9917 2.8157 3.6314 -0.023609 2.2588 1.9702 0.81048 30896 1.1261 0.037836 98.463 0 5.0275e-08 9.0495e-08 230.39 true true false 3 -0.97301 -0.99243 1.3928 0.99326 0.81571 3.6314 -0.012569 2.2589 2.0216 0.81095 29351 1.1277 0.038507 42.887 0 1.1383e-11 8.3005e-08 230.39 true false true 5 1.0277 1.0084 1.4315 0.99314 2.8157 3.6314 -0.013542 2.2598 1.9669 0.81084 30963 1.1486 0.038524 99.426 0 1.1346e-11 8.353e-08 226.12 true true true 7 0.026994 0.0075709 0.99697 0.99326 1.8157 3.6314 -0.012569 2.2589 1.8212 0.81095 1083.8 1.1277 0.038507 44.448 9.998 4.9172e-12 8.3005e-08 230.39 false false true 4 0.026943 0.0084639 0.99297 0.98531 1.8157 3.6314 -0.018182 2.2686 1.8286 0.80732 1466.6 1.1368 0.035822 93.95 1.8618 6.8872e-07 1.2185e-07 230.39 false false false 0 ⋮

考虑传感器漂移故障。使用fscnca命令,上面计算的所有特征作为预测器,传感器漂移故障标签(一个真假值)作为响应。这fscnca命令返回每个特征的权重,具有更高权重的功能在预测响应方面具有更高的重要性。对于传感器漂移故障,权重表明,两个特征是有明显的预测因子(信号累积总和范围和光谱峰度的峰值频率),并且其余特征几乎没有影响。

idxResponse =的strcmp(featureData.Properties.VariableNames,'sensordrift');idxLastFeature =找到(idxResponse)-1;用作潜在预测器的最后一个功能的%索引featureanalysis = fscnca(featureata {:,1:idxlastfeature},featureda.sensordrift);Featureanalysis.featureweights.
ans =18×10.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000⋮
IdxselectedFeature = Featureanalysis.featureweights> 0.1;classifySD = [featureData(:,idxSelectedFeature), featureData(:,idxResponse)]
classifySD =208×3表SigRangeCumSum PeakSpecKurtosis SensorDrift  ______________ ________________ ___________ 28562 162.13真29418 226.12真31710 162.13真30984 162.13真30661 230.39真31102 230.39真31665 230.39真31554 230.39真30951 162.13真的30465 230.39真30523 230.39真30896 230.39真的真的30963 226.12真的230.39 29351 1083.8230.39 false 1466.6 230.39 false⋮

分组的累积总和范围的直方图使我们能够深入了解该特征是传感器漂移故障的重要预测因子。

图直方图(classifySD.SigRangeCumSum (classifySD.SensorDrift),'binwidth'5 e3)包含(“信号累积和范围”)ylabel('数数') 抓住直方图(classifysd.sigrangecumsum(〜classifysd.sensordrift),'binwidth'、5 e3)离开传奇(“传感器漂移故障”“无传感器漂移故障”

直方图图表明,信号累积总和范围是用于检测传感器漂移故障的良好特征,但是当如果仅使用信号累积总和范围时可能存在误报,则可能存在误报。如果只使用信号累积总和范围,则可能存在误报分类传感器漂移。

考虑轴磨损故障。在这种情况下fscnca函数表明,有3个特征对故障有显著的预测作用(信号李雅普诺夫指数、峰值频率和谱峰态中的峰值频率),选择这些特征对轴磨损故障进行分类。

idxResponse =的strcmp(featureData.Properties.VariableNames,“ShaftWear”);featureAnalysis = fscnca (featureData {: 1: idxLastFeature}, featureData.ShaftWear);Featureanalysis.featureweights.
ans =18×10.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000⋮
IdxselectedFeature = Featureanalysis.featureweights> 0.1;classifysw = [featuredata(:,idxselectedfeature),featureda(:,idxresponse)]
classifysw =208×4表SigLyapExponent PeakFreq PeakSpecKurtosis ShaftWear  _______________ ________ ________________ _________ 79.531 0 162.13假70.339 0 226.12假125.18 230.39 162.13真的112.52 0 162.13真的109.02 0真的64.499 0 230.39真正98.759 0 230.39真的44.304 0 230.39真的125.28 0 162.13真的17.093 0 230.39真的84.568 0 230.39真的98.463 0230.39 true 42.887 0 230.39 false 99.426 0 226.12 true 44.448 9.998 230.39 false 93.95 1.8618 230.39 false⋮

信号Lyapunov指数的分组直方图表明为什么单独的特征不是一个很好的预测因子。

图表直方图(classifysw.siglyapexponent(classifysw.shaftwear))xlabel(“信号李雅普诺夫指数”)ylabel('数数') 抓住直方图(classifySW.SigLyapExponent (~ classifySW.ShaftWear))离开传奇('轴磨损过错''没有轴穿故障'

轴磨损特征选择表明需要多个特征对轴磨损故障进行分类,分组直方图确认这是最重要的特征(在这种情况下,李雅普诺夫指数)在故障和无故障场景中都有相似的分布,这表明需要更多的特征来正确地分类该故障。

终于考虑了牙齿故障,fscnca功能表明,有3个功能是故障的重要预测因子(信号累积总和范围,信号Lyapunov指数和光谱峰峰中的峰值频率)。选择这三种功能以将牙齿故障分类导致性能不佳的分类器。相反,使用6个最重要的功能。

idxResponse =的strcmp(featureData.Properties.VariableNames,'牙齿');featureanalysis = fscnca(featureata {:,1:idxlastfeature},featureata.toothfault);[〜,IdxselectedFeature] =排序(Featureanalysis.featureweights);classifytf = [featuredata(:,idxselectedfeature(end-5:结束)),featuredata(:,idxresponse)]
classifyTF =208×7表PeakFreq SigPeak SigCorrDimension SigLyapExponent PeakSpecKurtosis SigRangeCumSum ToothFault ________ _______ ________________ _______________ ________________ ______________ __________ 0 0.81571 1.1427 79.531 162.13 28562虚假0 0.81571 1.1362 70.339 226.12 29418虚假0 2.8157 1.1479 125.18 162.13 31710虚假0 2.8157 1.1472 112.52 162.13 30984虚假0 2.8157 1.147 109.02 230.39 30661虚假02.8157 1.0975 64.499 230.39 31102假0 2.8157 1.1417 98.759 230.39 31665假0 2.8157 1.1345 44.304 230.39 31554假0 2.8157 1.1515 125.28 162.13 30951假0 2.8157 1.0619 17.093 230.39 30465假0 2.8157 1.1371 84.568 230.39 30523假0 2.8157 1.1261 98.463 230.39 30896假0 0.815711.1277 42.887 230.39 29351 TRUE 0 2.8157 1.1486 99.426 226.12 30963 TRUE 9.998 1.8157 1.1277 44.448 230.39 1083.8 TRUE 1.8618 1.8157 1.1368 93.95 230.39 1466.6 FALSE⋮
图表直方图(classifytf.sigrangecumsum(classifytf.toothfault))xlabel(“信号累积和范围”)ylabel('数数') 抓住直方图(classifyTF.SigRangeCumSum (~ classifyTF.ToothFault))离开传奇(“齿故障”'无齿轮齿故障'

使用上述结果将多项式SVM分类为齿轮齿断层。将要素表拆分为用于培训和成员进行测试和验证的成员。使用培训成员使用培训构件使用svm分类器fitcsvm命令。

rng (“默认”%的再现性cvp = cvpartition(size(classifytf,1),'kfold'5);%随机划分数据进行训练和验证classifiertf = fitcsvm(......classifytf(cvp.training(1),1:结束-1),......classifyTF (cvp.training(1)、结束),......'骨箱''多项式'......'polynomialOrder'2,......'kernelscale'“汽车”......'boxconstraint',1,......'标准化',真的,......“类名”,(假;真正的]);

使用分类器将测试点分类使用预测命令并使用混乱矩阵检查预测的性能。

%在测试验证数据上使用分类器来评估性能actualValue = classifyTF {cvp.test(1),端};predictedValue =预测(classifierTF,classifyTF(cvp.test(1),1:端-1));通过计算和绘制混淆矩阵%来检查性能Confdata = ConfusionMat(实际值,预测值);H = Heatmap(Confdata,......'ylabel''实际齿轮牙齿故障'......'ydisplaylabels',{'错误的''真的'},......'xlabel''预测齿轮牙齿故障'......'xdisplaylabels',{'错误的''真的'},......“ColorbarVisible”'离开');

混淆矩阵表示分类器正确对所有非故障条件进行分类,但错误地对一个预期的故障条件分类为不是故障。增加分类器中使用的功能数量可以帮助提高性能。

总结

本实施例中通过工作流从Simulink中产生故障数据走去,使用模拟合奏来清理该模拟数据和提取功能。金宝app然后将提取的特征被用来建立用于所述不同故障类型的分类。

另请参阅

相关话题