【问题标题】:Should I use a MATLAB Function block or normal Simulink blocks?我应该使用 MATLAB Function 模块还是普通的 Simulink 模块?
【发布时间】:2013-03-06 01:48:04
【问题描述】:
I have read 在 Simulink 模型中使用 Matlab 函数会严重影响其性能。建议使用 MATLAB Function 块而不是 Interpreted MATLAB Function 块。
在将模型编译为 C 以在 xPC 目标机器上使用时,我不清楚这是如何应用的。我是否会因为 M 脚本而受到某种惩罚,还是最好使用普通的 Simulink 模块来解决同样的问题?
【问题讨论】:
标签:
matlab
simulink
xpc-target
【解决方案1】:
不应该因为使用 MATLAB Function 模块而受到任何惩罚。编译模型时,MATLAB Function 模块会像其他 Simulink 模块一样将其 MATLAB 代码编译为 C。
我会根据对问题建模的最佳方法进行选择。例如,如果您的算法需要太多控制流语句或循环,则在 MATLAB Function 模块中对其进行编码会更容易。您可以随时将两者混合使用。
【解决方案2】:
您提供的链接并没有真正说明或暗示“在 Simulink 模型中使用 Matlab 函数会严重影响其性能”。
在某些情况下它可以,但在许多情况下它与内置块一样快。
Interpreted MATLAB Function 模块在每次需要评估时(即在每个时间步)都会回调到 MATLAB。这使得它变得很慢(相对于其他技术),并且还阻止它被用于任何 c 代码生成目的(即 xPC 使用的 Simulink Coder)。
使用定义为 coder.extrinsic 的函数的 MATLAB Function 模块中的 m 代码受到与上述相同的限制并且可能很慢。
嵌入式 NATLAB 子集中的 MATLAB Function 模块中的 m 代码(即简单的数学和矩阵操作)被转换为 C 代码并编译(在使用仿真和用于 c 代码生成时)。
在模拟和代码生成中,您应该会看到与使用标准模块类似的性能。
菲尔。