主要内容

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

tfest

估计传递函数模型

说明

估计传递函数模型

sys = tfest(tt,np) 使用时间表 tt 中的所有输入和输出信号,估计具有 np 极点的连续时间传递函数 sys。sys 中的零的数量为 max(np-1,0)。您可以将此语法用于 SISO 和 MISO 系统。该函数假定时间表中的最后一个变量是单个输出信号。

您不能使用 tfest 来估计时间序列模型,即不包含任何输入的模型。对于时间序列模型,请使用 ararxarmax

示例

sys = tfest(u,y,np) 使用矩阵 uy 中的时域输入信号和输出信号估计连续时间传递函数。软件假设数据采样时间为 1 秒。您无法更改此假定的采样时间。如果您想根据采样时间不是 1 秒的数据来估计模型,则有两种选择:

  1. 通过使用 'Ts' 名称-值参量设置采样时间来估计离散时间系统。例如,sys = tfest(u,y,np,'Ts',0.1) 将采样时间设置为 0.1。您可以将此语法与 SISO、MISO 和 MIMO 系统一起使用。

  2. 在估计连续时间系统之前,将矩阵数据转换为 timetableiddata 对象。这些格式允许您将采样时间知识合并到数据中。有关详细信息,请参阅 uy

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

示例

sys = tfest(data,np) 使用 data 中的时域或频域数据。尤其当您想使用频域或频率响应数据估计传递函数时,或者当您想要利用数据对象提供的附加信息(例如采样间行为、数据采样时间或试验标注)时,请使用此语法。

sys = tfest(___,nz) 指定零的数量 nz。您可以将此语法与任何先前的输入参数组合一起使用。

示例

sys = tfest(___,nz,iodelay) 指定输入/输出对的传输延迟 iodelay

示例

sys = tfest(___,Name,Value) 使用由一个或多个名称-值对组参量指定的附加模型选项。例如,使用 sys = tfest(um,ym,np,'Ts',0.1) 从采样时间为 0.1 的矩阵数据指定离散时间系统。使用 sys = tfest(data,np,nz,'InputNames',["u1","u2"],'OutputNames',["y1","y3"]) 指定与用于 MIMO 时间表数据的变量相对应的输入和输出信号变量名称。

示例

配置初始参数

sys = tfest(tt,init_sys) 使用线性系统 init_sys 配置 sys 的初始参数化,以便使用时间表 tt 进行估计。

sys = tfest(u,y,init_sys) 使用矩阵数据 uy 进行估计。如果 init_sys 是连续时间模型,建议使用时间表而不是矩阵。

sys = tfest(data,init_sys) 使用数据对象 data 进行估计。

示例

指定其他估计选项

sys = tfest(___,opt) 包含一个选项集 opt,该选项集指定了估计目标、初始条件处理、正则化和用于估计的数值搜索方法等选项。您可以在任何先前的输入参数组合之后指定 opt

示例

返回估计的初始条件

[sys,ic] = tfest(___) 将估计的初始条件作为 initialCondition 对象返回。如果您计划使用相同的估计输入数目据来仿真或预测模型响应,然后将响应与相同的估计输出数目据进行比较,请使用此语法。结合初始条件,可以在仿真的早期阶段使测量数据与仿真或预测数据更好地匹配。

示例

示例

全部折叠

在时间表 tt1 中加载时域系统响应数据。

load sdata1.mat tt1;

设置极点点数 np2 并估计传递函数。

np = 2;
sys = tfest(tt1,np);

sys 是包含估计的双极点传递函数的 idtf 模型。

查看所得估计模型 sys 的分子和分母系数。

sys.Numerator
ans = 1×2

    2.4554  176.9856

sys.Denominator
ans = 1×3

    1.0000    3.1625   23.1631

要查看分子和分母估计值的不确定性以及其他信息,请使用 tfdata

加载时域系统响应数据 z2 并使用它来估计包含两个极点和一个零点的传递函数。

load iddata2 z2;
np = 2;
nz = 1;
sys = tfest(z2,np,nz);

sys 是包含估计传递函数的 idtf 模型。

加载数据 z2,它是一个包含时域系统响应数据的 iddata 对象。

