主要内容

使用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 = 0意味着没有齿轮齿故障。

模拟故障和健康数据

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

牙齿arrawaray = -2:2/10:0;%齿错增益值sensorDriftArray = 1:0.5:1;%传感器漂移偏移值shaftweararray = [0 -1];%变量可用于传动轴条件%创建一个n维数组,其中包含所有值的组合[牙齿值,SensoldriftValues,Shaftwearvalues] =ndgrid(Toothfaultarray,Sensordriftarray,Shaftweararray);为了CT = NUM​​EL(牙齿虚假值): -  1:1%创建Simulink金宝app。每个值组合的SimulationInputsiminput = 金宝appsimulink.simulationInput(MDL);%修改模型参数siminput = setVariable (siminput,'toothfultgain',牙齿ultvalues(CT));siminput = setVariable (siminput,“SDrift”sensorDriftValues (ct));siminput = setVariable (siminput,'shaftwear'shaftWearValues (ct));在数组中收集模拟输入GridSimulationInput(CT)= Siminput;结尾

类似地,为每个模型变量创建随机值的组合。确保包括0值使得只有表示三个故障类型的子集的组合。

RNG('默认');%重置随机种子以进行再现性牙faultarray = [0 -rand(1,6)];%齿错增益值sensordriftarray = [0 randn(1,6)/ 8];%传感器漂移偏移值shaftweararray = [0 -1];%变量可用于传动轴条件%创建一个n维数组,其中包含所有值的组合[牙齿值,SensoldriftValues,Shaftwearvalues] =ndgrid(Toothfaultarray,Sensordriftarray,Shaftweararray);为了ct =元素个数(toothFaultValues): 1:1%创建Simulink金宝app。每个值组合的SimulationInputsiminput = 金宝appsimulink.simulationInput(MDL);%修改模型参数siminput = setVariable (siminput,'toothfultgain',牙齿ultvalues(CT));siminput = setVariable (siminput,“SDrift”sensorDriftValues (ct));siminput = setVariable (siminput,'shaftwear'shaftWearValues (ct));在数组中收集模拟输入RandomSimulationInput(CT)= Siminput;结尾

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

上面的代码从网格化的变量值和创建了110个模拟输入98.从随机变量值的仿真输入给出了208个总模拟。并行运行这208个模拟可以在标准桌面上取得多达两个小时或更长时间,并生成大约10GB的数据。为方便起见提供了仅运行前10个模拟的选项。

%运行模拟并创建一个组合以管理模拟结果如果~ (fullfile (pwd,存在'数据'),'dir') mkdir (fullfile (pwd,'数据')))%创建用于存储结果的目录结尾runall = true;如果符号[确定,e] =生成umulationsemble([gridsimulationInput,landomsimulationInput],fullfile(pwd,'数据'),'使用指平行',真正的);别的[ok,e] = generateSimulationEnsemble(gridSimulationInput(1:10), fullfile(pwd,'数据'));%#OK <* verch>结尾
[28-Feb-2018 13:17:31]检查平行池的可用性... [28-Feb-2018 13:17:37]加载Simulink在并行工人身上...分析和将文件转移到工人。金宝app。完毕。[28-FEB-2018 13:17:56]配置并行工人的模拟缓存文件夹...... [28-FEB-2018 13:17:57]在并行工人上运行Setupfcn ... [28-Feb-2018 13:18:01]加载平行工人的模型... [28-FEB-2018 13:18:02]将模型中使用的基础工作空间变量转移到平行工人... [28-2月 -  2018 13:18:07]运行模拟...... [28-2月 -  2018年13:18:29]在208个模拟运行中完成了1个中的1个[28-Feb-2018 13:18:29] 208个模拟运行中的2个[28-2月13日13:18:30]完成了208次模拟运行中的3个中的3个[28-Feb-2018 13:24:22] 204个仿真运行中的204个[28-Feb-2018 13:24:28]完成了205次模拟运行[28-FeB-2018 13:24:28]完成了206个仿真运行中的206次[28-FeB-2018 13:24:28]完成了207个的208个模拟运行[28-Feb-2018 13:24:29]完成208公中仿真运行[28-FEB-2018 13:24:33]清理平行工人......

生成仿制性跑并记录了模拟结果。使用仿真集合来处理和分析模拟结果的使用simulationEnsembleDatastore命令。

ex = simulationensembledataStore(fullfile(pwd,'数据'));

处理仿真结果

simulationEnsembleDatastore命令创建了一个指向模拟结果的合奏对象。使用合奏对象准备和分析集合的每个成员中的数据。“合奏对象”列出了集合中的数据变量,默认情况下,选择所有变量进行读取。

