人在仿真软件万博1manbetx

万博1manbetxSimulink &基于模型的设计

如何在Simulink R2009b中测试NaN 万博1manbetx?(新!)

早在2009年2月,我就发表了一篇关于如何在Simulink中测试NaN万博1manbetx.我所谈到的方法更多的是基于NaN的特殊特性的逻辑实验,而不是一个理想的软件解决方案。在Si万博1manbetxmulink R2009b中的关系操作符块得到升级,包括isNaN。让我们看看它是如何工作的。

关系操作符块升级

关系操作符通常用于比较信号并测试大于(>)、等于(==)等。在R2009b中,它有以下新的单一输入模式:isNaN、isFinite和isInf

Simulink R2009b中的关系操作符有isNa万博1manbetxN操作。

Simulink R2009b中关系运算符块的参数万博1manbetx

这些函数对于用MATLAB编程的人来说是很熟悉的,它们的工作方式是相同的。当输入信号具有我们正在测试的属性时,块输出为true。

它是如何工作的?

我和我的同事Omar聊了聊,他升级了这个街区,并和我分享了一些关键点。他提到了块处理:

  • 实信号和复信号
  • Simulink支持的任何数万博1manbetx据类型,包括固定点类型万博1manbetx
  • 你的平台的字节顺序

这些新的操作符只对可以表示Inf和NaN的数据类型有意义。那么它如何处理非浮点类型呢?如果传入一个整数或不能表示NaN of Inf的定点类型,则块返回false。这是工作流的一个关键点,您可能会发现自己在设计中切换数据类型。这在选择适当的定点数据类型属性时经常发生。如果您正在运行模拟以收集理想的双精度结果,您可能需要处理Inf和NaN。在将模型转换为定点实现时,算法不需要任何修改。

生成的代码

为isNaN函数生成的代码如下所示:

34/ *输出港:“< Root > /着干活包含:
35*尺寸:< Root > /三机一体
36* RelationalOperator:“< Root > /关系操作符
37* /
38isNaNCode_Y。着干活=rtIsNaN(isNaNCode_U.In1);

函数rtIsNaN是rt_nonfinite.c的一部分:

61/*如果值不是一个数字*/
62boolean_TrtIsNaN (real_T值)
63
64
65如果定义(_msc_ver) && (_msc_ver <= 1200)
66
67/*对于MSVC 6.0,使用编译器特定的比较函数*/
68返回_isnan(价值)?1 u: 0 u;
69
70其他的
71
72返回(价值(价值! =)?1 u: 0 u);
73
74endif
75
76

使用目标函数库进行进一步优化

如果嵌入式目标环境具有处理NaN、Inf或有限性测试的特殊函数,则可以使用目标函数库将对rtIsNaN的调用替换为该调用。

你觉得呢?

你会使用这个块的isInf, isNaN和isFinite模式吗?留下一个这里的评论告诉我该怎么做。

|

评论

请点击留下评论在这里登录到你的MathWorks帐户或创建一个新的。