Simulate Hammerstein-Wiener model in Simulink software


System Identification Toolbox


The IDNLHW Model block simulates a Hammerstein-Wiener (idnlhw) 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.

Dialog Box


Name of the idnlhw variable in the MATLAB® workspace.

Initial conditions

Specifies the initial states as one of the following:

  • Zero: Specifies zero, which corresponds to a simulation starting from a state of rest.

  • State values: When selected, you must specify a vector of length equal to the number of states in the model in the Specify a 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 steady-state 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 such that the simulated response of the model matches specified output data for the same input, use the findstates.

      For example, for the data set z and model m, you can enter X0, such that:

      X0 = findstates(m,z)


Example 1

In this example, you estimate a Hammerstein-Wiener model from data and compare the model output of the model to the measured output of the system.

  1. Load the sample data.

    load twotankdata

  2. Create a data object from sample data.

    z = iddata(y,u,0.2, ...
               'Name','Two tank system',...

  3. Estimate a Hammerstein-Wiener model.

    mhw1 = nlhw(z,[1 5 3],pwlinear,pwlinear);
  4. Build the following Simulink® model using the IDDATA Source, IDNLHW Model, and Scope blocks.

  5. Double-click the IDDATA Source block and enter the following into the block parameter dialog box:

    • IDDATA Object: z

    Click OK.

  6. Double-click the IDNLHW Model block and enter the following into the block parameter dialog box:

    • Model: mhw1

    • Initial Conditions: Zero

  7. Run the simulation.

    Click the Scope block to view the difference between the measured output and the model output. Use the Autoscale toolbar button to scale the axes.

Example 2

In this example, you reduce the difference between the measured and simulated responses using suitable initial state values. To achieve this, you use the findstates command to estimate an initial state vector for the model from the data.

  1. Estimate initial states from the data z:

    x0 = findstates(mhw1,z,[],'maxiter',50);

  2. Set the Initial Conditions to State Values. Enter x0 in the corresponding field.

  3. Run the simulation.

See Also

Related Commands

Topics in the System Identification Toolbox User's Guide

Introduced in R2008a

Was this topic helpful?