主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

n4sid

使用时域或频域数据子空间方法估计状态空间模型

说明

估计状态空间模型

sys = n4sid(tt,nx) 使用时间表 tt 中的所有输入和输出信号估计 nx 阶离散时间状态空间模型 sys

sys 是以下形式的模型:

x˙(t)=Ax(t)+Bu(t)+Ke(t)y(t)=Cx(t)+Du(t)+e(t)

ABCDK 是状态空间矩阵。ut)是输入,yt)是输出,et)是扰动,xt)是 nx 状态向量。

ABCK 的所有条目默认都是可自由估计的参数。对于动态系统,D 默认固定为零,这意味着系统没有馈通。对于静态系统 (nx = 0),D 默认是一个可估计参数。

您可以将此语法用于 SISO 和 MISO 系统。该函数假定时间表中的最后一个变量是单个输出信号。如果 tt 包含代表唯一输出的单个变量,您也可以使用此语法来估计时间序列模型。

对于 MIMO 系统和包含比您计划用于估计的变量更多的变量的时间表,您还必须使用名称-值参量来指定所需的输入和输出通道的名称。有关详细信息,请参阅 tt

要估计连续时间模型,请使用名称-值语法将 'Ts' 设置为 0

示例

sys = n4sid(u,y,nx,'Ts',Ts) 使用逗号分隔的矩阵 uy 中的时域输入和输出信号以及采样时间 Ts。您可以将此语法用于 SISO、MISO 和 MIMO 系统。

不建议根据基于矩阵的数据估计连续时间模型。

sys = n4sid(data,nx) 使用数据对象 data 中的时域或频域数据。尤其当您想使用频域或频率响应数据估计状态空间模型时,或者当您想要利用数据对象提供的附加信息(例如数据采样时间或试验标注)时,请使用此语法。

示例

指定附加选项

sys = n4sid(___,Name,Value) 包含由一个或多个名称-值对组参量指定的附加选项。例如,要估计连续时间模型,将采样时间 'Ts' 指定为 0。使用 'Form''Feedthrough''DisturbanceModel' 名称-值对组参量来修改 ABCDK 矩阵的默认行为。

您可以将此语法与任何先前的输入参数组合一起使用。

示例

sys = n4sid(___,opt) 指定估计选项 opt。这些选项可以包括初始状态、估计目标和用于估计的子空间算法相关选择。在任意先前的输入参数组合之后指定 opt

示例

返回估计的初始状态

[sys,x0] = n4sid(___) 返回估计期间计算的初始状态的值。您可以将此语法与任何先前的输入参数组合一起使用。

示例

全部折叠

估计状态空间模型并将其响应与测量的输出进行比较。

加载存储在时间表中的输入-输出数目据 tt1

load sdata1.mat tt1

估计四阶状态空间模型。

nx = 4;
sys = n4sid(tt1,nx)
sys =
  Discrete-time identified state-space model:
    x(t+Ts) = A x(t) + B u(t) + K e(t)
       y(t) = C x(t) + D u(t) + e(t)
 
  A = 
              x1         x2         x3         x4
   x1     0.8392     0.3129   -0.02105    0.03743
   x2    -0.4768     0.6671     0.1428  -0.003757
   x3    0.01951    0.08374   -0.09761     -1.046
   x4  -0.003885    0.02914     0.8796   -0.03171
 
  B = 
                u
   x1     0.02635
   x2     0.03301
   x3  -7.256e-05
   x4   0.0005861
 
  C = 
           x1       x2       x3       x4
   y    69.08   -26.64    2.237  -0.5601
 
  D = 
      u
   y  0
 
  K = 
               y
   x1   0.003282
   x2  -0.009339
   x3   0.003232
   x4   0.003809
 
Sample time: 0.1 seconds

Parameterization:
   FREE form (all coefficients in A, B, C free).
   Feedthrough: none
   Disturbance component: estimate
   Number of free coefficients: 28
   Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                          
Estimated using N4SID on time domain data "tt1". 
Fit to estimation data: 76.33% (prediction focus)
FPE: 1.21, MSE: 1.087                            
 
Model Properties

将仿真模型响应与测量的输出进行比较。

compare(tt1,sys)

Figure contains an axes object. The axes object with ylabel y contains 2 objects of type line. These objects represent Validation data (y), sys: 70.44%.

该图显示仿真模型与估计数据的拟合度百分比大于 70%。

您可以通过探索 idss 属性 sys.Report 来查看有关估计的详细信息。

