# As of 2019, which discrete nonlinear, time-invariant systems with memory are considered “easy” to model and identify?

There are several types of discrete nonlinear time-invariant systems with memory ("NTIM") which are considered "easy" to model and identify. Any such system can be represented using a Volterra series, but Volterra kernels become very difficult to model for any more than quadratic or perhaps cubic nonlinearities.

However, for certain types of NTIM systems, there exist clear methods to completely measure and replicate some arbitrary unknown system, typically via measurement of certain test signals.

One good example are those systems for which each Volterra kernel has nonzero coefficients only on the diagonal. These are sometimes called "Farina," "diagonal-Volterra," or "Generalized Hammerstein" systems (Fig. 1). Given some suitable smoothness assumptions, these can be perfectly modeled using dynamic convolution, which is a variant of regular convolution that has a different impulse response for each scaled impulse. As a result, an arbitrary system of this type can be perfectly characterized by simply measuring the impulse response for each scaled impulse. Some info on that in this related answer: Dynamic convolution vs Volterra series. (There are also techniques involving synchronized sine sweeping) Figure 1. A diagonal Volterra series system, which has nonzero Volterra coefficients only on the diagonal of each Volterra kernel, is equivalent (given suitable smoothness assumptions) to a sum of cascades of a memoryless waveshaper (illustrated as a sigmoid) and a linear time-invariant (LTI) system.

I am wondering if there exists any larger set of nonlinear systems that is also considered easy to model. There also exist the Wiener (Fig. 2) and Wiener-Hammerstein systems (Fig. 3) , which are not diagonal-Volterra; are those easy to model? And all of these systems seem to be subsets of "NARMAX" systems; how easy are they to model? Is there any easily modelable type of system which generalizes both the Weiner-Hammerstein and diagonal-Volterra systems? Figure 2. A Wiener system is a cascade of an LTI system and a memoryless waveshaper. Figure 3. A Wiener-Hammerstein system is a cascade of an LTI system, a memoryless waveshaper, and another LTI system.

Questions

1. As of 2019, which nonlinear time-invariant systems with memory are clearly easy to model and profile?
2. Is there any type of nonlinear system, which includes all the Volterra-diagonal ones as a subset, which is easy to model?
3. Is there some type of system which includes both the Volterra-diagonal and the Weiner-Hammerstein systems, and is easy to model?
4. All of these systems are a subset of the "NARMAX" nonlinear models - are those easy to model?
• No smoothness assumptions are needed for Fig. 1 because it can directly represent the mathematical definition of a diagonal Volterra series. – Olli Niemitalo Nov 21 '19 at 7:51

It is very strange phenomena that one object is completely dropped out of attention of researchers. It is Urysohn operator. First of all Urysohn is equivalent to multiple parallel Hammersteins and Urysohn followed by static nonlinearity is a model of any deterministic dynamic object, it maps any given input to any provided output. I obtained Ph.D. in modelling dynamic systems as Urysohn operators in 1991. Since that time I showed how to do that to many people, I published articles, I maintain the site, explaining it, and for this almost 20 years noone started using it, there is no single reference on my articles. People write 10,000 lines to identify Hammerstein, I show how to identify Urysohn by 10 lines of code, write here. Look

for (int i = T - 1; i < N; ++i) {
double predicted = 0.0;
for (int j = 0; j < T; ++j) {
predicted += U[(int)((x[i-j] - xmin) / deltaX), j];
}
double error = (y[i] - predicted) / T * learning_rate;
for (int j = 0; j < T; ++j) {
U[(int)((x[i-j] - xmin) / deltaX), j] += error;
}
}


That is it. It replace 10,000 line Hammerstein identification. It published, it showed, why noone use it I don't know. Google show my articles on "Urysohn identification" at the top. People don't search.

Explanation to code. x[i], y[i] elements of input output arrays. U[k,m] elements of model matrix. T is one size of matrix U, another one is determined by deltaX, discretization interval, learning_rate is similar to LMS.

• Hi Andrew - if a Urysohn model is equivalent to multiple Hammersteins (input -> static nonlinear -> LTI -> output) in parallel, does that mean it is then also equivalent to a Volterra diagonal model? – Mike Battaglia Nov 21 '19 at 7:35
• Urysohn is diagonal Volterra. If to approximate Urysohn by polynomials it will have all powers of individual x1, x2, ,,, but not products with different indexes x1 * x2, x2 * x3. If you want them, you can make parallel Urysohns and add signals like x1*x2, x2*x3 and so on. – Andrew Polar Nov 21 '19 at 22:07

The easiest is Urysohn adaptive filter: http://www.ezcodesample.com/UAF/UAF.html

It can build nonlinear model by few lines of code. The theoretical details can be found here http://www.ezcodesample.com/NAF/index.html

The site has downloadable coding sample. Besides UAF, the other common methods are: Kernel LMS, Voltera LMS, Neural networks, Point cloud. The latter is a dictionary with all inputs and outputs and search method.

• Thanks for the reference - how do Urysohn filters relate to the other models mentioned? Are they as general as Volterra series? – Mike Battaglia Nov 21 '19 at 4:56
• Voltera model exists only on paper. In practice people limit is, so it becomes simple polynomial model. If to compare continuous Urysohn to continuous Voltera, than Urysohn is particular case of Voltera, more precisely it is diagonal Voltera. You can add nondiagonal products to Urysohn. It can be done in many ways. Like another signal, or make two input Urysohn and use shifted signal as second input. I have downloadable code for two input Urysohn with self-test. The complete generic model is two sequential Urysohns. This model is equivalent Voltera. – Andrew Polar Nov 21 '19 at 22:12
• here ezcodesample.com/NAF/cascade.html is two sequential Urysohns, they replace entire Voltera series up to infinity. – Andrew Polar Nov 21 '19 at 22:15
• Thanks @Andrew Polar - I'm trying to see how cascading two Urysohns replace an entire Volterra series? Or even simpler, how cascading an Urysohn with another Urysohn is the same as cascading an Urysohn with a static nonlinearity? Is there an easy way to see that? – Mike Battaglia Nov 21 '19 at 22:59
• This is the most complicated part about Urysohn. I continue my research and working on it, I publish everything I found. It is possible to model any deterministic system with Urysohn followed by nonlinearity, but is very hard to find these two models. Read my article arxiv.org/pdf/1909.13429.pdf there are links to downloadable code. You can try. But I can tell you, there is no sure and simple algorithm like with single Urysohn. Same as with Voltera, the model exist, but you can't find it accurately, because you need million parameters, you can approximate by two terms of series. – Andrew Polar Nov 22 '19 at 6:04