奴隶
ex = simulationeSembledataStore与属性:Datavariables:[6×1字符串]独立variables:[0×0字符串]条件variables:[0×0字符串]选择variables:[6×1字符串] nummembers:208 lastmemberread:[0×0字符串]
ens.SelectedVariables
ans =.6×1的字符串数组"SimulationInput" "SimulationMetadata" "Tacho" "Vibration" "xFinal" "xout"

分析只读振动转速计信号和金宝appsimulink.simulationInpul.。的金宝appsimulink.simulationInpul.具有用于仿真的模型变量值,用于为集合成员创建故障标签。使用合奏命令获取集合成员数据。

ens.SelectedVariables = [“振动”“转速器”“SimulationInput”];数据=读取(ens)
数据=1×3表振动转速计SimulationInput  ___________________ ___________________ ______________________________ [ 40272×1时间表][40272×1时间表][1×1仿真软件。金宝appSimulationInput]

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

振动= data.Vibration {1};情节(vibration.Time vibration.Data)标题('振动') ylabel (“加速”)

仿真的前10秒包含传输系统启动的数据;用于分析丢弃此数据。

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

转速计信号包含用于驱动器和负载轴的旋转的脉冲,但分析,具体地是同步平均,需要轴旋转的时间。以下代码丢弃了前10秒的前10秒转速计数据并找出轴的转动时间快速

tacho = data.tacho {1};idx = tacho.time> =秒(10);tacho = tacho(idx,:);plot(tacho.time,tacho.data)标题(转速计脉冲的) 传奇('传动轴',“负载轴”)%负载轴比传动轴旋转得慢

idx = diff(taco . data (:,2)) > 0.5;tachoPulses = tacho.Time(找到(idx) + 1) -tacho.Time (1)
tohepulses =8×1持续时间阵列2.8543 SEC 6.6508秒10.447秒244秒24.04秒21.837秒25.634秒29.43秒

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

vars = data.simulationInput {1} .variables;idx = strcmp({vars.name},“SDrift”);如果any(idx) sF = abs(vars(idx).Value) > 0.01;%小漂移值不是故障别的sf = false;结尾idx = strcmp({vars.name},'shaftwear');如果任何(IDX)SV = vars(IDX).Value <0;别的sv = false;结尾如果idx = strcmp({vars. strcmp;名称},'toothfultgain');sT = abs(vars(idx).Value) < 0.1;%小的牙齿故障值不是故障别的圣= false结尾FaultCode = SF + 2 * SV + 4 * ST;%用于捕获不同故障情况的故障代码

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

sdata =表({vibration},{tachpulses},sf,sv,st,Fairfcode,“VariableNames”, {'振动',“TachoPulses”,'sensordrift','shaftwear',“ToothFault”,'affactcode'})
sdata =1×6表振动TachoPulses SensorDrift ShaftWear ToothFault FaultCode  ___________________ ______________ ___________ _________ __________ _________ [ 30106×1时间表][8×1时间)真的假假的1
ens.DataVariables = [ens.DataVariables;“TachoPulses”];

合奏ConditionVariables属性可用于识别包含条件或故障标签数据的集合中的变量。设置属性以包含新创建的故障标签。

ens.conditionVariables = [“sensordrift”,“shaftwear”,“牙齿”,“FaultCode”];

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

重置(ens)runlocal = false;如果runLocal%处理集合中的每个成员hasdata(ens)数据=读取(ens);addData =预备数据(数据);WriteTolastMemberRead(ex,adddata)结尾别的%将集合拆分为分区并并行处理每个分区n = numpartitions(实体、gcp);parforct = 1:n sumens = partition(ens,n,ct);Hasdata (subens) data = read(subens);addData =预备数据(数据);writeToLastMemberRead (suben, addData)结尾结尾结尾

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

重置(ens) ens.SelectedVariables =“振动”;图,ct = 1;hasdata(ens)数据=读取(ens);如果mod(ct,10)== 0振动= data.vibration {1};绘图(振动.time,vigation.data)保持结尾Ct = Ct + 1;结尾抓住标题(振动信号的) ylabel (“加速”)

分析模拟数据

既然数据已经被清理和预处理,那么数据就可以提取特征来确定用于分类不同故障类型的特征。首先配置集合,使其只返回已处理的数据。

ens.SelectedVariables = [“振动”,“TachoPulses”];

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

重置(ENS)数据=读取(ex)
数据=1×2表振动动力___________________ ______________ [30106×1时间表] [8×1持续时间]
振动= data.Vibration {1};%将振动信号插值到适合fft分析的周期时基上NP = 2 ^楼层(LOG(高度(振动))/ log(2));dt =振动.Time(END)/(NP-1);电视= 0:DT:振动.Time(END);y =转音(振动,电视,“线性”);%计算振动信号的时间同步平均值tp =秒(data.tachopulses {1});vistrtsa = tsa(y,tp);图绘图(Vistrtsa.ttime,Vistrtsa.Time)标题(“振动时间同步平均”) ylabel (“加速”)