load iddata2 z2;

估计一个包含两个极点和一个零点的传递函数模型 sys,并且其中包括一个已知的传输延迟 iodelay

np = 2;
nz = 1;
iodelay = 0.2;
sys = tfest(z2,np,nz,iodelay);

sys 是一个包含估计传递函数的 idtf 模型,其中 IODelay 属性设置为 0.2 秒。

加载时域系统响应数据 z2 并使用它来估计系统的二极点一零传递函数。通过将 iodelay 的值设置为 NaN 来为传递函数指定未知的传输延迟。

load iddata2 z2;
np = 2;
nz = 1;
iodelay = NaN;
sys = tfest(z2,np,nz,iodelay);

sys 是一个包含估计的传递函数的 idtf 模型,其 IODelay 属性是使用数据估计的。

加载时域系统响应数据,包含在输入和输出矩阵 umat2ymat2 中。

load sdata2.mat umat2 ymat2

估计具有两个极点和一个零点的离散时间传递函数。将采样时间 Ts 指定为 0.1 秒,将传输延迟 iodelay 指定为 2 秒。

np = 2;
nz = 1;
iodelay = 2;
Ts = 0.1;
sysd = tfest(umat2,ymat2,np,nz,iodelay,'Ts',Ts)
sysd =
 
  From input "u1" to output "y1":
                     1.8 z^-1
  z^(-2) * ----------------------------
           1 - 1.418 z^-1 + 0.6613 z^-2
 
Sample time: 0.1 seconds
Discrete-time identified transfer function.

Parameterization:
   Number of poles: 2   Number of zeros: 1
   Number of free coefficients: 3
   Use "tfdata", "getpvec", "getcov" for parameters and their uncertainties.

Status:                                                 
Estimated using TFEST on time domain data "umat2,ymat2".
Fit to estimation data: 80.26%                          
FPE: 2.095, MSE: 2.063                                  
 
Model Properties

默认情况下,模型没有馈通,估计的传递函数的分子多项式具有零首项系数 b0。要估计 b0,请在估计期间指定 Feedthrough 属性。

加载估计数据 z5

load iddata5 z5

首先,估计一个具有两个极点、一个零点且无馈通的离散时间传递函数模型。从 z5Ts 属性获取采样时间。

np = 2;
nz = 1;
sys = tfest(z5,np,nz,'Ts',z5.Ts);

估计的传递函数具有以下形式:

H(z-1)=b1z-1+b2z-21+a1z-1+a2z-2

默认情况下,模型没有馈通,估计的传递函数的分子多项式具有零首项系数 b0。要估计 b0,请在估计期间指定 Feedthrough 属性。

sys = tfest(z5,np,nz,'Ts',z5.Ts,'Feedthrough',true);

估计的传递函数的分子多项式现在具有非零首项系数:

H(z-1)=b0+b1z-1+b2z-21+a1z-1+a2z-2

比较具有和不具有馈通和传输延迟的两个离散时间模型。

如果从测量的输入到输出存在延迟,则可以归因于缺乏馈通或实际的传输延迟。对于离散时间模型,不存在馈通对应于输入和输出之间一个采样的滞后。因此,使用 Feedthrough = falseiodelay = 0 估计模型会产生一个离散时间系统,该系统等同于使用 Feedthrough = trueiodelay = 1 估计的系统。两个系统都表现出相同的时域和频域响应,例如阶跃图和波特图。但是,如果使用 balred 简化这些模型或将它们转换为连续时间表示,则会得到不同的结果。因此,最佳做法是检查观察到的延迟是否可以归因于传输延迟或缺乏馈通。

估计没有馈通的离散时间模型。

load iddata1 z1
np = 2; 
nz = 2; 
sys1 = tfest(z1,np,nz,'Ts',z1.Ts);

因为 sys1 没有馈通,因此具有以 z-1 开头的分子多项式,所以 sys1 滞后一个采样。IODelay 属性为 0。

估计另一个具有馈通的离散时间模型,该模型从两个零减少到一个,从而产生一个采样输入-输出延迟。

sys2 = tfest(z1,np,nz-1,1,'Ts',z1.Ts,'Feedthrough',true);

