Discrete-Time Integrator
执行信号的离散时间积分或累积
库:
Simulink /
Commonly Used Blocks
Simulink /
Discrete
HDL Coder /
Discrete
HDL Coder /
HDL Floating Point Operations
描述
使用 Discrete-Time Integrator 模块替代 Integrator 模块来创建纯离散模型。使用 Discrete-Time Integrator 模块,您可以:
在模块对话框上定义初始条件,或作为模块的输入
定义输入增益 (K) 值
输出模块状态
定义积分的上限和下限
使用其他重置输入重置状态
输出方程
对于第一个时间步,模块状态为 n = 0
,具有初始输出 y(0) = IC
或初始状态 x(0) = IC
,具体取决于初始条件设置参数值。
对于仿真时间为 t(n)
的给定步长 n > 0
,Simulink® 将更新输出 y(n)
,如下所示:
前向欧拉方法:
y(n) = y(n-1) + K*[t(n) - t(n-1)]*u(n-1)
后向欧拉方法:
y(n) = y(n-1) + K*[t(n) - t(n-1)]*u(n)
梯形法:
y(n) = y(n-1) + K*[t(n)-t(n-1)]*[u(n)+u(n-1)]/2
Simulink 根据模块的采样时间(可以是显式或触发的采样时间)自动选择这些输出方程的状态空间实现。当使用显式采样时间时,对于所有 n > 0
的步长,t(n)-t(n-1)
将减小到采样时间 T
。
积分方法和累积方法
此模块可以使用前向欧拉、后向欧拉或梯形法对信号进行积分或累积。假定 u
为输入,y
为输出,x
为状态。对于给定步长 n
,Simulink 将更新 y(n)
和 x(n+1)
。在积分模式下,T
是模块的采样时间(如果是触发采样时间,则是 delta T
)。在累积模式下,T = 1
。模块采样时间决定计算输出的时间,而不是输出值。K
是增益值。值根据上限或下限进行剪切。
前向欧拉方法(默认值),也称为正向矩形或左手逼近方法
该软件将 1/s
近似为 T/(z-1)
。模块在第 n
个时间步的输出的表达式为:
x(n+1) = x(n) + K*T*u(n) y(n) = x(n)
模块按照以下时间步计算输出:
Step 0: y(0) = IC (clip if necessary) x(1) = y(0) + K*T*u(0) Step 1: y(1) = x(1) x(2) = x(1) + K*T*u(1) Step n: y(n) = x(n) x(n+1) = x(n) + K*T*u(n) (clip if necessary)
使用此方法时,输入端口 1 没有直接馈通。
后向欧拉方法,也称为反向矩形或右手逼近方法
该软件将 1/s
近似为 T*z/(z-1)
。模块在第 n
个时间步生成的输出的表达式为:
y(n) = y(n-1) + K*T*u(n).
假设 x(n) = y((n)-1)
。模块按照以下时间步计算输出。
如果触发子系统和函数调用子系统的参数初始条件设置设置为“
输出
”或“自动
”:Step 0: y(0) = IC (clipped if necessary) x(1) = y(0)
如果非触发子系统的参数初始条件设置设置为 “
”:
Step 0: x(0) = IC (clipped if necessary) x(1) = y(0) = x(0) + K*T*u(0) Step 1: y(1) = x(1) + K*T*u(1) x(2) = y(1) Step n: y(n) = x(n) + K*T*u(n) x(n+1) = y(n)
使用此方法时,输入端口 1 具有直接馈通。
对于此方法,本软件将 1/s
近似为 T/2*(z+1)/(z-1)
。
当 T
固定时(等于采样周期),计算输出的表达式为:
x(n) = y(n-1) + K*T/2*u(n-1) y(n) = x(n) + K*T/2*u(n)
如果触发子系统和函数调用子系统的参数初始条件设置设置为“
输出
”或“自动
”:Step 0: y(0) = IC (clipped if necessary) x(1) = y(0) + K*T/2*u(0)
如果非触发子系统的参数初始条件设置设置为 “
”:
Step 0: x(0) = IC (clipped if necessary) y(0) = x(0) + K*T/2*u(0) x(1) = y(0) + K*T/2*u(0) Step 1: y(1) = x(1) + K*T/2*u(1) x(2) = y(1) + K*T/2*u(1) Step n: y(n) = x(n) + K*T/2*u(n) x(n+1) = y(n) + K*T/2*u(n)
这里,x(n+1)
是下一个输出的最佳估计值。它与状态的不同之处在于,x(n)
不等于 y(n)
。
使用此方法时,输入端口 1 具有直接馈通。
当 T
是变量时(例如,从触发时间获得),模块将按照以下时间步计算输出。
如果触发子系统和函数调用子系统的参数初始条件设置设置为“
输出
”或“自动
”:Step 0: y(0) = IC (clipped if necessary) x(1) = y(0)
如果非触发子系统的参数初始条件设置设置为 “
”:
Step 0: x(0) = IC (clipped if necessary) x(1) = y(0) = x(0) + K*T/2*u(0) Step 1: y(1) = x(1) + K*T/2*(u(1) + u(0)) x(2) = y(1) Step n: y(n) = x(n) + K*T/2*(u(n) + u(n-1)) x(n+1) = y(n)
定义初始条件
可以在模块对话框上将初始条件定义为参数,或者从外部信号输入初始条件:
要将初始条件定义为模块参数,请将初始条件来源参数设置为
internal
并在初始条件文本框中输入值。要从外部源提供初始条件,请将初始条件来源参数设置为
external
。模块上出现一个额外的输入端口。
何时使用状态端口
在以下情况下,请使用状态端口而不是输出端口:
当模块输出通过重置端口或初始条件端口馈送回模块,从而产生代数环时。有关示例,请参阅
sldemo_bounce_two_integrators
模型。当您要从一个条件执行子系统向另一个条件执行子系统传递状态,从而可能导致计时问题时。有关示例,请参阅Building a Clutch Lock-Up Model。
要解决这些问题,您可以通过状态端口而不是输出端口来传递状态。Simulink 在与输出略有不同的时间生成状态,从而避免您的模型出现这些问题。要输出模块状态,请选中显示状态端口复选框。状态端口出现在模块顶部。
限制积分
要使输出在一定的级别内,请选中限制输出复选框,并在对应的文本框中输入范围限制。此操作会使该模块起到限量积分器的作用。当输出达到界限时,积分动作将关闭以防止积分饱和。在仿真期间,您可以更改限制,但不能更改是否限制输出。下表显示了模块如何决定输出。
积分 | 输出 |
---|---|
小于或等于饱和下限且输入为负 | 保持在饱和下限 |
介于饱和下限和饱和上限之间 | 积分 |
大于或等于饱和上限且输入为正 | 保持在饱和上限 |
要生成指示状态正受到限制的信号,请选中显示饱和端口复选框。模块输出端口下方会显示一个新饱和端口。
饱和信号具有以下三个值之一:
1 表示正在应用上限。
0 表示积分不受限制。
-1 表示正在应用下限。
重置状态
模块根据外部信号将其状态重置为指定的初始条件。要使模块重置其状态,请选择外部重置参数选项之一。将出现一个重置端口,指明重置触发器类型。
重置端口具有直接馈通。如果模块输出直接或通过一系列带直接馈通的模块反馈到此端口中,则会产生代数环。要解决此循环,请改为将模块状态端口的输出馈送给重置端口。要访问模块状态,请选中显示状态端口复选框。
重置触发器类型
通过外部重置参数,您可以确定触发重置的重置信号的属性。触发器选项包括:
“
上升沿
” - 当重置信号具有上升沿时重置状态。例如,下图显示了上升沿重置触发器对后向欧拉积分的影响。“
下降沿
” - 当重置信号具有下降沿时重置状态。例如,下图显示了下降沿重置触发器对后向欧拉积分的影响。“
任一沿
” - 当重置信号上升或下降时重置状态。例如,下图显示了任一沿重置触发器对后向欧拉积分的影响。“
电平
” - 当重置信号非零时重置输出并使输出保持在初始条件。例如,下图显示了电平重置触发器对后向欧拉积分的影响。“
采样电平
” - 当重置信号非零时,将输出重置为初始条件。例如,下图显示了采样电平重置触发器对后向欧拉积分的影响。“
采样电平
”重置选项需要的计算比较少,因此效率比“电平
”重置选项高。注意
对于 Discrete-Time Integrator 模块,所有触发器检测都基于具有正值的信号。例如,从 -1 变成 0 的信号不是上升沿,但从 0 变成 1 的信号是上升沿。
简化初始化模式下的行为
在配置参数对话框中将“欠定初始化检测”设置为“简化
”时,将启用简化初始化模式。如果您使用简化初始化模式,Discrete-Time Integrator 模块的行为将不同于经典初始化模式。新的初始化行为更稳定,并且在以下情况下提供更加一致的行为:
在代数环中
在启用和禁用时
在比较使用触发采样时间和使用显式采样时间(触发模块的速率与显式采样时间的速率相同)的结果时
在简化初始化模式下,Continuous-Time Integrator 模块更容易转换为 Discrete-Time Integrator 模块,因为初始条件对这两个模块的意义相同。
有关经典和简化初始化模式的详细信息,请参阅欠定初始化检测。
对于触发子系统和函数调用子系统,当您使用简化初始化模式并将初始条件设置设置为“输出
”时,模块的启用和禁用行为将被简化,如下所示。
在禁用时间 td
:
y(td) = y(td-1)
在启用时间 te
:
如果父级子系统控制端口的启用时的状态设置为“
重置
”:y(te) = IC.
如果父级子系统控制端口的启用时的状态设置为“
保持
”:y(te) = y(td).
下图显示了这种情况。
使用简化初始化模式时,不能在迭代子系统模块中放置 Discrete-Time Integrator 模块。
在简化初始化模式下,迭代子系统不维护已用时间。因此,如果在迭代子系统模块中放置需要已用时间的 Discrete-Time Integrator 模块,Simulink 将报告错误。
函数调用子系统内的使能子系统中的行为
假设您有一个函数调用子系统,其中包含一个使能子系统,后者又包含一个 Discrete-Time Integrator 模块。将发生以下行为。
积分器方法 | 函数调用触发端口的采样时间类型 | 当函数调用子系统在启用后第一次执行时的 delta T 值 | 出现此行为的原因 |
---|---|---|---|
前向欧拉 | 触发 |
| 当函数调用子系统第一次执行时,积分器算法将使用 |
后向欧拉和梯形 | 触发 |
| 当函数调用子系统第一次执行时,积分器算法将使用 |
前向欧拉、后向欧拉和梯形 | 周期 | 函数调用生成器的采样时间 | 在周期性模式下,Discrete-Time Integrator 模块将使用函数调用生成器的采样时间作为 |
端口
输入
输出
参数
模块特性
数据类型 |
|
直接馈通 |
|
多维信号 |
|
可变大小信号 |
|
过零检测 |
|
扩展功能
版本历史记录
在 R2006a 之前推出
另请参阅
主题
- 模型接口元素的 C 代码生成配置 (Simulink Coder)
- 模型接口元素的 C 代码生成配置 (Simulink Coder)
- 使用 Struct 存储类将参数数据组织为结构体 (Embedded Coder)