自定义 Simulink 离散时间积分器块

Custom Simulink discrete-time integrator block

我试图使用梯形法则在 Simulink 中设计自己的离散时间积分器的简单实现。 这是我努力的结果(考虑我使用 1 作为时间积分间隔): 然后,为了仔细检查我是否做对了所有事情,我将结果与标准 Simulink 离散时间积分器模块(当然配置为使用梯形规则)进行了比较:

当我让步长在时间 1 上升时,一切运行正常(自定义和默认积分器块的初始条件均为 0):

当步长在时间 0 上升时,我得到两个积分器块响应之间的差异:

我认为这取决于我的自定义块在 t=0 和初始条件 = 0 之间的积分(即在 0 和 1 之间应用梯形规则,因此得到 0.5)。

修复此问题并使我的自定义块在零时也显示与默认块相同的行为的最佳方法是什么?有什么parameter/setting我遗漏的吗?

谢谢!

注意梯形积分器只需要,也应该只有一个单位延迟。正确的实现如下图所示。

从问题中显示的第二张图片来看,库块的输出在时间等于零时为零。这不是默认行为(如上所示,也在 Integration and Accumulation Methods subsection of the doc for the Discrete Time Integrator 块中讨论)。

您是否将初始条件设置状态更改为输出?如果是,那么需要适当修改自定义实现中的状态。