Documentation

### This is machine translation

Mouseover text to see original. Click the button below to return to the English version of the page.

# recursiveBJ

Create System object for online parameter estimation of Box-Jenkins polynomial model

Use `recursiveBJ` command for parameter estimation with real-time data. If all data necessary for estimation is available at once, and you are estimating a time-invariant model, use the offline estimation command, `bj`.

## Syntax

```obj = recursiveBJ obj = recursiveBJ(Orders) obj = recursiveBJ(Orders,B0,C0,D0,F0) obj = recursiveBJ(___,Name,Value) ```

## Description

`obj = recursiveBJ` creates a System object™ for online parameter estimation of a default single-input single-output (SISO) Box-Jenkins polynomial model structure. The default model structure has polynomials of order 1 and initial polynomial coefficient values `eps`.

After creating the object, use the `step` command to update model parameter estimates using recursive estimation algorithms and real-time data.

`obj = recursiveBJ(Orders)` specifies the polynomial orders of the Box-Jenkins model to be estimated.

`obj = recursiveBJ(Orders,B0,C0,D0,F0)` specifies the polynomial orders and initial values of the polynomial coefficients. Specify initial values to potentially avoid local minima during estimation. If the initial values are small compared to the default `InitialParameterCovariance` property value, and you have confidence in your initial values, also specify a smaller `InitialParameterCovariance`.

`obj = recursiveBJ(___,Name,Value)` specifies additional attributes of the Box-Jenkins model structure and recursive estimation algorithm using one or more `Name,Value` pair arguments.

## Object Description

`recursiveBJ` creates a System object for online parameter estimation of SISO Box-Jenkins polynomial models using a recursive estimation algorithm.

A System object is a specialized MATLAB® object designed specifically for implementing and simulating dynamic systems with inputs that change over time. System objects use internal states to store past behavior, which is used in the next computational step.

After you create a System object, you use commands to process data or obtain information from or about the object. System objects use a minimum of two commands to process data — a constructor to create the object and the `step` command to update object parameters using real-time data. This separation of declaration from execution lets you create multiple, persistent, reusable objects, each with different settings.

You can use the following commands with the online estimation System objects in System Identification Toolbox™:

CommandDescription
`step`

Update model parameter estimates using recursive estimation algorithms and real-time data.

`step` puts the object into a locked state. In a locked state, you cannot change any nontunable properties or input specifications, such as model order, data type, or estimation algorithm. During execution, you can only change tunable properties.

`release`

Unlock the System object. Use this command to enable setting of nontunable parameters.

`reset`

Reset the internal states of a locked System object to the initial values, and leave the object locked.

`clone`

Create another System object with the same object property values.

Do not create additional objects using syntax `obj2 = obj`. Any changes made to the properties of the new object created this way (`obj2`) also change the properties of the original object (`obj`).

`isLocked`

Query locked status for input attributes and nontunable properties of the System object.

Use the `recursiveBJ` command to create an online estimation System object. Then estimate the Box-Jenkins polynomial model parameters (`B`, `C`, `D`, and `F`) and output using the `step` command with incoming input and output data, `u` and `y`.

`[B,C,D,F,EstimatedOutput] = step(obj,y,u)`

For `recursiveBJ` object properties, see Properties.

## Examples

collapse all

Create a System object for online parameter estimation of a Box-Jenkins polynomial model.

`obj = recursiveBJ;`

The Box-Jenkins model has a default structure with polynomials of order 1 and initial polynomial coefficient values, `eps`.

Load the estimation data. In this example, use a static data set for illustration.

```load iddata1 z1; output = z1.y; input = z1.u;```

Estimate Box-Jenkins model parameters online using `step`.

```for i = 1:numel(input) [B,C,D,F,EstimatedOutput] = step(obj,output(i),input(i)); end```

View the current estimated values of polynomial `D` coefficients.

`obj.D`
```ans = 1×2 1.0000 -0.6876 ```

View the current covariance estimate of the parameters.