sys.Report
ans = 
          Status: 'Estimated using N4SID with prediction focus'
          Method: 'N4SID'
    InitialState: 'estimate'
        N4Weight: 'CVA'
       N4Horizon: [6 10 10]
             Fit: [1×1 struct]
      Parameters: [1×1 struct]
     OptionsUsed: [1×1 idoptions.n4sid]
       RandState: [1×1 struct]
        DataUsed: [1×1 struct]

例如,找出有关估计的初始状态的详细信息。

sys.Report.Parameters.X0
ans = 4×1

   -0.0085
   -0.0052
    0.0193
    0.0282

加载输入/输出数目据 umat1ymat1(它们是数值矩阵)以及采样时间 Ts

load sdata1 umat1 ymat1 Ts

通过将参量 nx 指定为 1 到 10 的范围来确定最佳模型阶数。

nx = 1:10;
sys = n4sid(umat1,ymat1,nx,'Ts',Ts);

自动生成的图表显示了由 nx 指定的阶数的模型的 Hankel 奇异值。

具有相对较小的 Hankel 奇异值的状态可以被安全地丢弃。建议的默认阶数选择是 2

Chosen Order 列表中选择模型阶数,然后点击 Apply

加载估计数据。

load iddata2 z2

指定估计选项。将加权方案 'N4Weight' 设置为 'SSARX',将估计状态显示选项 'Display' 设置为 'on'

opt = n4sidOptions('N4Weight','SSARX','Display','on')
Option set for the n4sid command:

          InitialState: 'estimate'
              N4Weight: 'SSARX'
             N4Horizon: 'auto'
               Display: 'on'
           InputOffset: []
          OutputOffset: []
    EstimateCovariance: 1
          OutputWeight: []
                 Focus: 'prediction'
       WeightingFilter: []
      EnforceStability: 0
              Advanced: [1×1 struct]

Description of options

使用更新的选项集估计三阶状态空间模型。

nx = 3;
sys = n4sid(z2,nx,opt);

修改 A、B 和 C 矩阵的标准形式,在 D 矩阵中包含一个馈通通项,并消除 K 矩阵中的扰动模型估计。

加载输入-输出数目据并使用 n4sid 默认选项估计四阶系统。

load sdata1 tt1
sys1 = n4sid(tt1,4);

指定模态形式并将 A 矩阵与默认的 A 矩阵进行比较。

sys2 = n4sid(tt1,4,'Form','modal');
A1 = sys1.A
A1 = 4×4

    0.8392    0.3129   -0.0211    0.0374
   -0.4768    0.6671    0.1428   -0.0038
    0.0195    0.0837   -0.0976   -1.0462
   -0.0039    0.0291    0.8796   -0.0317

A2 = sys2.A
A2 = 4×4

    0.7554    0.3779         0         0
   -0.3779    0.7554         0         0
         0         0   -0.0669    0.9542
         0         0   -0.9542   -0.0669

包括一个馈通通项并比较 D 矩阵。

sys3 = n4sid(tt1,4,'Feedthrough',1);
D1 = sys1.D
D1 = 
0
D3 = sys3.D
D3 = 
0.0487

消除干扰建模并比较 K 矩阵。

sys4 = n4sid(tt1,4,'DisturbanceModel','none');
K1 = sys1.K
K1 = 4×1

    0.0033
   -0.0093
    0.0032
    0.0038

K4 = sys4.K
K4 = 4×1

     0
     0
     0
     0

估计连续时间标准形式模型。

加载估计数据。

load iddata1 z1

估计模型。将 Ts 设置为 0 以指定连续模型。

nx = 2;
sys = n4sid(z1,nx,'Ts',0,'Form','canonical');

sys 是标准形式的二阶连续时间状态空间模型。

使用子空间算法 SSARX 从闭环数据估计状态空间模型。该算法比其他加权算法更能捕获反馈效应。

为受白噪声破坏的二阶系统生成闭环估计数据。

N = 1000; 
K = 0.5;
rng('default');
w = randn(N,1);
z = zeros(N,1); 
u = zeros(N,1); 
y = zeros(N,1);
e = randn(N,1);
v = filter([1 0.5],[1 1.5 0.7],e);
for k = 3:N
   u(k-2) = -K*y(k-2) + w(k-2);
   u(k-1) = -K*y(k-1) + w(k-1);
   z(k) = 1.5*z(k-1) - 0.7*z(k-2) + u(k-1) + 0.5*u(k-2);
   y(k) = z(k) + 0.8*v(k);
