System Identification Toolbox
Estimation of Hammerstein-Wiener Nonlinear Structures
Here we give a very brief “cheat sheet” type explanation of how you estimate Hammerstein–Wiener block non-linear models of the form
where
,
are memoryless mappings that are possibly
non-linear, and which can be represented diagramatically as:

The linear transfer function component is of the form
with
Four classes of memoryless mappings
,
are
supported. If the sub-component of
containing the
description of
is labeled
, then the
memory-less functions supported by the toolbox (which are identical to
the supported
functions) may be described as follows.
Polynomial
Saturation
Deadzone
Piecewise Linear (Hinging Hyperplane)
This non-linearity is described by a set of ‘‘hinge’’ functions of the form
which are zero up to a ‘‘breakpoint’’, and linear thereafter. The
overall piecewise linear function is then the superposition
of (say
of) these hinges:
First Fundamentals
Estimation of models via the command line involves executing the command
z = est(z,m,opt);
Here z specifies the data, m specifies the model structure, and opt determines optional aspects of how the estimate g is obtained. Because it is optional, it is not strictly necessary to use it, so g=est(z,m) is perfectly legal.
Example data
In order to try this command out on various transfer function model structures, we suggest you generate some test data. For example
u = randn(1,1000); % Random white noise input den = poly([0.9,0.4]); % Linear transfer function part num = [1,0.7]; X = dzone(u,-0.2,0.3); % Apply deadzone non-linearity to input Z = filter(num,den,X); % Simulate the linear part y = sat(Z(:),-0.4,0.2,1); % Apply saturation non-linearity to output y = y + 0.01*randn(size(y)); % Add some measurement noise to make it interesting
Specifying the model structure
The linear component is specified as per the case with no
non-linearities. That is, it is done is by specifying the model orders. In the toolbox, these correspond to
m.A,
m.B,
m.C,
m.D,
=m.delay. Unspecified orders are replaced with default values.
The non-linear component is determined according to what the stringe m.in.type and m.out.type are set to as follows
| Nonlinearity | m.in.type |
| Polynomial | m.in.type='poly’ |
| Deadzone | m.in.type='deadzone’ |
| Saturation | m.in.type='saturation’ |
| Piece-wise linear | m.in.type='hinge’ |
How to estimate various common structure types
z.y=y; z.u=u; % Specify the input-output data m.A=2; % Specify 2nd order output error model for linear component m.type='oe'; m.in.type = 'deadzone'; % Specify input non-linearity is deadzone m.out.type = 'saturation'; % Specify ouput non-linearity is saturation g=est(z,m); % Do the estimation details(g); % Present the results
z.y=y; z.u=u; % Specify the input-output data m.A=2; % Specify 2nd order output error model for linear component m.type='oe'; m.in.type = 'deadzone'; % Specify input non-linearity is deadzone m.out.type = 'hinge'; % Specify ouput non-linearity is saturation g=est(z,m); % Do the estimation details(g); % Present the results
z.y=y; z.u=u; % Specify the input-output data m.A=2; % Specify 2nd order output error model for linear component m.type='oe'; m.in.type = 'poly'; % Specify input non-linearity is deadzone m.out.type = 'saturation'; % Specify ouput non-linearity is saturation g=est(z,m); % Do the estimation details(g); % Present the results
z.y=y; z.u=u; % Specify the input-output data m.A=2; % Specify 2nd order output error model for linear component m.type='oe'; m.in.type = 'poly'; % Specify input non-linearity is deadzone m.in.eta = [0,1,0,0]; % Initialise poly input as quadratic m.out.type = 'linear'; % This is the default is not explicitly stated g=est(z,m); % Do the estimation details(g); % Present the results
