## Identify Plant from Data

When designing a model predictive controller, you can specify the internal predictive plant model using a linear identified model. You use System Identification Toolbox™ software to estimate a linear plant model in one of these forms:

You can estimate the plant model programmatically at the command line or interactively using the System Identification app.

### Identify Plant from Data at the Command Line

This example shows how to identify a plant model at the command line. For information on identifying models using the System Identification app, see Identify Linear Models Using System Identification App (System Identification Toolbox).

`load plantIO`

This command imports the plant input signal, `u`, plant output signal, `y`, and sample time, `Ts` to the MATLAB® workspace.

Create an `iddata` object from the input and output data.

`mydata = iddata(y,u,Ts);`

You can optionally assign channel names and units for the input and output signals.

```mydata.InputName = "Voltage"; mydata.InputUnit = "V"; mydata.OutputName = "Position"; mydata.OutputUnit = "cm";```

Typically, you must preprocess identification I/O data before estimating a model. For this example, remove the offsets from the input and output signals by detrending the data.

`mydatad = detrend(mydata);`

You can also remove offsets by creating an `ssestOptions` object and specifying the `InputOffset` and `OutputOffset` options.

For this example, estimate a second-order, linear state-space model using the detrended data. To estimate a discrete-time model, specify the sample time as `Ts`.

`ss1 = ssest(mydatad,2,Ts=Ts)`
```ss1 = 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 x1 0.8942 -0.1575 x2 0.1961 0.7616 B = Voltage x1 6.008e-05 x2 -0.01219 C = x1 x2 Position 38.24 -0.3835 D = Voltage Position 0 K = Position x1 0.03572 x2 0.0223 Sample time: 0.1 seconds Parameterization: FREE form (all coefficients in A, B, C free). Feedthrough: none Disturbance component: estimate Number of free coefficients: 10 Use "idssdata", "getpvec", "getcov" for parameters and their uncertainties. Status: Estimated using SSEST on time domain data "mydatad". Fit to estimation data: 89.85% (prediction focus) FPE: 0.0156, MSE: 0.01541 ```

You can use this identified plant as the internal prediction model for your MPC controller. When you do so, the controller converts the identified model to a discrete-time, state-space model.

By default, the MPC controller discards any unmeasured noise components from your identified model. To configure noise channels as unmeasured disturbances, you must first create an augmented state-space model from your identified model. For example:

`ss2 = ss(ss1,"augmented")`
```ss2 = A = x1 x2 x1 0.8942 -0.1575 x2 0.1961 0.7616 B = Voltage v@Position x1 6.008e-05 0.004448 x2 -0.01219 0.002777 C = x1 x2 Position 38.24 -0.3835 D = Voltage v@Position Position 0 0.1245 Input groups: Name Channels Measured 1 Noise 2 Sample time: 0.1 seconds Discrete-time state-space model. ```

This command creates a state-space model, `ss2`, with two input groups, `Measured` and `Noise`, for the measured and noise inputs respectively. When you import the augmented model into your MPC controller, channels in the `Noise` input group are defined as unmeasured disturbances.

### Working with Impulse-Response Models

You can use System Identification Toolbox software to estimate finite step-response or finite impulse-response (FIR) plant models using measured data. Such models, also known as nonparametric models, are easy to determine from plant data ( and ) and have intuitive appeal.

Use the `impulseest` (System Identification Toolbox) function to estimate an FIR model from measured data. This function generates the FIR coefficients encapsulated as an `idtf` (System Identification Toolbox) object; that is, a transfer function model with only numerator coefficients. `impulseest` is especially effective in situations where the input signal used for identification has low excitation levels. To design a model predictive controller for this plant, you can convert the identified FIR plant model to a numeric LTI model. However, this conversion usually yields a high-order plant, which can degrade the controller design. For example, the numerical precision issues with high-order plants can affect estimator design. This result is particularly an issue for MIMO systems.

Model predictive controllers work best with low-order parametric models. Therefore, to design a model predictive controller using measured plant data, you can:

• Estimate a low-order parametric model using a parametric estimator, such as `ssest` (System Identification Toolbox).

• Initially identify a nonparametric model using `impulseest`, and then estimate a low-order parametric model from the response of the nonparametric model. For an example, see .

• Initially identify a nonparametric model using `impulseest`, and then convert the FIR model to a state-space model using `idss` (System Identification Toolbox). You can then reduce the order of the state-space model using `balred`. This approach is similar to the method used by `ssregest` (System Identification Toolbox).

 Cutler, C., and F. Yocum, "Experience with the DMC inverse for identification," Chemical Process Control — CPC IV (Y. Arkun and W. H. Ray, eds.), CACHE, 1991.

 Ricker, N. L., "The use of bias least-squares estimators for parameters in discrete-time pulse response models," Ind. Eng. Chem. Res., Vol. 27, pp. 343, 1988.

 Wang, L., P. Gawthrop, C. Chessari, T. Podsiadly, and A. Giles, "Indirect approach to continuous time system identification of food extruder," J. Process Control, Vol. 14, Number 6, pp. 603–615, 2004.