主要内容

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

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

传动系统模型

变速箱模型使用Simscape传动系统块来模拟一个简单的传动系统。传动系统由扭矩驱动、传动轴、离合器和连接到输出轴的高低齿轮组成。

mdl='pdmtransmissioncasing';Open_System(MDL)

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

open_system ([mdl“/套管”])

故障建模

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

open_system ([mdl'/振动传感器漂移'])

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

open_system ([mdl“/轴”])

开放式系统([mdl,/轴输出轴的])

通过在驱动轴旋转的固定位置注入扰动力矩来模拟齿轮的齿故障。轴的位置是用弧度测量的,当轴的位置在0附近的一个小窗口内时,对轴施加一个扰动力。扰动的大小由模型变量控制ToothFaultGain,请注意ToothFaultGain = 0意味着没有齿轮牙齿故障。

模拟故障和健康数据

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

toothFaultArray = 2:2/10:0;%牙齿故障增益值sensordriftarray = -1:0.5:1;传感器漂移偏移值Shaftwearray=[0-1];%变型可用于驱动轴条件%创建包含所有值的n维数组[toothFaultValues, sensorDriftValues shaftWearValues] =......ndgrid (toothFaultArray sensorDriftArray shaftWearArray);ct =元素个数(toothFaultValues): 1:1创建一个Simulin金宝appk。SimulationInput为each combination of valuessiminput=Si金宝appmulink.SimulationInput(mdl);%修改模型参数siminput = setVariable (siminput,“牙缝增益”toothFaultValues (ct));siminput = setVariable (siminput,'闷闷'sensorDriftValues (ct));siminput = setVariable (siminput,“ShaftWear”,Shaftwearvalues(CT));%收集数组中的模拟输入gridSimulationInput (ct) = siminput;结束

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

rng (“默认”);为了重现性,重置随机种子toothFaultArray = [0 -rand(1,6)];%牙齿故障增益值传感器漂移阵列=[0随机数(1,6)/8];传感器漂移偏移值Shaftwearray=[0-1];%变型可用于驱动轴条件%创建包含所有值的n维数组[toothFaultValues, sensorDriftValues shaftWearValues] =......ndgrid (toothFaultArray sensorDriftArray shaftWearArray);CT = NUM​​EL(牙齿虚假值): -  1:1创建一个Simulin金宝appk。SimulationInput为each combination of valuessiminput=Si金宝appmulink.SimulationInput(mdl);%修改模型参数siminput = setVariable (siminput,“牙缝增益”toothFaultValues (ct));siminput = setVariable (siminput,'闷闷'sensorDriftValues (ct));siminput = setVariable (siminput,“ShaftWear”,Shaftwearvalues(CT));%收集数组中的模拟输入randomSimulationInput (ct) = siminput;结束

用数组金宝app仿真软件。SimulationInput定义的对象使用generateSimulationEnsemble函数来运行模拟。的generateSimulationEnsemble功能配置模型记录数据文件保存,信号记录采用时间表格式,并存储金宝app仿真软件。SimulationInput保存的文件中的对象generateSimulationEnsemble函数返回指示模拟是否成功完成的状态标志。

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