`obj.ParameterCovariance`
```ans = 4×4 0.0020 -0.0004 -0.0001 0.0002 -0.0004 0.0007 0.0006 -0.0001 -0.0001 0.0006 0.0007 -0.0000 0.0002 -0.0001 -0.0000 0.0001 ```

View the current estimated output.

`EstimatedOutput`
```EstimatedOutput = -4.1905 ```

Specify Box-Jenkins polynomial model orders and delays.

```nb = 1; nc = 1; nd = 2; nf = 1; nk = 1;```

Create a System object for online estimation of Box-Jenkins model with the specified orders and delays.

`obj = recursiveBJ([nb nc nd nf nk]);`

Specify Box-Jenkins polynomial model orders and delays.

```nb = 1; nc = 1; nd = 1; nf = 2; nk = 1;```

Create a System object for online estimation of Box-Jenkins model with known initial polynomial coefficients.

```B0 = [0 1]; C0 = [1 0.5]; D0 = [1 0.9]; F0 = [1 0.7 0.8]; obj = recursiveBJ([nb nc nd nf nk],B0,C0,D0,F0);```

Specify the initial parameter covariance.

`obj.InitialParameterCovariance = 0.1;`

`InitialParameterCovariance` represents the uncertainty in your guess for the initial parameters. Typically, the default `InitialParameterCovariance` (10000) is too large relative to the parameter values. This results in initial guesses being given less importance during estimation. If you have confidence in the initial parameter guesses, specify a smaller initial parameter covariance.

Create a System object that uses the normalized gradient algorithm for online parameter estimation of a Box-Jenkins model.

`obj = recursiveBJ([1 1 1 2 1],'EstimationMethod','NormalizedGradient');`

## Input Arguments

collapse all

Model orders and delays of a Box-Jenkins polynomial model, specified as a 1-by-5 vector of integers, ```[nb nc nd nf nk]```.

• `nb` — Order of the polynomial B(q) + 1, specified as a positive integer.

• `nc` — Order of the polynomial C(q), specified as a nonnegative integer.

• `nd` — Order of the polynomial D(q), specified as a nonnegative integer.

• `nf` — Order of the polynomial F(q), specified as a nonnegative integer.

• `nk` — Input-output delay, specified as a positive integer. `nk` is number of input samples that occur before the input affects the output. `nk` is expressed as fixed leading zeros of the B polynomial.

Initial value of polynomial coefficients, specified as row vectors of real values with elements in order of ascending powers of q-1.

• `B0` — Initial guess for the coefficients of the polynomial B(q), specified as a 1-by-(`nb+nk`) vector with `nk` leading zeros.

• `C0` — Initial guess for the coefficients of the polynomial C(q), specified as a 1-by-(`nc+1`) vector with 1 as the first element.

The coefficients in `C0` must define a stable discrete-time polynomial with roots within a unit disk. For example,

```C0 = [1 0.5 0.5]; all(abs(roots(C0))<1)```
```ans = 1 ```

• `D0` — Initial guess for the coefficients of the polynomial D(q), specified as a 1-by-(`nd+1`) vector with 1 as the first element.

The coefficients in `D0` must define a stable discrete-time polynomial with roots within a unit disk. For example,

```D0 = [1 0.9 0.8]; all(abs(roots(D0))<1)```
```ans = 1 ```

• `F0` — Initial guess for the coefficients of the polynomial F(q), specified as a 1-by-(`nf+1`) vector with 1 as the first element.

The coefficients in `F0` must define a stable discrete-time polynomial with roots within a unit disk. For example,

```F0 = [1 0.5 0.5]; all(abs(roots(F0))<1)```
```ans = 1 ```

Specifying as `[]`, uses the default value of `eps` for the polynomial coefficients.

### Note

If the initial guesses are much smaller than the default `InitialParameterCovariance`, 10000, the initial guesses are given less importance during estimation. In that case, specify a smaller initial parameter covariance.

### Name-Value Pair Arguments

Specify optional comma-separated pairs of `Name,Value` arguments. `Name` is the argument name and `Value` is the corresponding value. `Name` must appear inside quotes. You can specify several name and value pair arguments in any order as `Name1,Value1,...,NameN,ValueN`.