end
dat = iddata(y, u, 1);

指定 N4SID 算法使用的加权方案 'N4weight'。创建两个选项集。对于一个选项集,将 'N4weight' 设置为 'CVA'。对于其他选项集,将 'N4weight' 设置为 'SSARX'

optCVA = n4sidOptions('N4weight','CVA');
optSSARX = n4sidOptions('N4weight','SSARX');

使用选项集估计状态空间模型。

sysCVA = n4sid(dat,2,optCVA);
sysSSARX = n4sid(dat,2,optSSARX);

将两个模型与估计数据的拟合度进行比较。

compare(dat,sysCVA,sysSSARX);

Figure contains an axes object. The axes object with ylabel y1 contains 3 objects of type line. These objects represent Validation data (y1), sysCVA: 70.14%, sysSSARX: 76.78%.

如图所示,使用 SSARX 算法估计的模型比使用 CVA 算法估计的模型拟合效果更好。

输入参数

全部折叠

估计数据,指定为均匀采样的 timetable,其中包含表示输入和输出通道的变量,或者对于多试验数据,包含时间表的元胞数组。

使用整个时间表

如果要将 tt 中的所有变量用作输入或输出通道,并且变量的组织方式是输入通道变量集后面跟着输出通道变量集,则:

  • 对于 SISO 系统,将 tt 指定为 Nsx2 时间表,其中 Ns 是采样数,两个时间表变量分别代表测量的输入通道和输出通道。

  • 对于 MIMO 系统,将 tt 指定为 Nsx(Nu+Ny) 时间表,其中 Nu 是输入数目,Ny 是输出数目。第一个 Nu 变量必须包含输入通道,其余 Ny 变量必须包含输出通道。

    当您估计状态空间或传递函数模型时,您还必须明确指定输入和输出通道,如下一节所述。

  • 对于多试验数据,将数据指定为时间表的 Ne×1 元胞数组,其中 Ne 是试验的数量。所有试验的采样时间必须匹配。

使用时间表中所选的变量

如果您想要明确辨识输入和输出通道,例如当您只想使用可用通道的子集时、当输入和输出通道变量混合时,或者当您估计 MIMO 状态空间或传递函数模型时,请使用 'InputName''OutputName' 名称-值参量来指定要用作输入和输出的变量。

例如,假设 tt 包含六个通道变量:"u1""u2""u3""y1""y2""y3"。为了进行估计,您需要使用变量 "u1""u2" 作为输入,使用变量 "y1""y3" 作为输出。使用以下命令执行估计:

sys = n4sid(tt,__,'InputName',["u1" "u2"],'OutputName',["y1" "y3"])

使用时间表估计时间序列模型

如果您想估计时间序列模型而不是输入/输出模型,请仅使用来自 tt 的输出变量。您可以指定 tt 仅包含您想要的输出变量,或者如果 tt 也包含输入变量,则从 tt 中提取输出变量。设定方法与输入/输出模型估计类似。

  • 对于单输出系统,将 tt 指定为 Nsx1 时间表。

  • 对于多元系统,将 tt 指定为 Nsx(Ny) 时间表。即使您计划使用 tt 中的所有变量,也必须使用 'OutputName' 名称-值参量指定所有变量,以便软件不会将它们解释为输入变量。

对于具有您想要使用的变量以外的变量的时间表 tt(例如输入变量或额外的输出变量),请指定您想要使用的输出变量,并在 'InputName' 中指定一个空数组。

例如,假设 tt 包含六个变量:"u1""u2""u3""y1""y2""y3"。对于时间序列估计,您需要使用输出变量 "y1""y3"。使用以下命令执行估计:

sys = n4sid(tt,__,'OutputName',["y1" "y3"],'InputName',[])

有关使用估计数据类型的详细信息,请参阅Data Domains and Data Types in System Identification Toolbox

估计数据,对于 SISO 系统指定为以逗号分隔的 Ns×1 实值矩阵对,其中包含均匀采样的输入和输出时域信号值。这里,Ns 是采样数。

对于 MIMO 系统,指定 u,y 作为具有以下维度的输入/输出矩阵对:

  • u - NsxNu,其中 Nu 是输入数目。

  • y - NsxNy,其中 Ny 是输出数目。

对于多试验数据,将 uy 指定为一对 1×Ne 元胞数组数组,其中 Ne 是试验的数量。所有试验的采样时间必须匹配。

