如何克服Simulink中比较器实现的意外延迟?

时间:2016-07-20 05:18:14

标签: matlab simulink

我在Simulink中构建了一个非常复杂的模型。而且我注意到意外的延迟。为简单起见,我构建了一个非常简单的模型,并且我发现再次出现意外延迟。

简单模型只是一个比较器。它在 Matlab功能块中定义为:

if u >= 2
  y = 3;
elseif (u < 2)
  y = -3;

输出结果为:

enter image description here

如您所见,蓝色波不会直接从+3移动到-3或从-3移动到+3。但是,有一个像100 usec这样的延迟。 为什么这个?我的意思是根据上面的功能,它应该马上移动(突然改变)。 我怎样才能突然改变?

1 个答案:

答案 0 :(得分:3)

你的正弦频率非常高。虽然Simulink的(通常)默认变量步骤求解器可以处理很多情况,但公差是以绝对值设置的。在您的情况下,允许变步长求解器使用的最小步长(通过公差)正是您在图中可以看到的斜坡。

对于高频模型,您需要减小求解器的步长,直接用于固定步进求解器,或者在可变步长求解器的情况下调整公差。

enter image description here

enter image description here

将所有内容保留在auto在大多数情况下会产生稳定的结果,并且结果很准确,但在光学上你可能会感到不满意。因此,总是显式优于隐式。您应该始终考虑实际需要的步长。采样和开关频率,本征频率,所需频谱或所需的谐波次数是正确选择求解器和步长的良好指标。