# Volterra series

The Volterra series is a model for non-linear behavior similar to the Taylor series. It differs from the Taylor series in its ability to capture "memory" effects. The Taylor series can be used for approximating the response of a nonlinear system to a given input if the output of the system depends strictly on the input at that particular time. In the Volterra series, the output of the nonlinear system depends on the input to the system at all other times. This provides the ability to capture the "memory" effect of devices like capacitors and inductors.
It has been applied in the fields of medicine (biomedical engineering) and biology, especially neuroscience. It is also used in electrical engineering to model intermodulation distortion in many devices, including power amplifiers and frequency mixers. Its main advantage lies in its generalizability: it can represent a wide range of systems. Thus, it is sometimes considered a non-parametric model.
In mathematics, a Volterra series denotes a functional expansion of a dynamic, nonlinear, time-invariant functional. The Volterra series are frequently used in system identification. The Volterra series, which is used to prove the Volterra theorem, is an infinite sum of multidimensional convolutional integrals.

## History

The Volterra series is a modernized version of the theory of analytic functionals from the Italian mathematician Vito Volterra, in his work dating from 1887. Norbert Wiener became interested in this theory in the 1920s due to his contact with Volterra's student Paul Lévy. Wiener applied his theory of Brownian motion for the integration of Volterra analytic functionals. The use of the Volterra series for system analysis originated from a restricted 1942 wartime report of Wiener's, who was then a professor of mathematics at MIT. He used the series to make an approximate analysis of the effect of radar noise in a nonlinear receiver circuit. The report became public after the war. As a general method of analysis of nonlinear systems, the Volterra series came into use after about 1957 as the result of a series of reports, at first privately circulated, from MIT and elsewhere. The name itself, Volterra series, came into use a few years later.

## Mathematical theory

The theory of the Volterra series can be viewed from two different perspectives:
* An operator mapping between two function spaces (real or complex)
* A real or complex functional mapping from a function space into real or complex numbers
The latter functional mapping perspective is more frequently used due to the assumed time-invariance of the system.

### Continuous time

A continuous time-invariant system with x(t) as input and y(t) as output can be expanded in the Volterra series as
    $y(t)=h_{0}+\sum _{n=1}^{N}\int _{a}^{b}\cdots \int _{a}^{b}h_{n}(\tau _{1},\dots ,\tau _{n})\prod _{j=1}^{n}x(t-\tau _{j})\,d\tau _{j}.$
Here the constant term $h_{0}$ on the right side is usually taken to be zero by suitable choice of output level $y$. The function $h_{n}(\tau _{1},\dots ,\tau _{n})$ is called the n-th-order Volterra kernel. It can be regarded as a higher-order impulse response of the system. For the representation to be unique, the kernels must be symmetrical in the n variables $\tau$. If it is not symmetrical, it can be replaced by a symmetrized kernel, which is the average over the n! permutations of these n variables $\tau$.
If N is finite, the series is said to be truncated. If a, b, and N are finite, the series is called doubly finite.
Sometimes the n-th-order term is divided by n!, a convention which is convenient when taking the output of one Volterra system as the input of another ("cascading").
The causality condition: Since in any physically realizable system the output can only depend on previous values of the input, the kernels $h_{n}(t_{1},t_{2},\ldots ,t_{n})$ will be zero if any of the variables $t_{1},t_{2},\ldots ,t_{n}$ are negative. The integrals may then be written over the half range from zero to infinity. So if the operator is causal, $a\geq 0$.
Fréchet's approximation theorem: The use of the Volterra series to represent a time-invariant functional relation is often justified by appealing to a theorem due to Fréchet. This theorem states that a time-invariant functional relation (satisfying certain very general conditions) can be approximated uniformly and to an arbitrary degree of precision by a sufficiently high finite-order Volterra series. Among other conditions, the set of admissible input functions $x(t)$ for which the approximation will hold is required to be compact. It is usually taken to be an equicontinuous, uniformly bounded set of functions, which is compact by the Arzelà–Ascoli theorem. In many physical situations, this assumption about the input set is a reasonable one. The theorem, however, gives no indication as to how many terms are needed for a good approximation, which is an essential question in applications.

### Discrete time