%运行仿真并创建集成以管理仿真结果如果〜存在(fullfile(pwd,“数据”),“dir”)Mkdir(Fullfile(PWD,“数据”))%创建用于存储结果的目录结束runAll = true;如果runAll [ok,e] = generatessimulationensemble ([gridSimulationInput, randomSimulationInput],......fullfile (pwd,“数据”),“UseParallel”, 真的);其他的[ok,e] = generateSimulationEnsemble(gridSimulationInput(1:10), fullfile(pwd),“数据”));%#好的<*UNRCH>结束
[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...

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

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

模拟结果处理

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

实体
ens=SimulationnSembleDatastore,其属性为:DataVariables:[6×1字符串]独立变量:[0×0字符串]条件变量:[0×0字符串]SelectedVariables:[6×1字符串]nummbers:208 LastMemberRead:[0×0字符串]
ens.selectedvariables.
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=振动。时间>=秒(10);振动=振动(idx,:);振动。时间=振动。时间-振动。时间(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第6.6508卷第10.447卷第14.244卷第18.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 ({var。名称},“牙缝增益”);st = abs(vars(idx).value)<0.1;%小齿故障值不是故障其他的st = false.结束faultCode = sF + 2*sV + 4*sT;%a故障代码捕获不同的故障条件

处理后的振动和转速计信号以及故障标签将添加到集合中,以供以后使用。

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”“ToothFault”“FAURORCODE”];

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

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

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

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

仿真数据分析

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

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

对于集合中的每个成员,计算一些基于时间和频谱的特性。包括信号统计数据等信号的意思是,方差,峰间,非线性信号近似熵和李雅普诺夫指数等特征和光谱特征等的峰值频率同步振动信号的平均时间,和时间同步平均包络信号的力量。的分析数据函数包含所提取特性的完整列表。通过算例,考虑了时间同步平均振动信号频谱的计算。

Reset (ens) data = read(ens)
data =1×2表振动TachoPulses  ___________________ ______________ [ 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”;“SigCorrDimension”;“SigApproxEntropy”;......“siglyapexponent”;“peakfreq”;“高级重量”;“环境动力”;“峰刺痛”];如果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 (suben, addData)结束结束结束

选择故障分类的功能

上面计算的特征用于构建分类器,对不同的故障条件进行分类。首先,将集成配置为仅读取衍生特征和故障标签。

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

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

featureData =收集(高(ens))
使用Parallel Pool 'local'计算tall表达式:-通过1 / 1:1.8 min完成
featureData =208×22表SigMean SigMedian SigRMS SigVar SigPeak SigPeak 2peak 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 (featureData {: 1: idxLastFeature}, featureData.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)离开传奇(“传感器漂移故障”“无传感器漂移故障”

柱状图显示,信号累积和范围是检测传感器漂移故障的良好特征,尽管可能需要额外的特征,因为如果仅使用信号累积和范围对传感器漂移进行分类,当信号累积和范围低于0.5时,可能会出现误报。

考虑轴磨损故障。在这种情况下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),featureData(:,idxResponse)]
分类软件=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))包含(“信号李雅普诺夫指数”)ylabel(“数”) 抓住直方图(classifySW.SigLyapExponent (~ classifySW.ShaftWear))离开传奇(“轴磨损故障”“无轴磨损故障”

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

最后考虑牙齿的故障,fscnca函数表明,信号累积和范围、信号李雅普诺夫指数和谱峰度中的峰值频率是预测故障的主要特征。选择这3个特征对牙齿故障进行分类会导致分类器性能较差。相反,使用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表“pepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepepe一一一一一一一一一一一一一一个一一一一一一一一一一一一一一个一一一一一个一一一一一一一一一个一一一一一个一一一一一一一一一个一一一一一一一一个一个一一一一一个一个Uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu0.81571 1.1427 79.531 162.13 28562假0.81571 1.1362 70.339 226.12 29418假0 2.8157 1.1479 125.18 162.13 31710假0 0 2.8157 1.1472 112.52 162.13 30984假0 2.8157 1.147 109.02 230.39 30661假0 2.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.463假0.893071 1.1277 42.887 230.39 29351真0 2.8157 1.1486 99.426 226.12 30963真9.998 1.8157 1.1277 44.448 230.39 1083.8真1.8618 1.8157 1.1368 93.95 230.39 1466.6假⋮
图直方图(classifyTF.SigRangeCumSum(classifyTF.TootFault))xlabel(“信号累积和范围”)ylabel(“数”) 抓住直方图(classifyTF.SigRangeCumSum (~ classifyTF.ToothFault))离开传奇(“齿故障”'无齿轮齿故障'

利用上述结果,使用多项式支持向量机对轮齿故障进行分类。将特征表分为用于训练的成员和用于测试和验证的成员。使用训练成员使用fitcsvm命令。

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

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

%在测试验证数据上使用分类器来评估性能actualValue = classifyTF {cvp.test(1),结束};predictedValue = predict(classifierTF, classifyTF(cvp.test(1),1:end-1));%通过计算和绘制混淆矩阵来检查性能confdata=confusionmat(实际值、预测值);h=热图(confdata,......'ylabel'“实际轮齿故障”......“YDisplayLabels”,{'错误的'“真正的”},......'xlabel'“预测轮齿故障”......'xdisplaylabels',{'错误的'“真正的”},......“ColorbarVisible”“关闭”);

混淆矩阵表明,分类器正确地分类了所有非故障条件,但错误地将一个预期故障条件分类为非故障。增加分类器中使用的特征数量有助于进一步提高性能。

总结

这个示例演示了从Simulink生成故障数据的工作流,使用一个仿真集成来清理仿真数据并提取特征。金宝app然后利用提取的特征构建不同故障类型的分类器。

另请参阅

相关话题