比较模型的波特响应。

bode(sys1,sys2);

MATLAB figure

sys 1 和 sys 2 所依据的离散方程是等价的,波特响应也是如此。

将模型转换为连续时间并比较这些模型的波特响应。

sys1c = d2c(sys1);
sys2c = d2c(sys2);
bode(sys1c,sys2c);
legend

MATLAB figure

如图所示,当您将两个模型转换为连续时间时,它们的波特响应并不匹配。当没有馈通时,就像 sys1c 一样,必然会有一些滞后。当存在馈通时,就像 sys2c 一样,就不会出现滞后。连续时间馈通通映射到离散时间馈通。连续时间滞后映射到离散时间延迟。

估计一个双输入、单输出的离散时间传递函数,其中第一个输入有两个采样的延迟,第二个输入有零个采样。两个输入均无馈通。

加载数据并将数据分成估计和验证数据集。

load iddata7 z7
ze = z7(1:300);
zv = z7(200:400);

估计一个两输入、一输出的传递函数,该传递函数的每个输入到输出传递函数有两个极点和一个零点。

Lag = [2;0];
Ft = [false,false];
model = tfest(ze,2,1,'Ts',z7.Ts,'Feedthrough',Ft,'InputDelay',Lag);

您选择的 Feedthrough 值决定了首分子系数是否为零(无馈通)(非零馈通)。延迟通常使用 InputDelayIODelay 属性单独表示。此示例仅使用 InputDelay 来表达延迟。

验证估计的模型。排除数据异常值以进行验证。

I = 1:201; 
I(114:118) = [];
opt = compareOptions('Samples',I);
compare(zv,model,opt)

Figure contains an axes object. The axes object with ylabel y1 contains 2 objects of type line. These objects represent Validation data (y1), model: 81.01%.

使用正则化冲激响应估计来辨识 15 阶传递函数模型。

加载数据。

load regularizationExampleData m0simdata;

获得正则化冲激响应 (FIR) 模型。

opt = impulseestOptions('RegularizationKernel','DC');
m0 = impulseest(m0simdata,70,opt);

将阶数降至 15 后,转化为传递函数模型。

m = idtf(balred(idss(m0),15));

将模型输出与数据进行比较。

compare(m0simdata,m);

Figure contains an axes object. The axes object with ylabel y1 contains 2 objects of type line. These objects represent Validation data (y1), m: 63.82%.

tfest 创建一个选项集,指定初始化和搜索方法。还设置显示选项,指定显示每次迭代的损失函数值。

opt = tfestOptions('InitializeMethod','n4sid','Display','on','SearchMethod','lsqnonlin');

加载时域系统响应数据 z2 并使用它来估计具有两个极点和一个零点的传递函数。为估计选项指定 opt

load iddata2 z2;
np = 2;
nz = 1;
iodelay = 0.2;
sys = tfest(z2,np,nz,iodelay,opt);

sys 是包含估计传递函数的 idtf 模型。

加载时域系统响应数据 z2,并使用它来估计二极点、一零点的传递函数。指定输入延迟。

load iddata2 z2;
np = 2;
nz = 1;
input_delay = 0.2;
sys = tfest(z2,np,nz,'InputDelay',input_delay);

sys 是一个 idtf 模型,包含输入延迟为 0.2 秒的估计传递函数。

使用 bode 获取以下系统的幅值和相位响应:

H(s)=s+0.2s3+2s2+s+1

使用 100 个频率点(范围从 0.1 rad/s 到 10 rad/s)来获取频率响应数据。使用 frd 创建频率响应数据对象。

freq = logspace(-1,1,100);
[mag,phase] = bode(tf([1 0.2],[1 2 1 1]),freq);
data = frd(mag.*exp(1j*phase*pi/180),freq);

使用 data 估计三极点、一零点的传递函数。

np = 3;
nz = 1;
sys = tfest(data,np,nz);

sys 是包含估计传递函数的 idtf 模型。

加载时域系统响应数据 co2data,其中包含来自两个试验的数据,每个试验都有两个输入和一个输出。将第一个试验的数据转换为采样时间为 0.5 秒的 iddata 对象 data