The discrete-time case is similar to the continuous-time case, except that the integrals are replaced by summations:
$y(n)=h_{0}+\sum _{p=1}^{P}\sum _{\tau _{1}=a}^{b}\cdots \sum _{\tau _{p}=a}^{b}h_{p}(\tau _{1},\dots ,\tau _{p})\prod _{j=1}^{p}x(n-\tau _{j}),$ where $P\in \{1,2,\dots \}\cup \{\infty \}.$ Each function $h_{p}$ is called a discrete-time Volterra kernels. If P is finite, the series operator is said to be truncated. If a, b and P are finite, the series operator is called a doubly finite Volterra series. If $a\geq 0$, the operator is said to be causal.
We can always consider, without loss of the generality, the kernel $h_{p}(\tau _{1},\dots ,\tau _{p})$ as symmetrical. In fact, for the commutativity of the multiplication it is always possible to symmetrize it by forming a new kernel taken as the average of the kernels for all permutations of the variables $\tau _{1},\dots ,\tau _{p}$.
For a causal system with symmetrical kernels we can rewrite the n-th term approximately in triangular form
    $\sum _{\tau _{1}=0}^{M}\sum _{\tau _{2}=\tau _{1}}^{M}\cdots \sum _{\tau _{p}=\tau _{p-1}}^{M}h_{p}(\tau _{1},\dots ,\tau _{p})\prod _{j=1}^{p}x(n-\tau _{j}).$

## Methods to estimate the kernel coefficients

Estimating the Volterra coefficients individually is complicated, since the basis functionals of the Volterra series are correlated. This leads to the problem of simultaneously solving a set of integral equations for the coefficients. Hence, estimation of Volterra coefficients is generally performed by estimating the coefficients of an orthogonalized series, e.g. the Wiener series, and then recomputing the coefficients of the original Volterra series. The Volterra series main appeal over the orthogonalized series lies in its intuitive, canonical structure, i.e. all interactions of the input have one fixed degree. The orthogonalized basis functionals will generally be quite complicated.
An important aspect, with respect to which the following methods differ, is whether the orthogonalization of the basis functionals is to be performed over the idealized specification of the input signal (e.g. gaussian, white noise) or over the actual realization of the input (i.e. the pseudo-random, bounded, almost-white version of gaussian white noise, or any other stimulus). The latter methods, despite their lack of mathematical elegance, have been shown to be more flexible (as arbitrary inputs can be easily accommodated) and precise (due to the effect that the idealized version of the input signal is not always realizable).

### Crosscorrelation method

This method, developed by Lee and Schetzen, orthogonalizes with respect to the actual mathematical description of the signal, i.e. the projection onto the new basis functionals is based on the knowledge of the moments of the random signal.
We can write the Volterra series in terms of homogeneous operators, as
    $y(n)=h_{0}+\sum _{p=1}^{P}H_{p}x(n),$
where
    $H_{p}x(n)=\sum _{\tau _{1}=a}^{b}\cdots \sum _{\tau _{p}=a}^{b}h_{p}(\tau _{1},\dots ,\tau _{p})\prod _{j=1}^{p}x(n-\tau _{j}).$
To allow identification orthogonalization, Volterra series must be rearranged in terms of orthogonal non-homogeneous G operators (Wiener series):
    $y(n)=\sum _{p}H_{p}x(n)\equiv \sum _{p}G_{p}x(n).$
The G operators can be defined by the following:
    $E\{H_{i}x(n)G_{j}x(n)\}=0;\quad i<j,$
    $E\{G_{i}x(n)G_{j}x(n)\}=0;\quad i\neq j,$
whenever $H_{i}x(n)$ is arbitrary homogeneous Volterra, x(n) is some stationary white noise (SWN) with zero mean and variance A.
Recalling that every Volterra functional is orthogonal to all Wiener functional of greater order, and considering the following Volterra functional:
    $H_{\overline {p}}^{*}x(n)=\prod _{j=1}^{\overline {p}}x(n-\tau _{j}),$
we can write
    $E\left\{y(n)H_{\overline {p}}^{*}x(n)\right\}=E\left\{\sum _{p=0}^{\infty }G_{p}x(n)H_{\overline {p}}^{*}x(n)\right\}.$
If x is SWN, $\tau _{1}\neq \tau _{2}\neq \ldots \neq \tau _{P}$ and by letting $A=\sigma _{x}^{2}$, we have
    $E\left\{y(n)\prod _{j=1}^{\overline {p}}x(n-\tau _{j})\right\}=E\left\{G_{\overline {p}}x(n)\prod _{j=1}^{\overline {p}}x(n-\tau _{j})\right\}={\overline {p}}!A^{\overline {p}}k_{\overline {p}}(\tau _{1},\dots ,\tau _{\overline {p}}).$
