如何克服 Simulink 中比较器实现的意外延迟?
How to overcome an unexpected delay in comparator implementation in Simulink?
我正在 Simulink 中构建一个相当复杂的模型。我注意到意外的延迟。为简单起见,我构建了一个非常简单的模型,我发现再次引入了意外延迟。
简单模型只是一个比较器。它在 Matlab 函数块 中定义为:
if u >= 2
y = 3;
elseif (u < 2)
y = -3;
输出为:
如您所见,蓝色波浪不会直接从+3 移动到-3 或从-3 移动到+3。但是,有100这样的延迟 usec. 这是为什么?? 我的意思是按照上面的函数,应该马上就动了(改突然)。 我怎样才能让它突然改变?
你的正弦波频率相当高。尽管 Simulink 的(通常)默认 variable-step 求解器可以处理很多情况,但公差设置为绝对值。在您的情况下,允许使用可变步长求解器的最小步长(即公差)正是您可以在图中看到的斜坡。
对于高频模型,您需要减小求解器的步长,直接针对固定步长求解器,或者通过调整可变步长求解器的容差。
将所有内容保留在 auto
在大多数情况下会导致稳定的结果,具有现实的结果,但从视觉上看您可能不满意。所以一如既往显式优于隐式。您应该始终考虑您实际需要的步长。采样频率和开关频率、特征频率、所需的频谱或所需的谐波阶数是正确选择求解器和步长的良好指标。
我正在 Simulink 中构建一个相当复杂的模型。我注意到意外的延迟。为简单起见,我构建了一个非常简单的模型,我发现再次引入了意外延迟。
简单模型只是一个比较器。它在 Matlab 函数块 中定义为:
if u >= 2
y = 3;
elseif (u < 2)
y = -3;
输出为:
如您所见,蓝色波浪不会直接从+3 移动到-3 或从-3 移动到+3。但是,有100这样的延迟 usec. 这是为什么?? 我的意思是按照上面的函数,应该马上就动了(改突然)。 我怎样才能让它突然改变?
你的正弦波频率相当高。尽管 Simulink 的(通常)默认 variable-step 求解器可以处理很多情况,但公差设置为绝对值。在您的情况下,允许使用可变步长求解器的最小步长(即公差)正是您可以在图中看到的斜坡。
对于高频模型,您需要减小求解器的步长,直接针对固定步长求解器,或者通过调整可变步长求解器的容差。
将所有内容保留在 auto
在大多数情况下会导致稳定的结果,具有现实的结果,但从视觉上看您可能不满意。所以一如既往显式优于隐式。您应该始终考虑您实际需要的步长。采样频率和开关频率、特征频率、所需的频谱或所需的谐波阶数是正确选择求解器和步长的良好指标。