%计算时间同步平均值的频谱np = numel(vistrtsa);f = fft(vistrtsa.tsa。*汉明(np))/ np;FRTSA = F(1:地板(NP / 2)+1);%TSA频率响应WTSA =(0:NP / 2)/ NP *(2 * PI /秒(DT));% TSA频谱频率mtsa = abs(frtsa);% TSA谱量值图semilogx (wTSA, 20 * log10 (mTSA))标题('振动谱')包含(“rad / s”)

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

重置(ens)ens.datavariables = [ens.datavariables;“sigmean”;“sigmedian”;“SIGRMS”;“SigVar”;“sigpeak”;“SigPeak2Peak”;“SigSkewness”;“SigKurtosis”;“sigcrestfactor”;“sigmad”;“sigrangecumsum”;“sigcorredimension”;“sig xpprugxentropy”;“SigLyapExponent”;“PeakFreq”;“HighFreqPower”;“envpower”;“PeakSpecKurtosis”];如果runLocalhasdata(ens)数据=读取(ens);addData = analyzeData(数据);WriteTolastmemberRead(ex,adddata);结尾别的%将集合拆分为分区并并行分析每个分区n = numpartitions(实体、gcp);parforct = 1:n sumens = partition(ens,n,ct);Hasdata (subens) data = read(subens);addData = analyzeData(数据);writeToLastMemberRead (suben, addData)结尾结尾结尾

选择故障分类的特征

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

featurevariables = Analyzedata(“GetFeatureNames”);ens.DataVariables = [ens.DataVariables;featureVariables];ens.SelectedVariables = [featureVariables;ens.ConditionVariables];重置(实体)

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

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.98387 0.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 true false false 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 true false false 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 true true false 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),featureda(:,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真正29351 230.39真正30963 226.12真1083.8 230.39假1466.6 230.39 false⋮

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

图表直方图(classifysd.sigrangecumsum(classifysd.sensordrift),'binwidth',5e3)xlabel('信号累积总和范围') ylabel (“数”)举行直方图(classifysd.sigrangecumsum(〜classifysd.sensordrift),'binwidth',5e3)持有传奇('传感器漂移故障','没有传感器漂移故障')

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

考虑轴磨损故障。在这种情况下FSCNCA功能表示存在3个功能,是故障的重要预测因子(信号Lyapunov指数,峰值频率和峰值频率在光谱峰值中),选择这些以分类轴磨损故障。

idxResponse = strcmp (featureData.Properties.VariableNames,'shaftwear');featureanalysis = fscnca(featureata {:,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 0 162.13真正112.52 0 162.13真正109.02 0 230.39真正的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 0230.39 TRUE 98.463 0 230.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('信号Lyapunov指数') ylabel (“数”)举行直方图(classifysw.siglyapexponent(〜classifysw.shaftwear))保持传奇('轴磨损过错','没有轴穿故障')

轴磨损特征选择表示轴磨损故障所需的多个功能,分组的直方图确认这是最重要的特征(在这种情况下Lyapunov指数)对故障和故障方案具有类似的分布,表明更多功能需要正确对此故障进行分类。

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

idxResponse = strcmp (featureData.Properties.VariableNames,“ToothFault”);featureAnalysis = fscnca (featureData {: 1: idxLastFeature}, featureData.ToothFault);[~, idxSelectedFeature] = (featureAnalysis.FeatureWeights)进行排序;classifyTF = [featureData(:,idxSelectedFeature(end-5:end)), 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 (“数”)举行直方图(classifftf.sigrangecumsum(〜classifytf.ToothFault))保持传奇('齿轮牙齿故障','没有齿轮牙齿')

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

RNG('默认')重复性的%cvp = cvpartition(size(classifytf,1),'kfold'5);%随机分区数据进行培训和验证classifierTF = fitcsvm (classifytf(cvp.training(1),1:结束-1),classifftf(cvp.training(1),结束),“KernelFunction”,多项式的,“PolynomialOrder”2,'kernelscale','汽车',“BoxConstraint”,1,'标准化',真的,'classnames',[错误的;真的]);

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

%在测试验证数据上使用分类器来评估性能actualValue = classifyTF {cvp.test(1),结束};predictedValue = predict(classifierTF, classifyTF(cvp.test(1),1:end-1));通过计算和绘制混淆矩阵%来检查性能Confdata = ConfusionMat(实际值,预测值);H = Heatmap(Confdata,“YLabel”,'实际齿轮牙齿故障','ydisplaylabels',{“假”,'真的'},“包含”,'预测齿轮牙齿故障',“XDisplayLabels”,{“假”,'真的'},'彩色条形图','离开');

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

概括

本示例介绍了从Simulink中生成故障数据的工作流程,使用仿真集成来清理仿真数据并提取特征。金宝app提取的特征用于构建不同故障类型的分类器。

也可以看看

相关的话题