So if we exclude the diagonal elements, ${\tau _{i}\neq \tau _{j},\ \forall i,j}$, it is
    $k_{p}(\tau _{1},\dots ,\tau _{p})={\frac {E\left\{y(n)x(n-\tau _{1})\cdots x(n-\tau _{p})\right\}}{p!A^{p}}}.$
If we want to consider the diagonal elements, the solution proposed by Lee and Schetzen is
    $k_{p}(\tau _{1},\dots ,\tau _{p})={\frac {E\left\{\left(y(n)-\sum \limits _{m=0}^{p-1}G_{m}x(n)\right)x(n-\tau _{1})\cdots x(n-\tau _{p})\right\}}{p!A^{p}}}.$
The main drawback of this technique is that the estimation errors, made on all elements of lower-order kernels, will affect each diagonal element of order p by means of the summation $\sum \limits _{m=0}^{p-1}G_{m}x(n)$, conceived as the solution for the estimation of the diagonal elements themselves. Efficient formulas to avoid this drawback and references for diagonal kernel element estimation exist
Once the Wiener kernels were identified, Volterra kernels can be obtained by using Wiener-to-Volterra formulas, in the following reported for a fifth-order Volterra series:
    $h_{5}=k_{5},$
    $h_{4}=k_{4},$
    $h_{3}=k_{3}-10A\sum _{\tau _{4}}k_{5}(\tau _{1},\tau _{2},\tau _{3},\tau _{4},\tau _{4}),$
    $h_{2}=k_{2}-6A\sum _{\tau _{3}}k_{4}(\tau _{1},\tau _{2},\tau _{3},\tau _{3}),$
    $h_{1}=k_{1}-3A\sum _{\tau _{2}}k_{3}(\tau _{1},\tau _{2},\tau _{2})+15A^{2}\sum _{\tau 2}\sum _{\tau _{3}}k_{5}(\tau _{1},\tau _{2},\tau _{2},\tau _{3},\tau _{3}),$
    $h_{0}=k_{0}-A\sum _{\tau _{1}}k_{2}(\tau _{1},\tau _{1})+3A^{2}\sum _{\tau _{1}}\sum _{\tau _{2}}k_{4}(\tau _{1},\tau _{1},\tau _{2},\tau _{2}).$

### Multiple-variance method

In the traditional orthogonal algorithm, using inputs with high $\sigma _{x}$ has the advantage of stimulating high-order nonlinearity, so as to achieve more accurate high-order kernel identification. As a drawback, the use of high $\sigma _{x}$ values causes high identification error in lower-order kernels, mainly due to nonideality of the input and truncation errors.
On the contrary, the use of lower $\sigma _{x}$ in the identification process can lead to a better estimation of lower-order kernel, but can be insufficient to stimulate high-order nonlinearity.
This phenomenon, which can be called locality of truncated Volterra series, can be revealed by calculating the output error of a series as a function of different variances of input. This test can be repeated with series identified with different input variances, obtaining different curves, each with a minimum in correspondence of the variance used in the identification.
To overcome this limitation, a low $\sigma _{x}$ value should be used for the lower-order kernel and gradually increased for higher-order kernels. This is not a theoretical problem in Wiener kernel identification, since the Wiener functional are orthogonal to each other, but an appropriate normalization is needed in Wiener-to-Volterra conversion formulas for taking into account the use of different variances. Furthermore, new Wiener to Volterra conversion formulas are needed.
The traditional Wiener kernel identification should be changed as follows:
    $k_{0}^{(0)}=E\{y^{(0)}(n)\},$
    $k_{1}^{(1)}(\tau _{1})={\frac {1}{A_{1}}}E\left\{y^{(1)}(n)x^{(1)}(n-\tau _{1})\right\},$
    $k_{2}^{(2)}(\tau _{1},\tau _{2})={\frac {1}{2!A_{2}^{2}}}\left\{E\left\{y^{(2)}(n)\prod _{i=1}^{2}x^{(2)}(n-\tau _{i})\right\}-A_{2}k_{0}^{(2)}\delta _{\tau _{1}\tau _{2}}\right\},$
    $k_{3}^{(3)}(\tau _{1},\tau _{2},\tau _{3})={\frac {1}{3!A_{3}^{3}}}\left\{E\left\{y^{(3)}(n)\prod _{i=1}^{3}x^{(3)}(n-\tau _{i})\right\}-A_{3}^{2}\left[k_{1}^{(3)}(\tau _{1})\delta _{\tau _{2}\tau _{3}}+k_{1}^{(3)}(\tau _{2})\delta _{\tau _{1}\tau _{3}}+k_{1}^{(3)}(\tau _{3})\delta _{\tau _{1}\tau _{2}}\right]\right\}.$