load co2data;
Ts = 0.5;
data = iddata(Output_exp1,Input_exp1,Ts);

指定搜索方法以及输入和输出偏移的估计选项。还指定搜索迭代的最大次数。

opt = tfestOptions('SearchMethod','gna');
opt.InputOffset = [170;50];
opt.OutputOffset = mean(data.y(1:75));
opt.SearchOptions.MaxIterations = 50;

使用测量数据和估计选项集 opt 估计传递函数。指定从输入到输出的传输延迟。

np = 3;
nz = 1;
iodelay = [2 5];
sys = tfest(data,np,nz,iodelay,opt);

iodelay 指定从第一个和第二个输入到输出的输入到输出延迟分别为 2 秒和 5 秒。

sys 是包含估计传递函数的 idtf 模型。

加载时域系统响应数据并使用它来估计系统的传递函数。指定已知和未知的传输延迟。

load co2data;
Ts = 0.5;
data = iddata(Output_exp1,Input_exp1,Ts);

data 是一个 iddata 对象,具有两个输入通道和一个输出通道,采样率为 0.5 秒。

创建选项集 opt。指定搜索方法以及输入和输出偏移的估计选项。还指定搜索迭代的最大次数。

opt = tfestOptions('Display','on','SearchMethod','gna');
opt.InputOffset = [170; 50];
opt.OutputOffset = mean(data.y(1:75));
opt.SearchOptions.MaxIterations = 50;

iodelay 中指定未知和已知的传输延迟,使用 2 表示已知延迟 2 秒,使用 nan 表示未知延迟。使用 iodelayopt 估计传递函数。

np = 3;
nz = 1;
iodelay = [2 nan];
sys = tfest(data,np,nz,iodelay,opt);

sys 是包含估计传递函数的 idtf 模型。

创建具有预期分子和分母结构以及延迟约束的传递函数模型。

在这个例子中,试验数据由两个输入和一个输出组成。两种传输延迟都是未知的,并且具有相同的上限。此外,从两个输入到输出的传递函数在结构上是相同的。

init_sys = idtf(NaN(1,2),[1,NaN(1,3)],'IODelay',NaN);
init_sys.Structure(1).IODelay.Free = true;
init_sys.Structure(1).IODelay.Maximum = 7;

init_sys 是一个 idtf 模型,描述从一个输入到输出的传递函数的结构。传递函数由一个零点、三个极点和一个传输延迟组成。使用 NaN 表示未知系数。

init_sys.Structure(1).IODelay.Free = true 表示传输延迟不固定。

init_sys.Structure(1).IODelay.Maximum = 7 将传输延迟的上限设置为 7 秒。

指定从两个输入到输出的传递函数。

init_sys = [init_sys,init_sys];

加载时域系统响应数据并使用它来估计传递函数。在 tfestOptions 选项集 opt 中指定选项。

load co2data;
Ts = 0.5; 
data = iddata(Output_exp1,Input_exp1,Ts);
opt = tfestOptions('Display','on','SearchMethod','gna');
opt.InputOffset = [170;50];
opt.OutputOffset = mean(data.y(1:75));
opt.SearchOptions.MaxIterations = 50;
sys = tfest(data,init_sys,opt);

sys 是包含估计传递函数的 idtf 模型。

通过比较分析估计结果。创建 compareOptions 选项集 opt2 并指定输入和输出偏移量,然后使用 compare

opt2 = compareOptions;
opt2.InputOffset = opt.InputOffset;
opt2.OutputOffset = opt.OutputOffset;
compare(data,sys,opt2)

对于给定的数据,估计包含不同数量极点输入-输出极点的多输入、单输出传递函数。

获取频率响应数据。

例如,使用 frd 为以下系统创建频率响应数据模型:

G=[e-4ss+2s3+2s2+4s+5e-0.6s5s4+2s3+s2+s]

使用 100 个频率点(范围从 0.01 rad/s 到 100 rad/s)来获取频率响应数据。

G = tf({[1 2],[5]},{[1 2 4 5],[1 2 1 1 0]},0,'IODelay',[4 0.6]);
data = frd(G,logspace(-2,2,100));

data 是一个 frd 对象,包含 G 的连续时间频率响应。

