## 3.8.4 Convolutions and Correlations

Convolution and correlation are central to many kinds of operations on lists of data. They are used in such areas as signal and image processing, statistical data analysis, approximations to partial differential equations, as well as operations on digit sequences and power series.
In both convolution and correlation the basic idea is to combine a kernel list with successive sublists of a list of data. The convolution of a kernel with a list has the general form , while the correlation has the general form .

Convolution and correlation of lists.

In forming sublists to combine with a kernel, there is always an issue of what to do at the ends of the list of data. By default, ListConvolve and ListCorrelate never form sublists which would "overhang" the ends of the list of data. This means that the output you get is normally shorter than the original list of data.

In practice one often wants to get output that is as long as the original list of data. To do this requires including sublists that overhang one or both ends of the list of data. The additional elements needed to form these sublists must be filled in with some kind of "padding". By default, Mathematica takes copies of the original list to provide the padding, thus effectively treating the list as being cyclic.

Controlling how the ends of the list of data are treated.

In the general case ListCorrelate[kernel, list, , ] is set up so that in the first element of the result, the first element of list appears multiplied by the element at position in kernel, and in the last element of the result, the last element of list appears multiplied by the element at position in kernel. The default case in which no overhang is allowed on either side thus corresponds to ListCorrelate[kernel, list, 1, -1].

For many kinds of data, it is convenient to assume not that the data is cyclic, but rather that it is padded at either end by some fixed element, often 0, or by some sequence of elements.

Controlling the padding for a list of data.

Different choices of kernel allow ListConvolve and ListCorrelate to be used for different kinds of computations.

You can use ListConvolve and ListCorrelate to handle symbolic as well as numerical data.

ListConvolve and ListCorrelate work on data in any number of dimensions.

Other functions for manipulating multidimensional data.