Simulate nonlinear ARX model in Simulink software
System Identification Toolbox
The IDNLARX Model block simulates a nonlinear ARX (idnlarx
)
model for time-domain input and output data.
Input signal to the model.
For multi-input models, specify the input as an Nu
-element
vector, where Nu
is the number of inputs. For example,
you can use a Vector Concatenate block
to concatenate scalar signals into a vector signal.
Note: Do not use a Bus Creator or Mux block to produce the vector signal. |
Simulated output from the model.
Name of idnlarx
variable in the MATLAB^{®} workspace.
Specifies the initial states as one of the following:
Input and output values
: Specify
the input and output levels, as follows:
Input level
If known, enter a vector of length equal to the number of model inputs. If you enter a scalar, it is the signal value for all inputs.
Output level
If known, enter a vector of length equal to the number of model's outputs. If you enter a scalar, it is the signal value for all outputs.
State values
: When selected, you
must specify a vector of length equal to the number of states in the
model in the Vector of state values field.
If you do not know the initial states, you can estimate these states, as follows:
To simulate around a given input level when you do
not know the corresponding output level, you can estimate the equilibrium
state values using the findop
command.
For example, to simulate a model M
about
a steady-state point where the input is 1
and the
output is unknown, you can enter X0
, such that:
X0 = findop(M,'steady',1,NaN)
To estimate the initial states that provide a best
fit between measured data and the simulated response of the model
for the same input, use the findstates
command.
For example, to compute initial states such that the response
of the model M
matches the output data in the data
set z
, you can enter X0
,
such that:
X0 = findstates(M,z,[],'sim')
To continue a simulation from a previous run, use
the simulated input-output values from the previous simulation to
compute the initial states X0
for the current
simulation.
For example, suppose that firstSimData
is
a variable that stores the input and output values from a previous
simulation. For a model M
, you can enter X0
,
such that:
X0 = data2state(M,firstSimData)
Load the sample data.
load twotankdata
Create a data object from sample data.
z = iddata(y,u,0.2,'Tstart',0,'Name','Two tank system'); z1 = z(1:1000);
Estimate a nonlinear ARX model.
mw1 = nlarx(z1,[5 1 3],wavenet('NumberOfUnits',8));
Open a preconfigured Simulink model.
model = fullfile(matlabroot,'examples','ident','ex_idnlarx_block'); open_system(model);
The model uses the Iddata Source, Nonlinear ARX Model, and Scope blocks. The following block parameters have been preconfigured to specify the estimation data, estimated model, and input and output levels:
1. Block parameters of Iddata Source block:
IDDATA Object - z1
2. Block parameters of Nonlinear ARX Model block:
Model - mw1
Initial conditions - Input and output values (default)
Input level - 10
Output level - 0.1
Run the simulation.
Click the Scope block to view the difference between measured output and model output.
To reduce the difference between the measured and simulated responses, estimate an initial state vector for the model from the estimation data, z1
.
x0 = findstates(mw1,z1,[],'simulation');
Set the Initial Conditions block parameter value of the Nonlinear ARX Model block to State Values
.
Specify initial states as x0
.
Run the simulation, and view the difference between measured output and model output.
bdclose(model)