# Dynamic convolution vs Volterra series

I'm trying to understand how a dynamic convolution model relates to something like a Volterra series, and what kinds of effects the latter can capture that the former can't (and vice versa). By dynamic convolution, I mean a system where the impulse response varies with the amplitude of an impulse.

I care only about dynamic convolutions that are well-behaved and "smooth" in some sense, i.e. where the impulse response varies continuously or smoothly as a function of the amplitude.

I have this intuition that a Volterra series with nonzero coefficients only on the diagonals are somehow related to dynamic convolutions. In other words, a series that reduces to the following:

$y = h_0 + h_1 \ast x + h_2 \ast x^2 + h_3 \ast x^3 + ...$

where there are never any terms like $x[t] \cdot x[t-1]$ and so on.

I'm curious if I'm on the right track with that, and in general, whether any dynamic convolution can be transformed into a Volterra series in that form or vice versa.

• Typo, should have been x[t] * x[t-1]. Fixed Sep 22, 2016 at 14:54
• I tried the diagonal Volterra series to model the famously non-linear Commodore 64 SID sound chip filter, but it did not sound right. I think the filter has a capability of bifurcation into different states. Such memory cannot be described by this model. Sep 22, 2016 at 17:48
• You're saying the impulse responses vary discontinuously with amplitude? Sep 22, 2016 at 18:17
• No, more like given the right kind of input, the filter goes to a different mode, and again with the right conditions it will exit that mode. Sep 22, 2016 at 18:25
• So like, if the input is ever a certain state, the amplitude responses all change, or something like that? Sep 22, 2016 at 19:08

A flavor of dynamic convolution (is that a trademark by the way?) has a different impulse response $g_i$ associated with each range of instantaneous input. A number of ranges can be defined by fuzzy membership functions $f_i(x)$ (Fig. 1).

Figure 1. Amplitude ranges that each use a different convolution kernel.

Omitting time indices, the input $x$ and output $y$ are related by:

$$y = \sum_{i=1}^Ng_i\ast \left(f_i\small(x\small)\times x\right).$$

In the notation used, convolution has higher precedence than summation. Reading the signal flow from the above, $f_i(x)\times x$ is a memoryless waveshaper. It is followed by regular convolution with $g_i$, and finally, the outputs of the convolutions are summed. For a practical, limited absolute input amplitude, well-behaved waveshapers, such as the ones needed here, can be approximated to arbitrary precision by polynomials. With the appropriate polynomial series with coefficients $a_{i,j}$:

$$= \sum_{i=1}^N g_i\ast\left(\sum_{j=0}^\infty a_{i,j}\times x^j\right),$$

and reorganizing:

$$= \sum_{j=0}^\infty\left(\sum_{i=1}^N a_{i,j}\times g_i\right) \ast x^j.$$

Recognizing $h_j = \sum_{i=1}^N a_{i,j}\times g_i$ we have your diagonal Volterra series:

$$= \sum_{j=0}^\infty h_j \ast x^j.$$

Unfortunately, polynomials are not very good at approximating functions of compact support, like those needed here (at least before combining the ranges), so for a reasonable level of error a diagonal Volterra series approximation of dynamic convolution may require taking quite large powers of the input signal, which is computationally expensive and can lead to numerical problems.

Dynamic convolution is a model for systems that can be written as follows:

$$S[x] = \sum_k (L_k \circ N_k)[x]$$

where $L_k$ are linear time-invariant systems and $N_k$ are non-linear memoryless time-invariant systems. The order of the factors is important!

Such systems do not necessarily have a Volterra expansion, so you cannot directly compare them. However, while they can describe certain non-smooth systems, they cover a lot less ground in general. A system must be very special to be approximated by the decomposition above. Guitar amps are the only relevant example I can currently think of, and those only up to a certain point.

Edit: Volterra series for analytic $N_k$:

If we can expand the memoryless time invariant subsystem into a polynomial series $$N_k[x] = \sum_l n_{k,l} x^l$$ and both summations are well behaved, then we can write $$S[x]=\sum_{k} L_k\left[ \sum_l n_{k,l} x^l \right]=\sum_{k,l} n_{k,l} L_k[x^k]=\sum_k h_k\star x^k$$ where $h_k$ is the impulse response of the linear time-invariant system $\sum_l n_{k,l} L_k$ and $\star$ is the convolution product. The result is a memoryless Volterra series.

