Engee 文档

边缘跟踪运算器

除了时间逻辑运算符变化指标 文章中的运算符和指标外,还可以在transitionsstateflow library transition 上设置边缘跟踪运算符。

*前沿跟踪运算符*是函数 "上升"、"下降 "和 "交叉",当信号以某种方式发生变化时,它们会返回逻辑值 "true"。这样,有限自动机就可以确定切换的确切时刻:不是根据信号的当前值,而是根据信号在时间上的变化。

什么是信号变化和边沿

在数字系统中,信号通常由逻辑值表示 - 逻辑 0(假)逻辑 1(真)。在这种情况下,变化就是这两种状态之间的转换。

在连续系统中(如模拟信号),数值可以是任何数值,信号*越过某个阈值*(尤其是 0 值)的时刻被认为是重要时刻。

信号的变化被称为*前沿*。主要有两种类型:

  • 上升沿 - 信号越过 "0 "从较小的值过渡到较大的值(如从"-1 "到 "0.5");

  • 递减前沿 - 信号穿过 0 从较大值过渡到较小值(例如,从 1-0.2)。

触发运算符的逻辑

每个运算符("上升"、"下降"、"交叉")都是一个表达式,只有当信号以某种方式发生变化时才返回值 "true"。在其他所有时间,它都是 false

让我们考虑一下每个运算符的触发条件。

运算符 rising(x)

当信号 x 从下向上越过零时(增加),运算符 rising(x) 返回`true`。

这种情况有两种:

  1. 先前的 x 值是负值,而当前值已变为零或正值;

  2. 先前的 x 值为零,而当前值变为正值。

因此,"rising(x) "是正方向转变的检测器。

例如,变量 x-0.20.1。在这种情况下,rising(x) 运算符将返回`true`,因为出现了从下到上的过零。如果 x0.1 变为 -0.1,运算符 * 将不起作用*。

同样,"rising(x - 0.5) "跟踪的是 x 从下到上*越过 0.5 值的时刻*。例如

state machines tracking signal operators 3

  • x 原为 0.4,变为 0.6rising(x - 0.5) 返回 true

  • x 原为 0.6,变为 0.4rising(x - 0.5) 将返回

运算符 falling(x)

当信号 x 从上到下过零时,运算符 falling(x) 返回`true`。它在以下情况下触发

  1. 如果当前值为零或负值,x 的前一个正值;

  2. 如果当前值已变为负值,则 x 的前一个零值。

因此,"falling(x) "响应负方向的转换。

+ 示例

  • x 原为 0.2,变为 -0.1falling(x) 返回 true

  • x 原为 -0.1,变为 -0.2 → 将不起作用。

对于 falling(x - 0.5) 也类似:当 x 从上到下越过 0.5 时,运算符将触发。例如

state machines tracking signal operators 2

  • x0.6 变为 0.4 → 触发;

  • x0.4 变为 0.6 → 不触发。

操作符 crossing(x).

crossing(x) "运算符是一个通用运算符,当信号越过零(或其他指定阈值)时返回 "true",与方向无关。它在以下条件之一下触发:

  1. 前一个值为正,当前值为零或负;

  2. 前一数值为零,当前数值为非零;

  3. 前一个值为负,当前值为零或正。

因此,"crossing(x) "运算符可以捕捉到*任何通过零点的过渡*,包括向上(递增)和向下(递减)。例如

state machines tracking signal operators 1

  • x0.6 变为 0.4crossing(x - 0.5) 返回 true

  • x0.4 变为 0.6 → 也返回 true

  • x 保持在 0.5 以下或 0.5 以上,没有越过临界值 →


应特别注意如何处理*与零*相等。与简单的 x > 0 条件不同,这些运算符不会忽略零,而是将其视为一个边界条件,在转换逻辑中发挥重要作用。

例如

  • 如果信号从 0 变为正 → 则视为上升沿;

  • 如果信号从零变为负 → 则为下降沿;

  • 如果信号从零变为非零(任意)→则为 "交叉 "触发。

有用链接