impulse
R2026b动态系统的冲激响应图;冲激响应数据
语法
描述
[___] = impulse(___, 使用一个或多个名称-值参量指定响应属性。例如,Name=Value)impulse(sys,Bias=2) 将输入偏置设置为 2。 (自 R2026b 起)
以下名称-值参量会覆盖其他输入参量中指定的值。
impulse(___) 使用所有先前输入参量组合的默认绘图选项绘制 sys 的冲激响应。如需更多绘图自定义选项,请使用 impulseplot。
要在同一图上绘制多个动态系统的响应,您可以将
sys指定为以逗号分隔的模型列表。例如,impulse(sys1,sys2,sys3)在同一图上绘制三个模型的响应。要为图中的每个系统分别指定一种颜色、线型和标记,请为每个系统指定
LineSpec值。例如,impulse(sys1,LineSpec1,sys2,LineSpec2)绘制两个模型并指定它们的绘图样式。有关指定LineSpec值的详细信息,请参阅impulseplot。
示例
绘制由以下传递函数表示的连续时间系统的冲激响应。
对于此示例,请创建一个表示传递函数的 tf 模型。同样,您可以绘制其他动态系统模型类型的冲激响应,例如零极点增益 (zpk) 模型或状态空间 (ss) 模型。
sys = tf(4,[1 2 10]);
绘制冲激响应。
impulse(sys)

impulse 图自动包含一条水平点线,指示稳态响应。在 MATLAB® 图窗窗口中,您可以右键点击绘图以查看其他冲激响应特征,例如峰值响应和瞬态时间。
绘制一个离散时间系统的冲激响应。该系统的采样时间为 0.2 秒,由以下状态空间矩阵表示。
A = [1.6 -0.7;
1 0];
B = [0.5; 0];
C = [0.1 0.1];
D = 0;创建状态空间模型并绘制其冲激响应。
sys = ss(A,B,C,D,0.2); impulse(sys)

冲激响应反映了模型的离散化,因为它显示的是每 0.2 秒计算一次的响应。
检查以下零极点增益模型的冲激响应。
sys = zpk(-1,[-0.2+3j,-0.2-3j],1) * tf([1 1],[1 0.05])
sys =
(s+1)^2
----------------------------
(s+0.05) (s^2 + 0.4s + 9.04)
Continuous-time zero/pole/gain model.
Model Properties
impulse(sys)

默认情况下,impulse 会选择一个结束时间,在该时间处显示响应趋向的稳定状态。为了更仔细地观察瞬态响应,请将冲激图限制在 t = 20 秒。
impulse(sys,20)

您也可以指定要检查冲激响应的确切时间,前提是这些时间之间有恒定的区间。例如,检查从瞬态结束到系统达到稳定状态的响应。
t = 20:0.2:120; impulse(sys,t)

尽管此图从 t = 20 开始,但 impulse 始终在 t = 0 处应用冲激输入。
假设有以下二阶状态空间模型:
A = [-0.5572,-0.7814;0.7814,0]; B = [1,-1;0,2]; C = [1.9691,6.4493]; sys = ss(A,B,C,0);
此模型有两个输入和一个输出,因此它有两个通道:从第一个输入到输出的通道,以及从第二个输入到输出的通道。每个通道都有自己的冲激响应。
当您使用 impulse 时,它会计算所有通道的响应。
impulse(sys)
左图显示了第一个输入通道的冲激响应,右图显示了第二个输入通道的冲激响应。每当您使用 impulse 绘制 MIMO 模型的响应时,它都会生成一个绘图数组,表示该模型的所有 I/O 通道。例如,创建一个具有五个状态、三个输入和两个输出的随机状态空间模型,并绘制其冲激响应。
sys = rss(5,2,3); impulse(sys)


在 MATLAB 图窗窗口中,您可以右键点击绘图并选择 I/O 选择器,将绘图限制为通道的子集。
使用 impulse,您可以在同一轴上绘制多个动态系统的响应。例如,将系统的闭环响应与 PI 控制器和 PID 控制器的闭环响应进行比较。创建系统的传递函数并调节控制器。
H = tf(4,[1 2 10]); C1 = pidtune(H,'PI'); C2 = pidtune(H,'PID');
形成闭环系统并绘制其冲激响应。
sys1 = feedback(H*C1,1); sys2 = feedback(H*C2,1); impulse(sys1,sys2) legend('PI','PID','Location','SouthEast')