Use `Name,Value` arguments to specify writable properties of `recursiveBJ` System object during object creation. For example, ```obj = recursiveBJ([1 1 1 2 1],'EstimationMethod','Gradient')``` creates a System object to estimate a Box-Jenkins polynomial model using the `'Gradient'` recursive estimation algorithm.

## Properties

`recursiveBJ` System object properties consist of read-only and writable properties. The writable properties are tunable and nontunable properties. The nontunable properties cannot be changed when the object is locked, that is, after you use the `step` command.

Use `Name,Value` arguments to specify writable properties of `recursiveBJ` objects during object creation. After object creation, use dot notation to modify the tunable properties.

```obj = recursiveBJ; obj.ForgettingFactor = 0.99;```

`B`

Estimated coefficients of polynomial B(q), returned as a vector of real values specified in order of ascending powers of q-1.

`B` is a read-only property and is initially empty after you create the object. It is populated after you use the `step` command for online parameter estimation.

`C`

Estimated coefficients of polynomial C(q), returned as a vector of real values specified in order of ascending powers of q-1.

`C` is a read-only property and is initially empty after you create the object. It is populated after you use the `step` command for online parameter estimation.

`D`

Estimated coefficients of polynomial D(q), returned as a vector of real values specified in order of ascending powers of q-1.

`D` is a read-only property and is initially empty after you create the object. It is populated after you use the `step` command for online parameter estimation.

`F`

Estimated coefficients of polynomial F(q), returned as a vector of real values specified in order of ascending powers of q-1.

`F` is a read-only property and is initially empty after you create the object. It is populated after you use the `step` command for online parameter estimation.

`InitialB`

Initial values for the coefficients of polynomial B(q) of order `nb-1`, specified as a row vector of length `nb+nk`, with `nk` leading zeros. `nk` is the input-output delay. Specify the coefficients in order of ascending powers of q-1.

If the initial guesses are much smaller than the default `InitialParameterCovariance`, 10000, the initial guesses are given less importance during estimation. In that case, specify a smaller initial parameter covariance.

`InitialB` is a tunable property. You can change it when the object is in a locked state.

Default: `[0 eps]`

`InitialC`

Initial values for the coefficients of polynomial C(q) of order `nc`, specified as a row vector of length `nc+1`, with 1 as the first element. Specify the coefficients in order of ascending powers of q-1.

The coefficients in `InitialC` must define a stable discrete-time polynomial with roots within a unit circle. For example,

```InitialC = [1 0.5 0.5]; all(abs(roots(InitialC))<1)```
```ans = 1 ```

If the initial guesses are much smaller than the default `InitialParameterCovariance`, 10000, the initial guesses are given less importance during estimation. In that case, specify a smaller initial parameter covariance.

`InitialC` is a tunable property. You can change it when the object is in a locked state.

Default: `[1 eps]`

`InitialD`

Initial values for the coefficients of polynomial D(q) of order `nd`, specified as a row vector of length `nd+1`, with 1 as the first element. Specify the coefficients in order of ascending powers of q-1.

The coefficients in `InitialD` must define a stable discrete-time polynomial with roots within a unit circle. For example,

```InitialD = [1 0.9 0.8]; all(abs(roots(InitialD))<1)```
```ans = 1 ```

If the initial guesses are much smaller than the default `InitialParameterCovariance`, 10000, the initial guesses are given less importance during estimation. In that case, specify a smaller initial parameter covariance.

`InitialD` is a tunable property. You can change it when the object is in a locked state.

Default: `[1 eps]`

`InitialF`

Initial values for the coefficients of polynomial F(q) of order `nf`, specified as a row vector of length `nf+1`, with 1 as the first element. Specify the coefficients in order of ascending powers of q-1.

The coefficients in `InitialF` must define a stable discrete-time polynomial with roots within a unit circle. For example,

```InitialF = [1 0.9 0.8]; all(abs(roots(InitialF))<1)```
```ans = 1 ```

If the initial guesses are much smaller than the default `InitialParameterCovariance`, 10000, the initial guesses are given less importance during estimation. In that case, specify a smaller initial parameter covariance.

