Estimate Process Models at the Command Line
Prerequisites
Before you can perform this task, you must have
Input-output data as an
iddata
object or frequency response data asfrd
oridfrd
objects. See Representing Time- and Frequency-Domain Data Using iddata Objects. For supported data formats, see Data Supported by Process Models.Performed any required data preprocessing operations. When working with time domain data, if you need to model nonzero offsets, such as when model contains integration behavior, do not detrend your data. In other cases, to improve the accuracy of your model, you should detrend your data. See Ways to Prepare Data for System Identification.
Using procest to Estimate Process Models
You can estimate process models using the iterative estimation method
procest
that minimizes the prediction errors to obtain maximum likelihood
estimates. The resulting models are stored as idproc
model objects.
You can use the following general syntax to both configure and estimate process models:
m = procest(data,mod_struc,opt)
data
is the estimation data and mod_struc
is one of
the following:
A character vector that represents the process model structure, as described in Process Model Structure Specification.
A template
idproc
model.opt
is an option set for configuring the estimation of the process model, such as handling of initial conditions, input offset and numerical search method.
Tip
You do not need to construct the model object using idproc
before
estimation unless you want to specify initial parameter guesses, minimum/maximum bounds, or
fixed parameter values, as described in Estimate Process Models with Fixed Parameters.
For more information about validating a process model, see Validating Models After Estimation.
You can use procest
to refine parameter estimates of an existing
process model, as described in Refine Linear Parametric Models.
Estimate Process Models with Free Parameters
This example shows how to estimate the parameters of a first-order process model:
.
This process has two inputs and the response from each input is estimated by a first-order process model. All parameters are free to vary.
Load estimation data.
load co2data
Specify known sample time of 0.5 min.
Ts = 0.5;
Split data set into estimation data ze
and validation data zv
.
ze = iddata(Output_exp1,Input_exp1,Ts,... 'TimeUnit','min'); zv = iddata(Output_exp2,Input_exp2,Ts,... 'TimeUnit','min');
Estimate model with one pole, a delay, and a first-order disturbance component. The data contains known offsets. Specify them using the InputOffset
and OutputOffset
options.
opt = procestOptions; opt.InputOffset = [170;50]; opt.OutputOffset = -45; opt.Display = 'on'; opt.DisturbanceModel = 'arma1'; m = procest(ze,'p1d',opt)
m = Process model with 2 inputs: y = G11(s)u1 + G12(s)u2 From input "u1" to output "y1": Kp G11(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 2.6553 Tp1 = 0.15515 Td = 2.3175 From input "u2" to output "y1": Kp G12(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 9.9756 Tp1 = 2.0653 Td = 4.9195 An additive ARMA disturbance model exists for output "y1": y = G u + (C/D)e C(s) = s + 2.676 D(s) = s + 0.6228 Parameterization: {'P1D'} {'P1D'} Number of free coefficients: 8 Use "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using PROCEST on time domain data "ze". Fit to estimation data: 91.07% (prediction focus) FPE: 2.431, MSE: 2.412
Use dot notation to get the value of any model parameter. For example, get the value of dc gain parameter Kp
.
m.Kp
ans = 1×2
2.6553 9.9756
Estimate Process Models with Fixed Parameters
This example shows how to estimate a process model with fixed parameters.
When you know the values of certain parameters in the model and want to estimate only the values you do not know, you must specify the fixed parameters after creating the idproc
model object. Use the following commands to prepare the data and construct a process model with one pole and a delay:
Load estimation data.
load co2data
Specify known sample time is 0.5 minutes.
Ts = 0.5;
Split data set into estimation data ze
and validation data zv
.
ze = iddata(Output_exp1,Input_exp1,Ts,... 'TimeUnit','min'); zv = iddata(Output_exp2,Input_exp2,Ts,... 'TimeUnit','min'); mod = idproc({'p1d','p1d'},'TimeUnit','min')
mod = Process model with 2 inputs: y = G11(s)u1 + G12(s)u2 From input 1 to output 1: Kp G11(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = NaN Tp1 = NaN Td = NaN From input 2 to output 1: Kp G12(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = NaN Tp1 = NaN Td = NaN Parameterization: {'P1D'} {'P1D'} Number of free coefficients: 6 Use "getpvec", "getcov" for parameters and their uncertainties. Status: Created by direct construction or transformation. Not estimated.
The model parameters Kp
, Tp1
, and Td
are assigned NaN
values, which means that the parameters have not yet been estimated from the data.
Use the Structure
model property to specify the initial guesses for unknown parameters, minimum/maximum parameter bounds and fix known parameters.
Set the value of Kp
for the second transfer function to 10
and specify it as a fixed parameter. Initialize the delay values for the two transfer functions to 2 and 5 minutes, respectively. Specify them as free estimation parameters.
mod.Structure(2).Kp.Value = 10; mod.Structure(2).Kp.Free = false; mod.Structure(1).Tp1.Value = 2; mod.Structure(2).Td.Value = 5;
Estimate Tp1
and Td
only.
mod_proc = procest(ze,mod)
mod_proc = Process model with 2 inputs: y = G11(s)u1 + G12(s)u2 From input "u1" to output "y1": Kp G11(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = -3.2213 Tp1 = 2.1707 Td = 4.44 From input "u2" to output "y1": Kp G12(s) = ---------- * exp(-Td*s) 1+Tp1*s Kp = 10 Tp1 = 2.0764 Td = 4.5205 Parameterization: {'P1D'} {'P1D'} Number of free coefficients: 5 Use "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using PROCEST on time domain data "ze". Fit to estimation data: 77.44% FPE: 15.5, MSE: 15.39
In this case, the value of Kp
is fixed, but Tp1
and Td
are estimated.