默认情况下,impulse 会为您绘制的每个系统选择不同的颜色。您可以使用 LineSpec 输入参量指定颜色和线型。
impulse(sys1,'r--',sys2,'b') legend('PI','PID','Location','SouthEast')

第一个 LineSpec 'r--' 为 PI 控制器的响应指定红色虚线。第二个 LineSpec 'b' 为 PID 控制器的响应指定蓝色实线。图例反映了所指定的颜色和线型。如需更多绘图自定义选项,请使用 impulseplot。
比较多个系统的冲激响应示例说明了如何在一个轴上绘制多个单独系统的响应。当有多个动态系统排列在模型数组中时,impulse 会同时绘制所有这些系统的响应。
创建模型数组。对于此示例,请使用具有不同固有频率的二阶传递函数的一维数组。首先,为模型数组预分配内存。以下命令会创建一个行向量,其中包含 5 个零增益 SISO 传递函数。前两个维度表示模型输出和输入。其余维度是数组维度。
sys = tf(zeros(1,1,1,5));
填充该数组。
w0 = 1.5:1:5.5; % natural frequencies zeta = 0.5; % damping constant for i = 1:length(w0) sys(:,:,1,i) = tf(w0(i)^2,[1 2*zeta*w0(i) w0(i)^2]); end
(有关模型数组以及如何创建模型数组的详细信息,请参阅Model Arrays。)绘制数组中所有模型的冲激响应。
impulse(sys)

impulse 对数组中所有条目的响应使用相同的线型。区分各条目的一种方法是使用动态系统模型的 SamplingGrid 属性将数组中的每个条目与对应的 w0 值相关联。
sys.SamplingGrid = struct('frequency',w0);现在,当您在 MATLAB 图窗窗口中绘制响应时,您可以点击一条轨迹来查看它对应的频率值。
当您为 impulse 提供输出参量时,该函数会返回响应数据数组。对于 SISO 系统,响应数据以列向量形式返回,其长度等于对响应进行采样的时间点的数目。您可以提供时间点的向量 t,也可以允许 impulse 根据系统动态特性为您选择时间点。例如,提取 SISO 系统在 t = 0 和 t = 5 秒之间的 101 个时间点的冲激响应。
sys = tf(4,[1 2 10]); t = 0:0.05:5; y = impulse(sys,t); size(y)
ans = 1×2
101 1
对于 MIMO 系统,响应数据以 N×Ny×Nu 维度的数组形式返回,其中 Ny 和 Nu 是动态系统的输出数目和输入数目。例如,假设有以下状态空间模型,它表示具有两个输入、一个输出的系统。
A = [-0.5572,-0.7814;0.7814,0]; B = [1,-1;0,2]; C = [1.9691,6.4493]; sys = ss(A,B,C,0);
提取该系统在 t = 0 和 t = 20 秒之间的 200 个时间点的冲激响应。
t = linspace(0,20,200); y = impulse(sys,t); size(y)
ans = 1×3
200 1 2
y(:,i,j) 是包含在时间 t 处从第 j 个输入到第 i 个输出的冲激响应的列向量。例如,提取从第二个输入到输出的冲激响应。
y12 = y(:,1,2); plot(t,y12)

将参数化辨识模型的冲激响应与非参数化(经验)模型的冲激响应进行比较。另请查看它们的 3 置信域。
加载数据。
load iddata1 z1
估计参数化模型。
sys1 = ssest(z1,4);
估计非参数化模型。
sys2 = impulseest(z1);
绘制冲激响应以进行比较。
t = (0:0.1:10)'; [y1, ~, ~, ysd1] = impulse(sys1,t); [y2, ~, ~, ysd2] = impulse(sys2,t); plot(t, y1, 'b', t, y1+3*ysd1, 'b:', t, y1-3*ysd1, 'b:') hold on plot(t, y2, 'g', t, y2+3*ysd2, 'g:', t, y2-3*ysd2, 'g:')

