【发布时间】:2016-07-13 15:25:18
【问题描述】:
我需要一个 Simulink 模块或一组模块来进行峰值检测:将输入流的每个值与其之前和之后的值进行比较。如果大于前一个且大于下一个值,则输出该值。
我尝试使用 Matlab 功能块来完成,但我无法做出所需的延迟。我的意思是,就我而言,不可能存储以前的值。
那么,我该怎么办?
更新:另一个例子 在响应 cmets 时,如果我正在处理离散值,建议的解决方案会很有帮助。所以这是另一个代表我需要的例子: 施密特触发器
我需要实现一个 Matlab 函数来实现给定的场景。我可以做类似的事情
if u >= 2
y = 3;
elseif (u < 2)
y = -3;
但这仍然是不正确的,因为我需要查看输入的先前值(滞后),否则我最终会得到类似以下内容
PS:我知道模拟中没有所谓的先前值,但我们都知道 Simulink 最终将模拟值作为离散值处理(更大的采样)。所以我想也许有办法做到这一点。
【问题讨论】:
-
使用Unit Delay 块两次怎么样?
-
您可以在 MATLAB Function 块中使用
persistent变量来存储以前的值,或者正如@MatthiasW 所说,您可以在块外使用几个单位延迟并馈送已经延迟信号进入模块。 -
感谢您的回答,但使用持久变量或延迟仅在我使用离散值时才有帮助。对于连续值,它没有帮助。请检查我上面的更新。