估计 data 的传递函数。

 np = [3 4];
 nz = [1 0];
 iodelay = [4 0.6];
 sys = tfest(data,np,nz,iodelay);

np 指定估计的传递函数中的极点点数。np 的第一个元素表示从第一个输入到输出的传递函数包含三个极点。类似地,np 的第二个元素表示从第二个输入到输出的传递函数包含四个极点。

nz 指定估计的传递函数中零点的数量。nz 的第一个元素表示从第一个输入到输出的传递函数包含一个零。类似地,np 的第二个元素表示从第二个输入到输出的传递函数不包含任何零。

iodelay 指定从第一个输入到输出的传输延迟为 4 秒。从第二个输入到输出的传输延迟指定为 0.6 秒。

sys 是包含估计传递函数的 idtf 模型。

使用频率响应数据估计描述不稳定系统的传递函数。

使用 idtf 构建以下系统的传递函数模型 G

G=[s+2s3+2s2+4s+55s4+2s3+s2+s+1]

G = idtf({[1 2], 5},{[1 2 4 5],[1 2 1 1 1]});

使用 idfrd 获取 G 的频率响应数据模型 data。指定 100 个频率点,范围从 0.01 rad/s 到 100 rad/s。

data = idfrd(G,logspace(-2,2,100));

dataidfrd 对象。

估计 data 的传递函数。

np = [3 4];
nz = [1 0];
sys = tfest(data,np,nz);

np 指定估计的传递函数中的极点点数。np 的第一个元素表示从第一个输入到输出的传递函数包含三个极点。类似地,np 的第二个元素表示从第二个输入到输出的传递函数包含四个极点。

nz 指定估计的传递函数中零点的数量。nz 的第一个元素表示从第一个输入到输出的传递函数包含一个零。类似地,nz 的第二个元素表示从第二个输入到输出的传递函数不包含任何零。

sys 是包含估计传递函数的 idtf 模型。

pole(sys)
ans = 7×1 complex

  -1.5260 + 0.0000i
  -0.2370 + 1.7946i
  -0.2370 - 1.7946i
  -1.4656 + 0.0000i
  -1.0000 + 0.0000i
   0.2328 + 0.7926i
   0.2328 - 0.7926i

sys 是一个不稳定系统,正如极点显示所示。

加载高密度频率响应测量数据。数据对应于使用反馈控制维持平衡的不稳定过程。

load HighModalDensityData FRF f

将数据打包为 idfrd 对象以便辨识,并找到波特幅值响应。

G = idfrd(permute(FRF,[2 3 1]),f,0,'FrequencyUnit','Hz');
bodemag(G)

MATLAB figure

估计具有 32 个极点和 32 个零点的传递函数,并比较波特幅值响应。

sys = tfest(G,32,32);
bodemag(G, sys)
xlim([0.01,2e3])
legend

MATLAB figure

加载并绘制数据。

load iddata1ic z1i
plot(z1i)

Figure contains 2 axes objects. Axes object 1 with title y1 contains an object of type line. This object represents z1i. Axes object 2 with title u1 contains an object of type line. This object represents z1i.

检查输出数目据 y(1) 的初始值。

ystart = z1i.y(1)
ystart = 
-3.0491

测量输出不从 0 开始。

估计二阶传递函数 sys 并返回估计的初始条件 ic

[sys,ic] = tfest(z1i,2,1);
ic
ic = 
  initialCondition with properties:

     A: [2×2 double]
    X0: [2×1 double]
     C: [0.2957 5.2441]
    Ts: 0

ic 是一个 initialCondition 对象,它以状态空间形式封装了 sysX0 中的初始状态向量的自由响应。

使用估计数据仿真 sys,但不纳入初始条件。绘制仿真输出与测量输出的图表。

y_no_ic = sim(sys,z1i);
plot(y_no_ic,z1i)
legend('Model Response','Output Data')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent Model Response, Output Data. Axes object 2 with title u1 contains an object of type line. This object represents Output Data.

在仿真开始时,测量输出和仿真输出并不一致。

将初始条件纳入 simOptions 选项集。

