主要内容

模型与生成代码仿真结果的数值一致性

数值的一致性

在基于模型的设计工作流中,您使用MathWorks®下载188bet金宝搏为使用定点和浮点算术的数值应用程序生成代码的产品。

  • 要开发模型,需要使用MATLAB®,仿金宝app真软件®和状态流®

  • 要生成源代码,您可以使用金宝app仿真软件编码器™和嵌入式编码器®

  • 为了测试模型和生成的代码之间的数值等价性,您可以比较模型和生成的代码模拟结果。例如,正常模式仿真结果与软件在环(SIL)仿真结果的比较。

模型和生成的代码模拟的结果在数值上是一致的,如果:

  • 在定点应用程序中,结果在逐位比较中一致。

  • 在浮点应用程序中,结果与您指定的容错范围一致。

使用模拟数据检查器来比较结果。为了确定差异是否存在或显著,您可以指定绝对公差值和相对公差值:

  • 对于定点应用程序,可以指定绝对容差为零。

  • 对于浮点应用程序,可以指定与参考值或信号有关的容差。引用的选择取决于您的应用程序。考虑以下例子:

    • 一种通过迭代的前馈误差计算来求解线性代数方程的算法。你可以指定公差每股收益

    • 一种闭环系统的比例积分微分(PID)控制器。对于瞬态行为,可以使用标准中的标准指定公差。对于稳态行为,您可以根据PID控制器特性指定公差。

方法以编程方式指定绝对公差值和相对公差值absTol而且relTol的属性金宝appSimulink.sdi.Signal对象。

复杂系统中的数值一致性

对于复杂系统,模型和生成的代码模拟之间的数值差异可能是块级差异在系统中传播的结果。如果你观察到系统层面的数值差异:

  1. 识别块级数值差异超过错误容忍的块。

  2. 调查每个确定的区块。

考虑下面的工厂控制器模型。

  • T产生参考信号或测试信号。

  • C是控制器组件。控制器的输出是工厂的输入。C可以是a模型由多个块组成模型块。

  • P是植物成分。从参考信号中减去装置输出以产生控制器输入。

为了测试模型控制器和生成的代码版本之间的数值等效性:

  1. 在正常模式下运行模型,并使用仿真数据检查器,记录C的输出。

  2. 为C指定SIL模式。重新运行模拟,记录C的输出。

  3. 使用模拟数据检查器,参照指定的误差容差比较正常模式和SIL模式输出。

如果仿真数据检查器的比较表明匹配,则模型和生成的代码结果在数值上是一致的。

如果normal模式和SIL模式输出不匹配:

  1. 在C语言中,为块输出启用信号日志记录。

  2. 在正常模式下运行模型。

  3. 在SIL模式下用C重新运行模拟。

  4. 使用模拟数据检查器,将记录的输出信号与指定的容错量进行比较。看到比较仿真数据

  5. 识别正常模式和SIL模式输出差异超过误差容忍度的块。

  6. 分析每个确定的块并寻找原因。例如,生成的代码可能使用与MATLAB不同的数学库。

请注意

如果需要对大量信号进行比较,您可以使用金宝app仿真软件测试™.看到子系统的SIL验证(金宝app仿真软件测试)

块级数值差异的原因

在定点和浮点应用程序开发中,有一些因素会影响来自模型的块级结果和生成的代码模拟之间的数值一致性。

有些因素可能同时影响定点和浮点应用程序。例如,使用:

  • 代码生成优化。

  • 自定义代码。

  • 与MATLAB结果不同的代码替换库条目。

  • 实现不同算法的代码替换库。

其他因素只影响浮点应用程序。例如:

  • 算法的数值合理性。

  • 算法对输入的敏感性。

  • 闭环和开环行为。

参考文献

[1]IEEE®转换,脉冲和相关波形的标准, IEEE标准,2003,pp. 15-17。

另请参阅

相关的话题