主要内容

生成保留RUL模型状态以供系统重新启动的代码

此示例演示如何生成用于预测剩余使用寿命(RUL)的代码这将在停止并重新启动预测算法时保留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.

另见

|||

相关话题