opt = simOptions('InitialCondition',ic);
y_ic = sim(sys,z1i,opt);
plot(y_ic,z1i)
legend('Model Response','Output Data')

Figure contains 2 axes objects. Axes object 1 with title y1 contains 2 objects of type line. These objects represent Model Response, Output Data. Axes object 2 with title u1 contains an object of type line. This object represents Output Data.

仿真将模型对输入信号的响应与对初始条件的自由响应结合起来。现在,仿真开始时测量和仿真的输出具有更好的一致性。该初始条件仅对估计数据 z1i 有效。

输入参数

全部折叠

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

使用整个时间表

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

  • 对于 SISO 系统,将 tt 指定为 Ns×2 的 timetable,其中 Ns 是采样数,两个 timetable 变量分别代表测量的输入信号和输出信号。

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

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

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

使用时间表中所选的变量

如果要使用 timetable 中的变量子集,或者输入和输出变量混合在一起,请使用 'InputName''OutputName' 名称-值参量来指定要使用的变量。

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

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

有关使用估计数据类型的详细信息,请参阅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 是试验的数量。所有试验的采样时间必须匹配。

限制

估计数据对象,指定为包含均匀采样的输入和输出值的 iddata 对象、frd 对象或 idfrd 对象。软件默认将模型的采样时间设置为估计数据的采样时间。

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

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

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

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

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

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

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

    • Domain'Frequency'

限制

您不能使用离散时间频域数据来估计连续时间模型。

估计的传递函数中的极点点数,指定为非负整数或矩阵。

对于具有多个输入和/或多个输出的系统,您可以将全局值或 np 的单个值应用于输入/输出对,如下所示:

  • 每对极极点相同 - 将 np 指定为标量。

  • 每对极点的极点- 将 np 指定为 Ny×Nu 矩阵。Ny 是输出数目,Nu 是输入数目。

有关示例,请参阅通过指定极点点数来估计传递函数模型

估计的传递函数中的零点数目,指定为非负整数或矩阵。

对于具有多个输入、多个输出或两者的系统,您可以将全局值或 nz 的单个值应用于输入/输出对,如下所示:

  • 每对极极点相同 - 将 nz 指定为标量。

  • 每对极点的极点- 将 nz 指定为 Ny×Nu 矩阵。Ny 是输出数目,Nu 是输入数目。

对于使用离散时间数据估计的连续时间模型,设置 nz <= np

对于离散时间模型估计,指定 nz 为传递函数分子多项式的零点个数。例如,tfest(tt,2,1,'Ts',data.Ts) 估计形式为 b1z1/(1+a1z1+b2z2) 的传递函数,而 tfest(tt,2,2,'Ts',data.Ts) 估计 (b1z1+b2z2)/(1+a1z1+b2z2)。这里,z-1 是 Z 变换滞后变量。有关离散时间传递函数的详细信息,请参阅Discrete-Time Representation。有关示例,请参阅估计离散时间传递函数

传输延迟,指定为非负整数、NaN 标量或矩阵。

对于连续时间系统,以 dataTimeUnit 属性中存储的时间单位指定传输延迟。对于离散时间系统,将传输延迟指定为整数,表示采样时间 Ts 倍数的延迟。

对于具有 Ny 输出和 Nu 输入的 MIMO 系统,将 iodelay 设置为 Ny×Nu 数组。该数组的每个条目都是一个值,表示相应输入/输出对的传输延迟。您还可以将 iodelay 设置为标值,以对所有输入/输出对应用相同的延迟。

指定的值被视为固定延迟。为了表示未知的传输延迟,请在 iodelay 矩阵中指定 NaN

使用 []0 表示没有传输延迟。

有关示例,请参阅估计包含已知传输延迟的传递函数

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

  • 估计目标

  • 初始条件的处理

  • 估计中使用的数值搜索方法

  • 采样间行为

有关示例,请参阅使用估计选项集估计传递函数

配置 sys 初始参数化的线性系统,指定为 idtf 模型、线性模型或结构。您可以通过使用测量数据进行估计或直接构造来获得 init_sys

如果 init_sysidtf 模型,tfest 将使用 init_sys 的参数值作为估计 sys 的初始猜测。