计算辨识时间序列模型的冲激响应。
时间序列模型,也称为信号模型,是一种没有测量输入信号的模型。这种模型的冲激图使用其(未经测量的)噪声通道作为应用冲激信号的输入通道。
加载数据。
load iddata9;估计时间序列模型。
sys = ar(z9, 4);
sys 是 A y(t) = e(t) 形式的模型,其中 e(t) 表示噪声通道。对于冲激响应的计算,e(t) 被视为输入通道,并被命名为 e@y1。
绘制冲激响应。
impulse(sys)

创建状态空间模型。
A = [-0.8429,-0.2134;-0.5162,-1.2139]; B = [0.7254,0.7147;0,-0.2050]; C = [-0.1241,1.4090;1.4897,1.4172]; D = [0.6715,0.7172;-1.2075,0]; sys = ss(A,B,C,D);
计算冲激响应,使用名称-值参量指定响应选项。
t = 0:0.1:20; impulse(sys,t, ... Bias=[-2,3], ... Amplitude=[2,-0.5], ... InitialCondition=[0.1,-0.1], ... Delay=5)

此示例说明如何对 LPV 模型的冲激响应进行仿真。此示例对 fcnMaglev.m 中定义的悬浮球模型对扰动 的闭环响应进行仿真。

您必须将参考设置为 ,以便正确初始化系统并使其维持在 = 左右。
创建模型并将其离散化。
hmin = 0.05; hmax = 0.25; h0 = (hmin+hmax)/2; Ts = 0.01; Glpv = lpvss("h",@fcnMaglev,0,0,h0); Glpvd = c2d(Glpv,Ts,"tustin");
对 LPV 模型的三个高度值进行采样,并调节 PID 控制器。
hpid = linspace(hmin,hmax,3);
[Ga,Goffset] = sample(Glpvd,[],hpid);
wc = 50;
Ka = pidtune(Ga,"pidf",wc);
Ka.Tf = 0.01;创建增益调度 PID 控制器。
Ka.SamplingGrid = struct("h",hpid); Koffset = struct("y",{Goffset.u}); Clpv = ssInterpolant(ss(Ka),Koffset);
创建闭环模型。
CL = feedback(Glpvd*[1,Clpv],1,2,1);
CL.InputName = {'du';'href'};
CL.OutputName = "h";获取 = 时的稳态电流,以便确定扰动的大小。
[~,~,~,~,~,~,~,u0] = Glpv.DataFunction(0,h0);
对 和 的冲激变化的响应。
t = 0:Ts:2; pFcn = @(k,x,u) x(1); IC = findop(CL,t(1),h0,u=[u0;h0]); impulseplot(CL,t,pFcn, ... Amplitude=0.2*[u0;h0]*Ts, ... Delay=0.5, ... InitialCondition=IC) title("Current Impulse Disturbance and Height Impulse Change")