对于仅包含输出而不包含输入的时间序列数据,请指定 [],y

限制

估计数据,指定为 iddata 对象、frd 对象或 idfrd 对象。

对于时域估计,data 必须是包含输入和输出信号值的 iddata 对象。

对于频域估计,data 可以是以下之一:

  • 记录的频率响应数据(frd (Control System Toolbox)idfrd

  • iddata 对象,其属性指定如下。

    • InputData - 输入信号的傅里叶变换

    • OutputData - 输出信号的傅里叶变换

    • Domain'Frequency'

估计数据必须均匀采样。软件默认将模型的采样时间设置为估计数据的采样时间。

对于多试验数据,所有试验的采样时间和采样间行为必须匹配。

数据的范围决定了您可以估计的模型类型。

  • 时域或离散时间频域数据 - 连续时间和离散时间模型

  • 连续时间频域数据 - 仅限连续时间模型

估计模型的阶数,指定为非负整数或包含一系列正整数的向量。

  • 如果您已经知道希望估计模型具有的阶数,请将 nx 指定为标量。

  • 如果您想要比较一系列潜在阶数来为估计模型选择最有效的阶数,请为 nx 指定该范围。n4sid 创建一个 Hankel 奇异值图,显示系统中每个状态的相对能量贡献。汉克尔奇异值相对较小的状态对模型的准确性贡献不大,可以丢弃,影响不大。您保留的最高状态的索引是模型阶数。绘图窗口包含对使用阶数的建议。您可以接受此建议或输入不同的订单。有关示例,请参阅确定最佳估计模型阶数

    如果您未指定 nx,或者将 nx 指定为 best,则软件会自动从范围 1:10 中选择 nx

  • 如果您正在辨识静态系统,请将 nx 设置为 0

估计选项,指定为 n4sidOptions 选项集。由 opt 指定的选项包括:

  • 估计目标

  • 初始条件的处理

  • 子空间算法相关的选择

有关如何指定选项的示例,请参阅指定估计选项连续时间标准形式模型

名称-值参数

全部折叠

Name1=Value1,...,NameN=ValueN 的形式指定可选参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: sys = n4sid(data,nx,'Form','modal')

估计模型的采样时间,指定为由 'Ts'0 或正标量组成的逗号分隔的对。

  • 对于连续时间模型,将 'Ts' 指定为 0。在频域中,使用连续时间频域数据可得到连续时间模型。

  • 对于离散时间模型,软件将 'Ts' 设置为 TimeUnit 属性中存储的单位内数据的采样时间。

每个输入通道的输入延迟,指定为由 'InputDelay' 和一个数值向量组成的逗号分隔的对。

  • 对于连续时间模型,在 TimeUnit 属性中存储的时间单位中指定 'InputDelay'

  • 对于离散时间模型,将 'InputDelay' 指定为采样时间 Ts 的整数倍。例如,将 'InputDelay' 设置为 3 指定三个采样周期的延迟。

对于具有 Nu 输入的系统,将 InputDelay 设置为 Nu×1 向量。该向量的每个条目都是一个值,表示相应输入通道的输入延迟。

要将相同的延迟应用于所有通道,请将 'InputDelay' 指定为标量。

sys 的标准形式类型,指定为由 'Form' 和以下值之一组成的逗号分隔对:

  • 'free' - 将矩阵 ABCDK 的所有条目视为自由。

  • 'modal' - 以模态形式获取 sys

  • 'companion' - 以伴随形式获得 sys

  • 'canonical' - 以可观测性标准形式获得 sys

有关标准形式的定义,请参阅State-Space Realizations

有关使用这些形式进行辨识的详细信息,请参阅Estimate State-Space Models with Canonical Parameterization

有关示例,请参阅修改形式、馈通和扰动模型矩阵

从输入到输出的直接馈通,指定为由 'Feedthrough' 和长度为 Nu 的逻辑向量组成的逗号分隔的对,其中 Nu 是输入数目。如果将 'Feedthrough' 指定为逻辑标量,则该值将应用于所有输入。对于静态系统,软件始终假定 'Feedthrough'1

有关示例,请参阅修改形式、馈通和扰动模型矩阵

用于估计 K 矩阵中时域噪声分量参数的选项,指定为由 'DisturbanceModel' 和以下值之一组成的逗号分隔的对:

  • 'estimate' - 估计噪声分量。K 矩阵被视为自由参数。对于时域数据,'estimate' 是默认值。

  • 'none' - 不估计噪声分量。K 矩阵的元素固定为零。对于频域数据,'none' 是默认值,也是唯一可接受的值。

有关示例,请参阅修改形式、馈通和扰动模型矩阵

输出参量

全部折叠

辨识的状态空间模型,以 idss 模型的形式返回。该模型是使用指定的模型阶数、延迟和估计选项创建的。

有关估计结果和所用选项的信息存储在模型的 Report 属性中。Report 具有以下字段。

报告字段描述
Status

模型状态摘要,指示模型是通过构造创建的还是通过估计获得的

Method

使用的估计命令

InitialState

估计过程中如何处理初始状态,返回以下值之一:

  • 'zero' - 初始状态设置为零。

  • 'estimate' - 初始状态被视为独立的估计参数。

当估计选项集中的 'InitialState' 选项为 'auto' 时,此字段特别有用。

N4Weight

N4SID 算法用于奇异值分解的加权方案,以下列值之一返回:

  • 'MOESP' - 使用 MOESP 算法。

  • 'CVA' - 使用典型变量算法。

  • 'SSARX' - 一种使用基于 ARX 估计的算法计算权重的子空间辨识方法。

当估计选项集中的 N4Weight 选项为 'auto''all' 时,此选项特别有用。

N4Horizon

N4SID 算法使用的前向和后向预测范围,以包含三个元素 [r sy su] 的行向量返回,其中 r 是最大前向预测范围,sy 是过去输出数目,su 是用于预测的过去输入数目。

Fit

估计的定量评估,以结构体形式返回。有关这些质量度量的详细信息,请参阅Loss Function and Model Quality Metrics。该结构体具有以下字段。

  • FitPercent - 归一化均方根误差 (NRMSE),用于衡量模型响应对估计数据的拟合度,以百分比 fitpercent = 100(1-NRMSE) 表示

  • LossFcn - 估计完成时的损失函数值

  • MSE - 均方误差 (MSE),衡量模型响应对估计数据的拟合度

  • FPE - 模型的最终预测误差

  • AIC - 模型质量的原始赤池信息准则 (AIC) 测量

  • AICc - 小采样大小的校正 AIC

  • nAIC - 归一化 AIC

  • BIC - 贝叶斯信息标准 (BIC)

Parameters

模型参数的估计值

OptionsUsed

用于估计的选项集。如果您没有配置任何自定义选项,则 OptionsUsed 是默认选项集。请参阅 n4sidOptions 以了解详细信息。

RandState

估计开始时随机数流的状态。如果在估计期间未使用随机化,则为空 []。有关详细信息,请参阅 rng

DataUsed

用于估计的数据的属性,以具有以下字段的结构返回。

  • Name - 数据集的名称

  • Type - 数据类型

  • Length - 数据采样数

  • Ts - 采样时间

  • InterSample - 输入采样间行为,以下列值之一返回:

    • 'zoh' - 零阶保持器在采样之间维持分段常数输入信号。

    • 'foh' - 一阶保持器在采样之间维持分段线性输入信号。

    • 'bl' - 带限行为指定连续时间输入信号在奈奎斯特频率以上的功率为零。

  • InputOffset - 估计期间从时域输入数目据中移除的偏移量。对于非线性模型,它是 []

  • OutputOffset - 估计期间从时域输出数目据中移除的偏移量。对于非线性模型,它是 []

有关使用 Report 的详细信息,请参阅Estimation Report

估计期间计算的初始状态,以包含与每个试验对应的列向量的数组形式返回。

该数组也存储在模型 Report 属性的 Parameters 字段中。

参考

[1] Ljung, L. System Identification: Theory for the User, Appendix 4A, Second Edition, pp. 132–134. Upper Saddle River, NJ: Prentice Hall PTR, 1999.

[2] van Overschee, P., and B. De Moor. Subspace Identification of Linear Systems: Theory, Implementation, Applications. Springer Publishing: 1996.

[3] Verhaegen, M. "Identification of the deterministic part of MIMO state space models." Automatica, 1994, Vol. 30, pp. 61–74.

[4] Larimore, W.E. "Canonical variate analysis in identification, filtering and adaptive control." Proceedings of the 29th IEEE Conference on Decision and Control, 1990, pp. 596–604.

[5] McKelvey, T., H. Akcay, and L. Ljung. "Subspace-based multivariable system identification from frequency response data." IEEE Transactions on Automatic Control, 1996, Vol. 41, pp. 960–979.

版本历史记录

在 R2006a 之前推出

全部展开