In the above formulas the impulse functions are introduced for the identification of diagonal kernel points. If the Wiener kernels are extracted with the new formulas, the following Wiener-to-Volterra formulas (explicited up the fifth order) are needed:
    $h_{5}=k_{5}^{(5)},$
    $h_{4}=k_{4}^{(4)},$
    $h_{3}=k_{3}^{(3)}-10A_{3}\sum _{\tau _{4}}k_{5}^{(5)}(\tau _{1},\tau _{2},\tau _{3},\tau _{4},\tau _{4}),$
    $h_{2}=k_{2}^{(2)}-6A_{2}\sum _{\tau _{3}}k_{4}^{(4)}(\tau _{1},\tau _{2},\tau _{3},\tau _{3}),$
    $h_{1}=k_{1}^{(1)}-3A_{1}\sum _{\tau _{2}}k_{3}^{(3)}(\tau _{1},\tau _{2},\tau _{2})+15A_{1}^{2}\sum _{\tau 2}\sum _{\tau _{3}}k_{5}^{(5)}(\tau _{1},\tau _{2},\tau _{2},\tau _{3},\tau _{3}),$
    $h_{0}=k_{0}^{(0)}-A_{0}\sum _{\tau _{1}}k_{2}^{(2)}(\tau _{1},\tau _{1})+3A_{0}^{2}\sum _{\tau _{1}}\sum _{\tau _{2}}k_{4}^{(4)}(\tau _{1},\tau _{1},\tau _{2},\tau _{2}).$
As can be seen, the drawback with respect to the previous formula is that for the identification of the n-th-order kernel, all lower kernels must be identified again with the higher variance. However, an outstanding improvement in the output MSE will be obtained if the Wiener and Volterra kernels are obtained with the new formulas.

### Feedforward network

This method was developed by Wray and Green (1994) and utilizes the fact that a simple 2-fully connected layer neural network (i.e., a multilayer perceptron) is computationally equivalent to the Volterra series and therefore contains the kernels hidden in its architecture. After such a network has been trained to successfully predict the output based on the current state and memory of the system, the kernels can then be computed from the weights and biases of that network.
The general notation for the n-th-order Volterra kernel is given by
    $h_{n}(\tau _{1},\dots ,\tau _{n})=\sum _{i=1}^{M}(c_{i}a_{ni}\omega _{\tau _{1}i}\dots \omega _{\tau _{n}i}),$
where $n$ is the order, $c_{i}$ the weights to the linear output node, $a_{ji}$ the coefficients of the polynomial expansion of the output function of the hidden nodes, and $\omega _{ji}$ are the weights from the input layer to the non-linear hidden layer. It is important to note that this method allows kernel extraction up until the number of input delays in the architecture of the network. Furthermore, it is vital to carefully construct the size of the network input layer so that it represents the effective memory of the system.

### Exact orthogonal algorithm

This method and its more efficient version (fast orthogonal algorithm) were invented by Korenberg. In this method the orthogonalization is performed empirically over the actual input. It has been shown to perform more precisely than the crosscorrelation method. Another advantage is that arbitrary inputs can be used for the orthogonalization and that fewer data points suffice to reach a desired level of accuracy. Also, estimation can be performed incrementally until some criterion is fulfilled.

### Linear regression

Linear regression is a standard tool from linear analysis. Hence, one of its main advantages is the widespread existence of standard tools for solving linear regressions efficiently. It has some educational value, since it highlights the basic property of Volterra series: linear combination of non-linear basis-functionals. For estimation, the order of the original should be known, since the Volterra basis functionals are not orthogonal, and thus estimation cannot be performed incrementally.

### Kernel method

This method was invented by Franz and Schölkopf and is based on statistical learning theory. Consequently, this approach is also based on minimizing the empirical error (often called empirical risk minimization). Franz and Schölkopf proposed that the kernel method could essentially replace the Volterra series representation, although noting that the latter is more intuitive.

### Differential sampling

This method was developed by van Hemmen and coworkers and utilizes Dirac delta functions to sample the Volterra coefficients.