使用 init_sysStructure 属性来配置分子、分母和传输滞后的初始参数值和约束。例如:

  • 要为 init_sysA 矩阵指定初始猜测值,请将 init_sys.Structure.Numerator.Value 设置为初始猜测值。

  • 要为 init_sysB 矩阵指定约束:

    • init_sys.Structure.Numerator.Minimum 设置为最小分子系值。

    • init_sys.Structure.Numerator.Maximum 设置为最大分子系值。

    • 设置 init_sys.Structure.Numerator.Free 来指示哪些分子系数可以自由估计。

    有关示例,请参阅估计具有未知、受限传输延迟的传递函数

如果 init_sys 不是 idtf 模型,软件首先将 init_sys 转换为传递函数。tfest 使用结果模型的参数作为估计的初始猜测。

如果您未指定 opt,并且 init_sys 是通过估计而不是构造获得的,则软件将使用来自 init_sys.Report.OptionsUsed 的估计选项。

名称-值参数

全部折叠

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

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

示例: sys = tfest(data,np,nz,'Ts',0.1)

输入通道名称,指定为字符串、字符向量、字符串数组或字符向量元胞数组。

如果您使用时间表作为数据源,则 InputName 中的名称必须是时间表变量的子集。

示例: sys = tfest(tt,__,'InputName',["u1" "u2"]) 从时间表 tt 中选择变量 u1u2 作为输入通道用于估计。

输出通道名称,指定为字符串、字符向量、字符串数组或字符向量单元元胞数组。

如果您使用时间表作为数据源,则 OutputName 中的名称必须是时间表变量的子集。

示例: sys = tfest(tt,__,'OutputName',["y1" "y3"]) 从时间表 tt 中选择变量 y1y3 作为输出通道用于估计。

估计模型的采样时间,指定为 0 或正标量。

  • 对于连续时间模型,将 'Ts' 指定为 0

  • 对于离散时间模型,指定 'Ts' 为数据采样时间,其单位定义如下:

    • 对于基于时间表的数据 - 时间表 Time

    • 对于基于矩阵的数据 - 秒

    • 对于数据对象,例如 iddata 对象 - data.TimeUnit 属性

    在离散情况下,npnz 指的是分子和分母多项式的 z-1 的根个数。

    要获取时间表 tt 的数据采样时间,请使用时间表属性 tt.Properties.Timestep

有关示例,请参阅估计离散时间传递函数

每个输入通道的输入延迟,指定为标量或数值向量。

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

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

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

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

有关示例,请参阅指定估计传递函数的模型属性

离散时间传递函数的馈通,指定为逻辑标量或 Ny×Nu 逻辑矩阵。Ny 是输出数目,Nu 是输入数目。要对所有输入/输出通道使用相同的馈通,请将 Feedthrough 指定为标量。

考虑具有两个极点和三个零点的离散时间模型:

H(z1)=b0+b1z1+b2z2+b3z31+a1z1+a2z2

当模型具有直接馈通时,b0 是一个自由参数,其值与其余模型参数 b1b2b3a1a2 一起估计。当模型没有馈通时,b0 固定为零。有关示例,请参阅估计具有馈通的离散时间传递函数

输出参量

全部折叠

辨识的传递函数,以 idtf 模型返回。该模型是使用指定的模型阶数、延迟和估计选项创建的。

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

报告字段描述
Status

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

Method

使用的估计命令

InitializeMethod

用于初始化使用时域数据估计连续时间传递函数的分子和分母的算法,以下列值之一返回:

  • 'iv' - 工具变量方法

  • 'svf' - 状态变量过滤器方法

  • 'gpmf' - 广义泊松矩函数方法

  • 'n4sid' - 子空间状态空间估计方法

此字段对于查看估计选项集中的 InitializeMethod 选项为 'all' 时所使用的算法特别有用。

N4Weight

InitializeMethod'n4sid' 时,在奇异值分解步骤中使用的加权矩阵,返回以下值之一:

  • 'MOESP' - 使用 Verhaegen 的 MOESP 算法。

  • 'CVA' - 使用 Larimore 的典型变量算法 (CVA)。

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

此字段对于查看估计选项集中的 N4Weight 选项为 'auto' 时使用的加权矩阵特别有用。

