我使用Matlab的分类学习器应用程序训练了一个分类模型(分类树)。我已经将其导出到工作区,并保存为.mat文件。
我需要将其嵌入到Simulink模型中,以便在模拟过程中每个时间步骤进行预测。我尝试使用Matlab函数块,并使用“load”来从.mat文件中加载分类树,然后使用mdl.predictFcn(myInputData)对新数据进行预测。然而,当我尝试运行Simulink模型时,我得到了以下错误:
在使用函数’load’时发现不支持的变量类。MATLAB类’function_handle’在’mdl.ClassifierTTC.predictFcn’处被发现是不支持的。
这是否意味着我不能在Simulink中使用我的分类模型?有没有人已经尝试过类似的事情?
谢谢大家。
回答:
这个问题有一个解决方案,不需要编写任何C代码。所有必要的C代码都可以通过MATLAB的代码生成器生成。
生成分类模型后,将其从分类学习器应用程序导出到工作区,然后使用saveCompactModel()函数保存。请注意,即使在最新的MATLAB版本(2017a)中,某些分类器模型也是不受支持的。
编写一个m文件,加载并将未见过的数据传递给分类器,并使用predict()函数从分类器中获取分类标签。使用带有dll配置的codegen()从m文件生成C代码,但不要让它编译。这将生成所有必要的头文件和源文件。
现在,使用legacy_code()生成一个S函数,将C代码导入Simulink。将所有生成的头文件和源文件链接到S函数,并使用legacy_code()生成S函数块和tlc文件。
这将生成一个包含分类器和预测功能的S函数块。legacy_code()函数为此S函数生成一个tlc,并允许S函数块被编译。