`InitialF` is a tunable property. You can change it when the object is in a locked state.

Default: `[1 eps]`

`ParameterCovariance`

Estimated covariance `P` of the parameters, returned as an N-by-N symmetric positive-definite matrix. N is the number of parameters to be estimated. The software computes `P` assuming that the residuals (difference between estimated and measured outputs) are white noise, and the variance of these residuals is 1. `ParameterCovariance` is applicable only when `EstimationMethod` is `'ForgettingFactor'` or `'KalmanFilter'`.

The interpretation of `P` depends on the estimation method:

• `'ForgettingFactor'`R2`/2` * `P` is approximately equal to the covariance matrix of the estimated parameters, where R2 is the true variance of the residuals.

• `'KalmanFilter'`R2* `P` is the covariance matrix of the estimated parameters, and R1 /R2 is the covariance matrix of the parameter changes. Where, R1 is the covariance matrix that you specify in `ProcessNoiseCovariance`.

`ParameterCovariance` is a read-only property and is initially empty after you create the object. It is populated after you use the `step` command for online parameter estimation.

`InitialParameterCovariance`

Covariance of the initial parameter estimates, specified as one of the following:

• Real positive scalar, α — Covariance matrix is an N-by-N diagonal matrix, with α as the diagonal elements. N is the number of parameters to be estimated.

• Vector of real positive scalars, [α1,...,αN] — Covariance matrix is an N-by-N diagonal matrix, with [α1,...,αN] as the diagonal elements.

• N-by-N symmetric positive-definite matrix.

`InitialParameterCovariance` represents the uncertainty in the initial parameter estimates. For large values of `InitialParameterCovariance`, less importance is placed on the initial parameter values and more on the measured data during beginning of estimation using `step`.

Use only when `EstimationMethod` is `'ForgettingFactor'` or `'KalmanFilter'`.

`InitialParameterCovariance` is a tunable property. You can change it when the object is in a locked state.

Default: `10000`

`EstimationMethod`

Recursive estimation algorithm used for online estimation of model parameters, specified as one of the following values:

• `'ForgettingFactor'` — Algorithm used for parameter estimation

• `'KalmanFilter'` — Algorithm used for parameter estimation

• `'NormalizedGradient'` — Algorithm used for parameter estimation

• `'Gradient'` — Unnormalized gradient algorithm used for parameter estimation

Forgetting factor and Kalman filter algorithms are more computationally intensive than gradient and unnormalized gradient methods. However, they have better convergence properties. For information about these algorithms, see Recursive Algorithms for Online Parameter Estimation.

`EstimationMethod` is a nontunable property. You cannot change it during execution, that is after the object is locked using the `step` command. If you want to deploy code using MATLAB Coder™, `EstimationMethod` can only be assigned once.

Default: `'ForgettingFactor'`

`ForgettingFactor`

Forgetting factor, λ, relevant for parameter estimation, specified as a scalar in the range (0,1].

Suppose that the system remains approximately constant over T0 samples. You can choose λ such that:

`${T}_{0}=\frac{1}{1-\lambda }$`
• Setting λ = 1 corresponds to “no forgetting” and estimating constant coefficients.

• Setting λ < 1 implies that past measurements are less significant for parameter estimation and can be “forgotten”. Set λ < 1 to estimate time-varying coefficients.

Typical choices of λ are in the range ```[0.98 0.995]```.

Use only when `EstimationMethod` is `'ForgettingFactor'`.

`ForgettingFactor` is a tunable property. You can change it when the object is in a locked state.

Default: `1`

`EnableAdapation`

Enable or disable parameter estimation, specified as one of the following:

• `true` or `1`— The `step` command estimates the parameter values for that time step and updates the parameter values.

• `false` or `0` — The `step` command does not update the parameters for that time step and instead outputs the last estimated value. You can use this option when your system enters a mode where the parameter values do not vary with time.

### Note

If you set `EnableAdapation` to `false`, you must still execute the `step` command. Do not skip `step` to keep parameter values constant, because parameter estimation depends on current and past I/O measurements. `step` ensures past I/O data is stored, even when it does not update the parameters.