N4Horizon

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

InitialCondition

模型估计期间初始条件的处理,返回以下值之一:

  • 'zero' - 初始条件已设置为零。

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

  • 'backcast' - 使用最佳最小二乘拟合估计初始条件。

此字段对于查看当估计选项集中的 InitialCondition 选项为 'auto' 时如何处理初始条件特别有用。

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

用于估计的选项集。如果没有配置自定义选项,则这是一组默认选项。请参阅 polyestOptions 以了解详细信息。

RandState

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

DataUsed

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

  • Name - 数据集的名称

  • Type - 数据类型

  • Length - 数据采样数

  • Ts - 采样时间

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

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

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

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

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

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

Termination

用于预测误差最小化的迭代搜索的终止条件,以包含这些字段的结构返回。

  • WhyStop - 终止数值搜索的原因

  • Iterations - 估计算法执行的搜索迭代次数

  • FirstOrderOptimality - 搜索算法终止时梯度搜索向量的 -范数

  • FcnCount -目标函数被调用的次数

  • UpdateNorm - 最后一次迭代中的梯度搜索向量的范数。当搜索方法为 'lsqnonlin''fmincon' 时省略。

  • LastImprovement - 上次迭代中的标准改进,以百分比表示。当搜索方法为 'lsqnonlin''fmincon' 时省略。

  • Algorithm - 'lsqnonlin''fmincon' 搜索方法使用的算法。当使用其他搜索方法时省略。

对于不需要数值搜索优化的估计方法,省略了 Termination 字段。

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

估计的初始条件,以 initialCondition 对象或 initialCondition 值的对象数组形式返回。

  • 对于单试验数据集,ic 以状态空间形式表示传递函数模型(AC 矩阵)对估计的初始状态 (x0) 的自由响应。

  • 对于包含 Ne 个试验的多试验数据集,ic 是一个长度为 Ne 的对象数组,其中包含每个试验的一组 initialCondition 值。

如果 tfest 返回 ic0 值,并且您知道您具有非零初始条件,请将 tfestOptions 中的 'InitialCondition' 选项设置为 'estimate',并将更新的选项集传递给 tfest。例如:

opt = tfestOptions('InitialCondition','estimate')
[sys,ic] = tfest(data,np,nz,opt)
当初始条件对整体估计误差最小化过程的影响可忽略不计时,'InitialCondition' 的默认 'auto' 设置使用 'zero' 方法。指定 'estimate' 可确保软件估计 ic 的值。

有关详细信息,请参阅 initialCondition。有关使用此参量的示例,请参阅获取并应用估计的初始条件

算法

全部折叠

tfest 使用的估计算法的细节取决于各种因素,包括估计模型的采样和估计数据。

参考

[1] Garnier, H., M. Mensler, and A. Richard. “Continuous-Time Model Identification from Sampled Data: Implementation Issues and Performance Evaluation.” International Journal of Control 76, no. 13 (January 2003): 1337–57. https://doi.org/10.1080/0020717031000149636.

[2] Ljung, Lennart. “Experiments with Identification of Continuous Time Models.” IFAC Proceedings Volumes 42, no. 10 (2009): 1175–80. https://doi.org/10.3182/20090706-3-FR-2004.00195.

[3] Young, Peter, and Anthony Jakeman. “Refined Instrumental Variable Methods of Recursive Time-Series Analysis Part III. Extensions.” International Journal of Control 31, no. 4 (April 1980): 741–64. https://doi.org/10.1080/00207178008961080.

[4] Drmač, Z., S. Gugercin, and C. Beattie. “Quadrature-Based Vector Fitting for Discretized H2 Approximation.” SIAM Journal on Scientific Computing 37, no. 2 (January 2015): A625–52. https://doi.org/10.1137/140961511.

[5] Ozdemir, Ahmet Arda, and Suat Gumussoy. “Transfer Function Estimation in System Identification Toolbox via Vector Fitting.” IFAC-PapersOnLine 50, no. 1 (July 2017): 6232–37. https://doi.org/10.1016/j.ifacol.2017.08.1026.

版本历史记录

在 R2012a 中推出

全部展开