【发布时间】:2016-03-25 00:03:28
【问题描述】:
假设您有一个 Simulink 仿真,其中某个信号首先为正,然后在给定时间间隔内经过一段时间 t 后变为负。您的目标是找到过零点。
第一种方法是在给定间隔内绘制信号,保存并计算过零。
当针对不同的参数重复此模拟多次时,能够在信号变为负值后停止模拟将是有益的。那么在Matlab中计算过零已经有足够的信息了。你怎么能这样?
【问题讨论】:
标签: matlab simulation simulink
假设您有一个 Simulink 仿真,其中某个信号首先为正,然后在给定时间间隔内经过一段时间 t 后变为负。您的目标是找到过零点。
第一种方法是在给定间隔内绘制信号,保存并计算过零。
当针对不同的参数重复此模拟多次时,能够在信号变为负值后停止模拟将是有益的。那么在Matlab中计算过零已经有足够的信息了。你怎么能这样?
【问题讨论】:
标签: matlab simulation simulink
另一种方式:
您可以在 Simulink 中使用 Hit Crossing Block 在达到零的那一刻找到时间。
另一种方法 - 使用任何触发器或可重置系统。它也检测过零。例如:this question at SO。
当然你也可以使用User Defined function用手检测过零,同时对信号做任何你想做的事情。
关于进行大量模拟然后停止:
您可以使用Check Upper Static Bound 在nth 次超过零的那一刻自动停止模拟。例如:
我为这个街区设置了upper bound = 10,它停在第 10 个路口。
有很多方法可以在这个点或时间数组中保存函数值,但这是另一个问题:)
【讨论】:
是的,将Stop Simulation 块与块的适当逻辑输入一起使用:
【讨论】:
您可以使用if / else 模块来控制 Simulink 模型中的流程。在if / else 块中,您可以选择条件if u > 0,如果为真则照常继续,并使用else-选项绕过您本来要运行的其余流程。比如直接跳转到作用域。
【讨论】: