此示例演示如何生成用于预测剩余使用寿命(RUL)的代码这将在停止并重新启动预测算法时保留RUL模型的状态。当您在系统操作期间使用传入数据更新RUL模型时,此工作流非常有用。这样做时,在系统关闭时,您可能会丢失对模型所做的任何更新。此示例显示了如何使用再读状态
和恢复性房地产
入口点函数中的命令用于保留在运行时对模型所做的更新。
此示例以中所示的工作流为基础生成用于预测剩余使用寿命的代码。您可以使用此示例的工作流生成代码,用于使用基于降级的RUL模型预测剩余使用寿命,线性梯度模型
和指数退化模型
.
在为RUL预测生成代码之前,必须使用历史数据拟合RUL模型林惇
。此文件包含随时间变化的某些条件指示器的测量值,并用列标签组织到表中“时间”
和“健康)状况”
. 使用该数据训练线性退化模型。(有关配置和培训此类RUL模型的更多信息,请参阅线性梯度模型
。)
装载(“林特兰桌子,垫子”)mdl=线性梯度模型;安装(mdl、linTrainTables、,“时间”,“健康)状况”)
如中所述生成用于预测剩余使用寿命的代码,准备代码生成模型,使用saveRULModelForCoder
将RUL模型存储为MAT文件中的数据结构。后来,在入口点函数中,使用loadrulmodelforcoder.
加载和重建线性梯度模型
目的。
保存文件名='savedmodel.mat';saverulmodeldorcoder(mdl,savematfilename);
可选地,您可以使用在培训数据之后收集的附加数据更新模型参数。对于此示例,加载LintestData1.
,这是一个121行的时间和条件指示值。使用此表中的前两个条目以更新模型。
装载('lintestdata.mat',“linTestData1”)updateData=linTestData1(1:2,:);更新(mdl,updateData);
接下来,读取模型状态使用再读状态
.此命令将RUL模型对象转换为您可以传递给入口点函数作为输入参数的结构。
savedState=readState(mdl);
入口点函数是要为其生成代码的函数。对于本例,创建入口点函数DegraationRulpreservestate.m.
,如图所示。
类型DegraationRulpreservestate.m.
函数[estrulout,ciout,newstate] = degadationrulpreservestate(数据,restorestateflag,savedstate)%#codegen持久mdl%加载模型第一个时间函数称为isempty(mdl)mdl = loadrulmodelfoder('savedmodel');如果RestOrestateFlag RestOrestate(MDL,SavedState),则终端%恢复已保存的型号参数;终端%更新模型和新数据阈值的预测= 60;更新(MDL,数据);[estrulout,ciout] = predictrul(mdl,阈值);%读取更新的型号参数newstate = readstate(mdl);结尾
此函数使用使现代化
每次使用新的输入数据调用该命令时。声明MDL.
作为一个持久的
变量在调用之间保留更新的模型参数,而函数保留在内存中。此函数将更新的模型参数写入输出参数纽斯特
.您可以使用此输出参数在从内存中清除函数时保留更新的模型状态。因此,例如,在系统关闭后重新启动预测算法时,可以设置恢复性耳聋
到真的
并通过最近保存的状态数据
,确保系统使用最新更新的模型参数恢复预测。
要生成代码,您必须提供具有所需的入口点函数的数据类型和格式的示例数据。对于此示例,请使用下一个条目LintestData1.
.另外,设置恢复性耳聋
逻辑值真的
.
testdata = lintestdata1(3,:);restorestateflag = true;
现在,您可以使用以下命令生成代码编码基因
(MATLAB编码器)命令
编码基因DegraationRulpservestate.-args{testData,restoreStateFlag,savedState}-Nargout.3.
代码生成成功。
此命令生成一个MEX文件,该文件是一个可执行文件,您可以从MATLAB®中调用。您可以使用类似于此示例的过程为任何其他编码基因
金宝app支持。或者,您可以使用MATLAB编码器应用程序,如图所示生成用于预测剩余使用寿命的代码.
要验证生成的代码,请在MATLAB命令提示符下运行测试数据上的入口点MATLAB函数。然后,在同一数据上运行生成的MEX文件,并确认结果是相同的。
[estRUL,ci,newState]=降级RulpReserveState(testData,restoreStateFlag,savedState);[estRUL,ci,newState,newState]=降级RulpReserveState(testData,restoreStateFlag,savedState);
例如,将估算的RUL与MATLAB函数和生成的MEX文件进行比较。
Estrul,CI.
estRUL=113.8920
ci =1×283.0901 172.5393
埃斯特鲁尔·梅克斯,西·梅克斯
Estrul_mex = 113.8920.
ci_mex=1×283.0901 172.5393
现在,您可以将生成的代码用作已部署系统的一部分,以预测剩余使用寿命纽斯特
在需要重新启动系统时使用。例如,在LintestData1.
并使用它来更新预测,从纽约州新闻局
,在前一个调用MEX文件中生成的模型状态。
testData2=linTestData1(4,:);[estRUL2\u-mex,ci2\u-mex,newState2\u-mex]=降解RulpReserveState\u-mex(测试数据2,恢复状态滞后,newState2\u-mex);雌酚
Estrul2_mex = 104.4336.
ci2_mex =1×277.8216 154.1263
请注意,MATLAB函数和MEX文件每个都管理自己的持久变量。因此,MEX文件值MDL.
现在包含更新测试数据2
,它的函数值为MDL.
才不是。要重置这些持久变量的值,请明确清除内存中的函数和MEX文件。
清除DegraationRulpservestate.清除degraationrulpreservestate_mex.
loadrulmodelforcoder.
|saveRULModelForCoder
|再读状态
|恢复性房地产