【问题标题】:Post and previous values for an analog input inside a matlab function block in SimulinkSimulink 中 matlab 功能块内模拟输入的后值和前值
【发布时间】: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 所说,您可以在块外使用几个单位延迟并馈送已经延迟信号进入模块。
  • 感谢您的回答,但使用持久变量或延迟仅在我使用离散值时才有帮助。对于连续值,它没有帮助。请检查我上面的更新。

标签: matlab function simulink


【解决方案1】:

我认为你的代码很好,除了一个小错误:

if u > 2
y = 3;
elseif u < -2
y = -3;
else
y = u;

elseif 部分中的变量 'u' 应该与 -2 进行比较(上限但带有负号)

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多