边缘跟踪运算器
除了时间逻辑运算符 和变化指标 文章中的运算符和指标外,还可以在transitions 上设置边缘跟踪运算符。
*前沿跟踪运算符*是函数 "上升"、"下降 "和 "交叉",当信号以某种方式发生变化时,它们会返回逻辑值 "true"。这样,有限自动机就可以确定切换的确切时刻:不是根据信号的当前值,而是根据信号在时间上的变化。
什么是信号变化和边沿
在数字系统中,信号通常由逻辑值表示 - 逻辑 0(假) 和 逻辑 1(真)。在这种情况下,变化就是这两种状态之间的转换。
在连续系统中(如模拟信号),数值可以是任何数值,信号*越过某个阈值*(尤其是 0 值)的时刻被认为是重要时刻。
信号的变化被称为*前沿*。主要有两种类型:
-
上升沿 - 信号越过 "0 "从较小的值过渡到较大的值(如从"-1 "到 "0.5");
-
递减前沿 - 信号穿过
0
从较大值过渡到较小值(例如,从1
到-0.2
)。
触发运算符的逻辑
每个运算符("上升"、"下降"、"交叉")都是一个表达式,只有当信号以某种方式发生变化时才返回值 "true"。在其他所有时间,它都是 false
。
让我们考虑一下每个运算符的触发条件。
运算符 rising(x)
当信号 x
从下向上越过零时(增加),运算符 rising(x)
返回`true`。
这种情况有两种:
-
先前的
x
值是负值,而当前值已变为零或正值; -
先前的
x
值为零,而当前值变为正值。
因此,"rising(x) "是正方向转变的检测器。
例如,变量 x
从 -0.2
→ 0.1
。在这种情况下,rising(x)
运算符将返回`true`,因为出现了从下到上的过零。如果 x
从 0.1
变为 -0.1
,运算符 * 将不起作用*。
同样,"rising(x - 0.5) "跟踪的是 x
从下到上*越过 0.5 值的时刻*。例如
-
x
原为0.4
,变为0.6
→rising(x - 0.5)
返回true
; -
x
原为0.6
,变为0.4
→rising(x - 0.5)
将返回假
。
运算符 falling(x)
当信号 x
从上到下过零时,运算符 falling(x)
返回`true`。它在以下情况下触发
-
如果当前值为零或负值,
x
的前一个正值; -
如果当前值已变为负值,则
x
的前一个零值。
因此,"falling(x) "响应负方向的转换。
+ 示例
-
x
原为0.2
,变为-0.1
→falling(x)
返回true
; -
x
原为-0.1
,变为-0.2
→ 将不起作用。
对于 falling(x - 0.5)
也类似:当 x
从上到下越过 0.5
时,运算符将触发。例如
-
x
从0.6
变为0.4
→ 触发; -
x
从0.4
变为0.6
→ 不触发。
操作符 crossing(x)
.
crossing(x) "运算符是一个通用运算符,当信号越过零(或其他指定阈值)时返回 "true",与方向无关。它在以下条件之一下触发:
-
前一个值为正,当前值为零或负;
-
前一数值为零,当前数值为非零;
-
前一个值为负,当前值为零或正。
因此,"crossing(x) "运算符可以捕捉到*任何通过零点的过渡*,包括向上(递增)和向下(递减)。例如
-
x
从0.6
变为0.4
→crossing(x - 0.5)
返回true
; -
x
从0.4
变为0.6
→ 也返回true
; -
x
保持在0.5
以下或0.5
以上,没有越过临界值 →假
。
应特别注意如何处理*与零*相等。与简单的 例如
|