主要内容

使用包含MATLAB函数块的蒙面库子系统运行模拟和生成代码

这个例子展示了如何使用包含MATLAB函数块的屏蔽库子系统来运行模拟和生成C代码。对函数代码、子系统或掩码属性的编辑会影响模型中块的所有实例,而对掩码参数的更改只会影响所选块。如果需要可以生成代码的自定义块的副本,请使用掩码库块。有关更多信息,请参见创建自定义库而且设计和创建一个自定义块

浏览模型

屏蔽子系统包含一个MATLAB函数块,该函数块使用conv函数来计算两个输入向量的卷积。掩码参数形状允许您将归一化权重更改为完整的,相同,或有效的.该块使用以下MATLAB代码计算卷积:

函数C = my_conv(a, b, shape)如果Shape == 1 c = conv(a, b,“全部”);elseif形状== 2 c = conv(a, b,“相同”);其他的C = conv(a, b,“有效的”);结束

在这个模型中,形状参数设置为完整的,则中间实例设置为相同,底部实例设置为有效的.运行模拟来计算向量的卷积,并在显示块中显示它们的值。

两个顶部块实例输出不同的向量大小,因为每个块用不同的权值计算卷积。改变形状在任意块中设置参数并再次模拟以查看输出变化。

从模型生成C代码

如果您拥有嵌入式Coder或Simulink Coder的许可证,则可以在不更改参数或块万博1manbetx的情况下从本示例生成代码。然而,MATLAB函数块仅支持MATLAB函数的有限子集的代码生万博1manbetx成。有关更多信息,请参见C/ c++代码生成支持的函数和对象万博1manbetx(MATLAB编码器)

如果库块的多个实例的参数和输入相同,则可以生成带有可重用函数的代码,这些函数表示每个相同的MATLAB函数块。可以通过右键单击“MATLAB函数”块,单击块参数(子系统),然后打开代码生成选项卡。集函数包装可重用的功能.有关更多信息,请参见从跨模型共享的库子系统生成可重用的代码(万博1manbetx仿真软件编码器)

通过打开嵌入式Coder或Simulink Coder应用程序并单击生成代码万博1manbetx生成代码.该模型为每个块实例生成唯一的C函数。要生成可重用的函数,请设置形状参数完整的为每个库子系统实例并生成代码。所生成的代码重用my_conv_filter而且my_conv_filter1实例,因为它们具有相同的块输入和掩码参数值。

/* *原子系统的输出和更新:* '/MATLAB函数' * '/MATLAB函数' */ void MLFB_model_MATLABFunction(const real_T rtu_a[2], const real_T rtu_b[5], real_T rty_c[6]) {int32_T b_k;int32_T我;For (i = 0;I < 6;rty_c[I] = 0.0;}
For (i = 0;I < 2;i++) {for (b_k = 0;B_k < 5;b_k++) {int32_T tmp;TMP = I + b_k;Rty_c [tmp] += rtu_a[i] * rtu_b[b_k];}}}

my_conv_filter2实例使用不同的函数,因为它使用不同的输入。

/*输出和更新原子系统:'/MATLAB函数' */ void MLFB_model_MATLABFunction_p(const real_T rtu_a[3], const real_T rtu_b[3], real_T rty_c[5]) {int32_T i;For (i = 0;I < 5;rty_c[I] = 0.0;}
For (i = 0;I < 3;i++) {rty_c[I] += rtu_b[I] * rtu_a[0];Rty_c [i + 1] += rtu_b[i] * rtu_a[1];Rty_c [i + 2] += rtu_b[i] * rtu_a[2];}}

另请参阅

相关的话题