创建一个具有复系数的状态空间模型。
A = [-2-2i -2;1 0]; B = [2;0]; C = [0 0.5+2.5i]; D = 0; sys = ss(A,B,C,D);
计算该系统的冲激响应。
[y,t] = impulse(sys);
得到的响应数据包含复数输出值。
y
输入参数
动态系统,指定为 SISO 或 MIMO 动态系统模型或动态系统模型数组。您可以使用以下类型的动态系统:
连续时间或离散时间数值 LTI 模型,如
tf、zpk或ss模型。广义或不确定的 LTI 模型,如
genss或uss模型。(使用不确定模型需要 Robust Control Toolbox™ 软件。)对于可调控制设计模块,该函数在绘图和返回响应数据时,都会根据其当前值评估模型。
对于不确定的控制设计模块,该函数绘制模型的标称值和随机样本。使用输出参量时,该函数仅返回标称模型的响应数据。
稀疏状态空间模型,如
sparss和mechss模型。辨识的 LTI 模型,如
idtf、idss或idproc模型。对于此类模型,该函数还可以绘制置信区间并返回频率响应的标准差。请参阅具有置信域的辨识模型的阶跃响应。(使用辨识模型需要 System Identification Toolbox 软件。)
该函数不支持频率响应数据模型,如 frd、genfrd 或 idfrd 模型。
如果 sys 是模型数组,该函数会在同一坐标区中绘制数组中所有模型的响应。请参阅模型数组中系统的阶跃响应。
要计算响应的时间步,指定为以下值之一:
正标量
tFinal- 计算从t = 0到t = tFinal的响应。二元素向量
[t0 tFinal]- 计算从t = t0到t = tFinal的响应。 (自 R2023b 起)向量
Ti:dt:Tf- 计算t中指定的时间点的响应。对于连续时间系统,
dt是连续系统的离散逼近的采样时间。对于具有指定采样时间的离散时间系统,
dt必须与sys的采样时间属性Ts匹配。对于未指定采样时间 (
Ts = -1) 的离散时间系统,dt必须为1。
[]- 根据系统动态特性自动选择时间值。
当您使用 tFinal 或 [t0 tFinal] 指定时间范围时:
对于连续时间系统,该函数根据系统动态特性自动确定时间步的大小和点数。
对于具有指定采样时间的离散时间系统,该函数使用
sys的采样时间作为步长。对于未指定采样时间 (
Ts = -1) 的离散时间系统,该函数将tFinal解释为采样时间为 1 秒时要仿真的采样周期数。
使用 sys 的 TimeUnit 属性中指定的时间单位表示 t。
在 R2026a 之前的版本中: 使用 Responses.SourceData.TimeSpec 属性指定时间值。
在 R2026b 之前的版本中: 此属性称为 TimeSpec。
LPV 模型的参数轨迹,指定为矩阵或函数句柄。
对于外生轨迹或显式轨迹,将
p指定为维度为 N×Np 的矩阵,其中 N 是时间采样的数目,Np 是参数的数目。因此,行向量
p(i,:)包含第 i 个时间步处的参数值。对于内生轨迹或隐式轨迹,将
p指定为形式为 p = F(k,x,u) 的函数句柄,从而将参数作为时间采样 k、状态 x 和输入 u 的函数提供。impulse仅对离散时间 LPV 模型支持此选项。当您想要对准 LPV 模型进行仿真时,此选项非常有用。
名称-值参数
以 Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
示例: impulse(sys,Bias=2) 将输入偏置设置为 2。
自 R2026b 起
要计算响应的时间步,指定为以下值之一。使用名称-值参量指定时间值会覆盖使用 t 指定的时间值。
正标量
tFinal- 计算从t = 0到t = tFinal的响应。二元素向量
[t0 tFinal]- 计算从t = t0到t = tFinal的响应。向量
Ti:dt:Tf- 计算t中指定的时间点的响应。对于连续时间系统,
dt是连续系统的离散逼近的采样时间。对于具有指定采样时间的离散时间系统,
dt必须与sys的采样时间属性Ts匹配。对于未指定采样时间 (
Ts = -1) 的离散时间系统,dt必须为1。
[]- 根据系统动态特性自动选择时间值。
当您使用 tFinal 或 [t0 tFinal] 指定时间范围时:
对于连续时间系统,该函数根据系统动态特性自动确定时间步的大小和点数。
对于具有指定采样时间的离散时间系统,该函数使用
sys的采样时间作为步长。对于未指定采样时间 (
Ts = -1) 的离散时间系统,该函数将tFinal解释为采样时间为 1 秒时要仿真的采样周期数。
使用 sys 的 TimeUnit 属性中指定的时间单位表示 Time。
自 R2026b 起
LPV 模型的参数轨迹,指定为矩阵或函数句柄。使用名称-值参量指定参数值会覆盖使用 p 指定的参数值。
对于外生轨迹或显式轨迹,将
Parameter指定为维度为 N×Np 的矩阵,其中 N 是时间采样的数目,Np 是参数的数目。因此,行向量
p(i,:)包含第 i 个时间步处的参数值。对于内生轨迹或隐式轨迹,在连续时间内将
Parameter指定为 p = F(t,x,u) 形式的函数句柄,在离散时间内将其指定为 p = F(k,x,u) 形式的函数句柄,从而将参数作为时间 t 或时间采样 k、状态 x 和输入 u 的函数提供。对于隐式轨迹,必须指定仿真的初始条件。当您想要对准 LPV 模型进行仿真时,此选项非常有用。
自 R2026b 起
相对于输入信号偏置的输入电平变化,指定为标量或向量。
对于单输入系统,
Amplitude是一个标量值。对于多输入系统,
Amplitude是长度为 N u 的向量,其中 N u 是输入通道数。每个向量值对应于该输入通道中的电平变化幅度。函数一次计算一个输入通道的响应。
复数支持: 是
自 R2026b 起
基线输入信号值,指定为标量或向量。
对于单输入系统,
Bias是一个标量值。对于多输入系统,
Bias是长度为 N u 的向量,其中 N u 是输入通道数。每个向量值对应于该输入通道中的信号值。函数一次计算一个输入通道的响应。对于具有偏移量的状态空间模型,设置
Bias="u0",以便相对于 LTV 模型的模型偏移量 u 0、u 0(t) 或 LPV 模型的模型偏移量 u 0(t,p) 施加阶跃或冲激变化。对于 LTV 和 LPV 模型,这是数据函数的u0输出。总输入信号则为 u 0 + u(t)。
自 R2026b 起
输入信号延迟,指定为非负标量值。该值指定了相对于仿真开始时间 T 0 的变化发生时间。
自 R2026b 起
初始条件,指定为以下值之一:
[]- 从Bias中指定的输入值对应的稳态条件开始仿真。对于不含内部延迟的状态空间模型,初始状态 xinit 是下式的解,其中 U 为Bias值:连续时间 - 0 = A xinit + B U
离散时间 - xinit = A xinit + B U
初始状态值向量,其长度等于模型中的状态数 - 从指定的初始状态开始仿真,并使用
Bias作为初始输入值。"x0"- 使用Bias作为初始输入值,并计算状态偏移值:对于状态空间模型为 x 0,对于 LTV 模型为 x 0(T 0),对于 LPV 模型为 x 0(T 0,p(T 0))。对于 LTV 和 LPV 模型,状态偏移值是数据函数在 t = T 0 处求得的x0输出。用于辨识模型的
initialCondition(System Identification Toolbox) 对象(需要 System Identification Toolbox 软件)- 从指定的初始状态开始仿真,并使用Bias作为初始输入值。使用
findop创建的工况 - 通过工作点对象,您可以从具有非零过去 u、w 和 y 值的稳态工况开始仿真。当您指定工作点对象时,Bias的值将被忽略。
输出参量
冲激响应数据,以数组形式返回。
对于单输入、多输出系统,
y是行数与时间采样数相同、列数与输出数相同的矩阵。因此,y的第 j 列或y(:,j)包含从输入到第 j 个输出的冲激响应。对于 MIMO 系统,每个输入通道的冲激响应沿
y的第三维度堆叠。因此y的维度为 N×Ny×Nu,其中:N 是时间采样的数目。
Ny 是系统输出的数目。
Nu 是系统输入的数目。
因此,
y(:,i,j)是包含在t或tOut中指定的时间处从第 j 个输入到第 i 个输出的冲激响应的列向量。对于具有复系数的系统,
y是复数值数组。 (自 R2025a 起)
限制
具有非零 D 矩阵的连续系统的冲激响应在 t = 0 时是无穷大的。
impulse会忽略这种不连续性,并返回 t = 0 时的较低连续性值 Cb。impulse命令不适用于具有内部延迟的连续时间模型。对于此类模型,在计算冲激响应之前,请使用pade来逼近时滞。对于连续时间 LPV 模型,
impulse命令不支持沿隐式参数轨迹进行仿真。
提示
要对任意输入信号的系统响应进行仿真,请使用
lsim。当您需要额外的绘图自定义选项时,请改用
impulseplot。使用
impulse创建的绘图不支持以字符串数组或字符向量元胞数组形式指定的多行标题或标签。要指定多行标题和标签,请使用包含newline字符的单个字符串。impulse(sys) title("first line" + newline + "second line");
算法
连续时间 LTI 模型首先转换为状态空间形式。单输入状态空间模型的冲激响应
等效于以下具有初始状态 b 的非强迫响应。
为了仿真此响应,通过对输入使用零阶保持来对系统进行离散化处理。除非提供了时间向量 t = T0:dt:Tf,否则采样时间根据系统动态特性自动选择。因此,dt 用作采样时间。
版本历史记录
在 R2006a 之前推出您现在可以使用以下名称-值参量指定响应选项:
Time- 时间值Bias- 基线输入信号值Amplitude- 输入电平变化Delay- 输入信号延迟InitialCondition- 系统初始条件Parameter- LPV 模型参数轨迹
这些选项取代了使用 RespConfig 对象进行的响应配置。有关详细信息,请参阅不推荐使用 RespConfig 对象来设置响应选项。
不推荐使用 RespConfig 对象来设置响应选项。请改用 Bias、Amplitude、Delay 和 InitialCondition 名称-值参量。
下表显示了 RespConfig 的一些用法,以及如何更新您的代码以使用新的名称-值参量。其中,sysLPV 是线性参数变化模型。
| 不推荐 | 推荐 |
|---|---|
config = RespConfig( ... Amplitude=0.5, ... Bias=1, ... Delay=2, ... InitialState=[1 2 3]); [y,t] = impulse(sys,config) | [y,t] = impulse(sys, ... Amplitude=0.5, ... Bias=1, ... Delay=2, ... InitialCondition=[1 2 3]) |
config = RespConfig( ... Bias=-1, ... InitialParameter=pinit); [y,t] = impulse(sysLPV,t,pFcn,config) | IC = findop(sysLPV,t(1),pinit,u=-1); [y,t] = impulse(sysLPV,t,pFcn,InitialCondition=IC) |
对于具有状态偏移量的 LPV 系统: config = RespConfig( ... InitialState="x0", ... InitialParameter=pinit) [y,t] = impulse(sysLPV,t,pFcn,config) | [~,~,~,~,~,~,x0] = sysLPV.DataFunction(t(1),pinit); [y,t] = impulse(sysLPV,t,pFcn,InitialCondition=x0) |
对于具有输入偏移量的 LPV 系统: config = RespConfig( ... Bias="u0", ... InitialParameter=pinit) [y,t] = impulse(sysLPV,t,pFcn,config) | [~,~,~,~,~,~,~,u0] = sysLPV.DataFunction(t(1),pinit); IC = findop(sysLPV,tinit,pinit,u=u0); [y,t] = impulse(sysLPV,t,pFcn,InitialCondition=IC) |
从 R2026a 版本开始,impulse 函数支持指数为 2 的稀疏 DAE。
从 R2025a 开始,impulse 函数支持具有复系数的动态系统。
对于使用 impulse 创建的绘图,gca 函数现在返回 impulseplot 图对象,而不是绘图内的坐标区。
使用通过 RespConfig 创建的非默认配置时,某些响应特征的计算有所变化。
现在,峰值响应特性会显示与初始输出值的最大偏差。即,当 t ≥ t0 + td 时,峰值为 |y(t) – yinit|,其中 yinit 是冲激前的输出值。
因此,在峰值响应数据提示中,峰值振幅已重命名为峰值偏差。
现在,稳定时间和瞬态时间是相对于冲激发生的时间计算的 (t = t0 + td)。这可确保这些特性不受延迟的影响。
通常,软件从冲激时开始计算响应特征,其中初始输出值 yinit 作为冲激之前的值。
使用新语法 [y,tOut] = impulse(sys,[t0,tFinal]) 计算从时间 t0 到 tFinal 的冲激响应。对于具有延迟 td 的配置,该函数在时间 t = t0 + td 时应用冲激。
现在,您可以使用 Ti:dt:Tf 形式的时间向量输入为 impulse 命令指定非零开始时间。以前,无论 Ti 如何,该命令始终在 t = 0 处应用输入。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)