Convolution of an N-dimensional surface with a vector in the matrix

I am trying to "convolution" an arbitrary N-dimensional surface with a vector. In particular, I am trying to get the output of the Nth order Volterra kernel (see http://www.scholarpedia.org/article/Volterra_and_Wiener_series , eq.1)

Thus, for a one-dimensional core, the output is a simple sliding convolution of a first-order kernel with a past input era. It essentially multiplies / weighs each value in the past era of input with a coefficient.

The second-order core output is a “convolution” of a 2d matrix with a signal. This core weighs the product of each pair of points in the past with a coefficient.

The third-order core, a three-dimensional matrix, weighs each triplet of points in the past era of memory.

In addition, I do not know the size / order of the kernel in front of the hand. This is an input parameter.

I know that maybe I can do it very hard and slowly by going through a few cycles to points, but I was wondering if there is a way to do this very quickly and elegantly in Matlab?

thanks

+7
multidimensional-array matlab signal-processing convolution
source share
1 answer

you can check the size of a variable using ndims(array) and perform convolutions in the required sizes: conv() or conv2() for one-dimensional and two-dimensional, respectively. If you need to convolution in a higher dimension, you can change your variable using the reshape , and then use the previous commands.

-one
source share

All Articles