在Sensor Fusion and Tracking Toolbox™中引入支持严格的单精金宝app度和非动态内存分配代码生成的函数、对象和块。
在传感器融合和跟踪工具箱(SFTT)中,许多函数、对象和Simulink块支持C/ c++代码生成。金宝app金宝app您可以在函数、对象或块是否支持代码生成,以及其参考页的Extended Capabili金宝appties部分中的任何限制。有关如何在命令行生成代码的详细信息,或使用MATLAB®编码器™应用程序,请参阅在命令行生成C代码(MATLAB编码器)和使用MATLAB Coder App生成C代码(MATLAB编码器),分别。有关为SFTT应用程序生成代码,请参阅如何为跟踪器生成C代码和为具有异构源轨迹的轨迹Fuser生成代码的例子。
传感器融合和跟踪工具箱广泛支持双精度代码生成,生成的代码可以在必要时使用动态内存分配金宝app。尽管双精度变量可以提供更精确的计算,但它们比单精度变量增加了内存需求。类似地,尽管动态内存分配允许灵活的变量分配,但这个过程通常比非动态内存分配慢。由于这些和其他原因,传感器融合和跟踪工具箱为一些算法提供了严格的单精度和非动态内存分配支持。金宝app
在严格的单精度代码生成时,生成的C/ c++代码,包括输入、代码体和输出,不使用双精度变量。换句话说,它只能使用单精度变量和32位以内的整型变量。对于在SFTT中支持严格单精度代码生成的金宝app算法,您可以通过传递单精度输入参数来启用它。要启用严格的单精度代码生成:
对于支持单精度代码生成的函数,请指定单精金宝app度输入。
对于支持单精度代码生成的对象,将输入指金宝app定为非双精度变量,并将任何自定义设置指定为非双精度。例如,要从trackerGNN
系统对象™:
必须将输入(如检测)指定为非双精度值。
必须指定FilterInitializationFcn
属性以返回单精度滤波器。
在非动态的内存分配代码生成时,每个变量的内存分配是在编译期间,在运行代码之前确定的。非动态内存分配通常比动态内存分配快。有关如何禁用动态内存分配的信息,请参见生成可变大小数据的代码(MATLAB编码器)和控制可变大小数组的内存分配(MATLAB编码器).
下面几节表中列出的函数、对象和块都经过验证,以支持严格的单精度和非动态内存分配代码生成。金宝appSFTT中其他未经验证的函数、对象和块可能支持严格的单精度和非动态内存分配。金宝app
这些跟踪器和跟踪过滤器支持具有指定限制的单精度和非动态内存分配代码生成。金宝app
对象或块 | 单精度代码生成限制 | 非动态内存分配代码生成限制 |
---|---|---|
trackerJPDA 或联合概率数据关联多目标跟踪器 |
|
|
trackerGNN 或全局最近邻多目标跟踪器 |
|
|
trackingEKF |
状态转移函数和测量函数必须支持单精度。金宝app | 没有限制 |
trackingUKF |
状态转移函数和测量函数必须支持单精度。金宝app | 没有限制 |
trackingCKF |
状态转移函数和测量函数必须支持单精度。金宝app | 没有限制 |
trackingIMM |
的trackingIMM 过滤器必须配置为其中之一trackingEKF ,trackingUKF ,或trackingCKF 以单精度设置的对象。 |
的trackingIMM 过滤器必须配置为其中之一trackingEKF ,trackingUKF ,或trackingCKF 对象。 |
这些赋值函数支持具有指定限制的严格单精度和非动态内存分金宝app配代码生成。
功能 | 单精度代码生成限制 | 非动态内存分配代码生成限制 |
---|---|---|
assignkbest |
必须使用Jonker-Volgenant算法。 |
必须使用Jonker-Volgenant算法。 |
assignjv |
没有限制 | 没有限制 |
jpdaEvents |
必须使用K-best联合事件。 | 必须使用K-best联合事件。 |
这些运动模型函数不受限制地支持单精度和非动态内存分配代码生金宝app成。
这些过滤器初始化函数不受限制地支持单精度和非动态内存分配代码生成。金宝app