`EnableAdapation` is a tunable property. You can change it when the object is in a locked state.

Default: `true`

`DataType`

Floating point precision of parameters, specified as one of the following values:

• `'double'` — Double-precision floating point

• `'single'` — Single-precision floating point

Setting `DataType` to `'single'` saves memory, but leads to loss of precision. Specify `DataType` based on the precision required by the target processor where you will deploy generated code.

`DataType` is a nontunable property. It can only be set during object construction using `Name,Value` arguments and cannot be changed afterward.

Default: `'double'`

`ProcessNoiseCovariance`

Covariance matrix of parameter variations, specified as one of the following:

• Real nonnegative scalar, α — Covariance matrix is an N-by-N diagonal matrix, with α as the diagonal elements.

• Vector of real nonnegative scalars, [α1,...,αN] — Covariance matrix is an N-by-N diagonal matrix, with [α1,...,αN] as the diagonal elements.

• N-by-N symmetric positive semidefinite matrix.

N is the number of parameters to be estimated.

`ProcessNoiseCovariance` is applicable when `EstimationMethod` is `'KalmanFilter'`.

Kalman filter algorithm treats the parameters as states of a dynamic system and estimates these parameters using a Kalman filter. `ProcessNoiseCovariance` is the covariance of the process noise acting on these parameters. Zero values in the noise covariance matrix correspond to estimating constant coefficients. Values larger than 0 correspond to time-varying parameters. Use large values for rapidly changing parameters. However, the larger values result in noisier parameter estimates.

`ProcessNoiseCovariance` is a tunable property. You can change it when the object is in a locked state.

Default: `0.1`

`AdaptationGain`

Adaptation gain, γ, used in gradient recursive estimation algorithms, specified as a positive scalar.

`AdaptationGain` is applicable when `EstimationMethod` is `'Gradient'` or `'NormalizedGradient'`.

Specify a large value for `AdaptationGain` when your measurements have a high signal-to-noise ratio.

`AdaptationGain` is a tunable property. You can change it when the object is in a locked state.

Default: `1`

`NormalizationBias`

Bias in adaptation gain scaling used in the `'NormalizedGradient'` method, specified as a nonnegative scalar.

`NormalizationBias` is applicable when `EstimationMethod` is `'NormalizedGradient'`.

The normalized gradient algorithm divides the adaptation gain at each step by the square of the two-norm of the gradient vector. If the gradient is close to zero, this can cause jumps in the estimated parameters. `NormalizationBias` is the term introduced in the denominator to prevent these jumps. Increase `NormalizationBias` if you observe jumps in estimated parameters.

`NormalizationBias` is a tunable property. You can change it when the object is in a locked state.

Default: `eps`

## Output Arguments

collapse all

System object for online parameter estimation of Box-Jenkins polynomial model, returned as a `recursiveBJ` System object. This object is created using the specified model orders and properties. Use `step` command to estimate the coefficients of the Box-Jenkins model polynomials. You can then access the estimated coefficients and parameter covariance using dot notation. For example, type `obj.F` to view the estimated F polynomial coefficients.

collapse all

### Box-Jenkins Polynomial Model Structure

The general Box-Jenkins model structure is:

`$y\left(t\right)=\sum _{i=1}^{nu}\frac{{B}_{i}\left(q\right)}{{F}_{i}\left(q\right)}{u}_{i}\left(t-n{k}_{i}\right)+\frac{C\left(q\right)}{D\left(q\right)}e\left(t\right)$`

where nu is the number of input channels.

The orders of Box-Jenkins model are defined as follows:

## Tips

• Starting in R2016b, instead of using the `step` command to update model parameter estimates, you can call the System object with input arguments, as if it were a function. For example, ```[B,C,D,F,EstimatedOutput] = step(obj,y,u)``` and ```[B,C,D,F,EstimatedOutput] = obj(y,u)``` perform equivalent operations.

## Extended Capabilities

#### Introduced in R2015b

##### Support Get trial now