Main Content

Validating Hammerstein-Wiener Models

After estimating a Hammerstein-Wiener model for your system, you can validate whether it reproduces the system behavior within acceptable bounds. It is recommended that you use separate data sets for estimating and validating your model. If the validation indicates low confidence in the estimation, then see Troubleshooting Model Estimation for next steps. For general information about validating models, see Model Validation.

Compare Simulated Model Output to Measured Output

Plot simulated model output and measured output data for comparison, and compute best fit values. At the command line, use compare command. You can also use sim to simulate model response. Note that for Hammerstein-Wiener models, the simulated and predicted model output are equivalent because these models have a trivial noise-component, that is the additive disturbance in these models is white noise. For information about plotting simulated output in the app, see Simulation and Prediction in the App.

Check Iterative Search Termination Conditions

The estimation report that is generated after model estimation lists the reason the software terminated the estimation. For example, suppose that the report indicates that the estimation reached the maximum number of iterations. You can try repeating the estimation by specifying a larger value for the maximum number of iterations. For information about how to configure the maximum number of iterations and other estimation options, see Specify Estimation Algorithm.

To view the estimation report in the app, after model estimation is complete, view the Estimation Report area of the Estimate tab. At the command line, use M.Report.Termination to display the estimation termination conditions, where M is the estimated Hammerstein-Wiener model. For example, check the M.Report.Termination.WhyStop field that describes why the estimation was stopped.

For more information about the estimation report, see Estimation Report.

Check the Final Prediction Error and Loss Function Values

You can compare the performance of several estimated models by comparing the final prediction error and loss function values that are shown in the estimation report.

To view these values for an estimated model M at the command line, use the M.Report.Fit.FPE (final prediction error) and M.Report.Fit.LossFcn (value of loss function at estimation termination) properties. Smaller values typically indicate better performance. However, M.Report.Fit.FPE values can be unreliable when the model contains many parameters relative to the estimation data size. Use these indicators with other validation techniques to draw reliable conclusions.

Perform Residual Analysis

Residuals are differences between the model output and the measured output. Thus, residuals represent the portion of the output not explained by the model. You can analyze the residuals using techniques such as the whiteness test and the independence test. For more information about these tests, see What Is Residual Analysis?

At the command line, use resid to compute, plot, and analyze the residuals. To plot residuals in the app, see How to Plot Residuals in the App.

Examine Hammerstein-Wiener Plots

A Hammerstein-Wiener plot displays the static input and output nonlinearities and linear responses of a Hammerstein-Wiener model.

Examining a Hammerstein-Wiener plot can help you determine whether you have selected a complicated nonlinearity for modeling your system. For example, suppose you use a piecewise-linear input nonlinearity to estimate your model, but the plot indicates saturation behavior. You can estimate a new model using the simpler saturation nonlinearity instead. For multivariable systems, you can use the Hammerstein-Wiener plot to determine whether to exclude nonlinearities for specific channels. If the nonlinearity for a specific input or output channel does not exhibit strong nonlinear behavior, you can estimate a new model after setting the nonlinearity at that channel to unit gain.

You can generate these plots in the System Identification app and at the command line. In the plot window, you can view the nonlinearities and linear responses by clicking one of the three blocks that represent the model:

  • uNL (input nonlinearity)— Click this block to view the static nonlinearity at the input to the Linear Block. The plot displays evaluate(M.InputNonlinearity,u) where M is the Hammerstein-Wiener model, and u is the input to the input nonlinearity block. For information about the blocks, see Structure of Hammerstein-Wiener Models.

  • Linear Block — Click this block to view the Step, impulse, Bode, and pole-zero response plots of the embedded linear model (M.LinearModel). By default, a step plot of the linear model is displayed.

  • yNL (output nonlinearity) — Click this block to view the static nonlinearity at the output of the Linear Block. The plot displays evaluate(M.OutputNonlinearity,x), where x is the output of the linear block.

Creating a Hammerstein-Wiener Plot

To create a Hammerstein-Wiener plot in the System Identification app, after you have estimated the model, select the Hamm-Wiener check box in the Model Views area. For general information about creating and working with plots in the app, see Working with Plots.

At the command line, after you have estimated a Hammerstein-Wiener model M, you can access the objects representing the input and output nonlinearity estimators using M.InputNonlinearity and M.OutputNonlinearity.

Use nlhwPlot to view the shape of the nonlinearities and the properties of the linear block.


You can use additional plot arguments to specify the following information:

  • Include several Hammerstein-Wiener models on the plot.

  • Configure how to evaluate the nonlinearity at each input and output channel.

  • Specify the time or frequency values for computing transient and frequency response plots of the linear block.

Configuring a Hammerstein-Wiener Plot

To configure the plots of the nonlinear blocks:

  1. In the Hammerstein-Wiener Model Plot window, select the nonlinear block you want to plot.

    • To plot the response of the input nonlinearity function, click the uNL block.

    • To plot the response of the output nonlinearity function, click the yNL block.

    The selected block is highlighted green.


    The input to the output nonlinearity block yNL is the output from the Linear Block and not the measured input data.

  2. If your model contains multiple inputs or outputs, select the channel in the Select nonlinearity at channel list. Selecting the channel updates the plot and displays the nonlinearity values versus the corresponding input to this nonlinear block.

  3. Change the range of the horizontal axis of the plot. This feature is available only for plots generated in the System Identification app.

    In the plot window, select Options > Set input range to open the Range for Input to Nonlinearity dialog box. This feature is only available in the System Identification app.

    Enter the range using the format [MinValue MaxValue]. Click Apply and then Close to update the plot.

To configure the linear block response plot:

  1. In the Hammerstein-Wiener Model Plot window, click the Linear Block.

  2. Select the input-output data pair for which you want to view the response in the Select I/O pair list.

  3. Select the type of linear response plot. In the Choose plot type list, choose from the following options:

    • Step

    • Impulse

    • Bode

    • Pole-Zero Map

  4. Set the time span for a step or impulse response plot. This feature is available only for plots generated in the System Identification app.

    In the plot window, select Options > Time span. In the Time Range dialog box, specify the time span in the units of time you specified for the model. For a time span T, the resulting response is plotted from -T/4 to T. Click Apply and then Close.

  5. Set the frequency range for a Bode plot. This feature is available only for plots generated in the app.

    The default frequency vector is 128 linearly distributed values, greater than zero and less than or equal to the Nyquist frequency. To change the range, select Options > Frequency range. In the Frequency Range dialog box, specify a new frequency vector in units of rad per model time units using one of following methods:

    • MATLAB® expression, such as (1:100)*pi/100 or logspace(-3,-1,200). The expression cannot contain variables in the MATLAB workspace.

    • Row vector of values, such as (1:0.1:100).

    Click Apply and then Close.

Related Topics