• What does $\circ$ mean? Sep 22, 2016 at 12:11
• Can you give a reference for the use of such systems in guitar amps? Sep 22, 2016 at 12:41
• @OlliNiemitalo: I guess it's just function composition. Sep 22, 2016 at 13:34
• @OlliNiemitalo, yes, it's function composition. It's read "$L_k$ after $N_k$" and means first apply $N_k$, then apply $L_k$. Sep 22, 2016 at 13:44
• @MikeBattaglia, if the Volterra expansion exists and converges, then it indeed follows like you say. Sep 22, 2016 at 21:22

OK, what is a linear system? It is a system that responds proportionally to its input, it produces an output that is proportional (to some factor) to its input. In other words, if you keep turning up the volume, the output will keep increasing.

More importantly, a linear system is a system where mathematics works. Because, $2 \times 1 = 2$ and $2 \times 1000 = 2000$ and $2 \times 1000000 = 2000000$. But, that is not what happens in reality because of finite resources. An amplifier cannot shift around more current than what its power supply allows or what its electronics can handle. Therefore, from a point onwards, you increase the volume but the output reaches a platau. It flatlines. It is exactly in that area, in the flatline, that mathematics breaksdown because there $2 \times 1000 = 2000$ and $2 \times 1000000 = 2000$ and so on.

How does this look like? It looks like a Sigmoid Curve. Imagine the input swinging across the $X$ axis and the output being whatever the sigmoid maps to the $Y$ axis. While the system stays in the linear region, everything works as expected. The "trouble" starts when the response of the system crosses between the linear part and the regions near the knee (the curve close to the negative maximum value) or the shoulder (the curve close to the maximum value).

So, what do we do there? We apply linearisation. That is, we still work with a linear part but within a smaller range of values. It is like saying, if it's between -0.8 and 0.8, work with one slope but while it's between 0.8 and 0.85 work with a different slope and if it's between 0.85 and 0.89 work with a different slope and so on. Does it work? Not always but it's an approximation.

Dynamic convolution does exactly that. The linear part of the system is modelled with some $h$ and that's done. But then, as we progressively enter the non-linear region, we start driving the system with higher amplitude pulses that produce different $h_k$ where $k$ is the $k^{th}$ impulse corresponding to some amplitude.

So, we monitor the input, convolve pulses depending on their amplitude and in the end we some everything together as if there is a set of linear systems operating differently and the output simply swings across their output depending on the amplitude of the incoming pulse.

Right, so, Dynamic Convolution --> Sum convolutions per impulse of different amplitude.

In a voltera series, the approximation is done in a different way. If you notice the order by which the integrals are taken, we have a series of nested convolutions, but, at the end, there appears a $\prod$ of $x$, not $x$ itself! (By the way, $\prod$ stands for product)

Where basically, it's not only that the output depends on past inputs but also the product between them.

OK, ok, so, what can I do with one that I cannot do with the other?

So, remember that sigmoid? That's a non-linearity. But it is static. It doesn't change. There are however systems where, the whole system changes behaviour completely depending on how it is triggered.

Consider the brain. There is something called, the Haemodynamic response. This describes the demand in "blood" that may be associated with some activity. So, you sit there, at rest, your brain demands $X$ amount of "fuel" to tick. Suddenly, you hear a DING! which your brain has to process. You have to decompose the sound, you have to check in your memory if you have heard it before, you have to process where it is coming from, etc. At that point, certain parts of the brain demand "fuel" to carry out all these operations. (It's a bit like a laptop turning its fans on because it clocks up to higher frequencies to respond to task demand).

Now here comes the interesting part. If you go DING! [pause more than 1 sec] DING! [pause more than 1 sec] DING! [...and so on], the haemodynamic response of the brain is the convolution of one impulse per DING! with the haemodynamic response curve. So, at that point, the brain operates like a Linear Time Invariant (LTI) system.

BUT!!! if you go...DING!DING!DING!DING!DING!DING! (pauses now less than 1 sec), the brain demands and sustains "fuel". And in that region, if you convolve your stimulous signal with your haemodynamic response you don't get the signal that describes the haemodynamic response of the region you are looking at.

In that case, Voltera series have been very useful in capturing that "memory" inherent in the system.