# ListConvolve

ListConvolve[ker,list]

forms the convolution of the kernel ker with list.

ListConvolve[ker,list,k]

forms the cyclic convolution in which the k element of ker is aligned with each element in list.

ListConvolve[ker,list,{kL,kR}]

forms the cyclic convolution whose first element contains list[]ker[[kL]] and whose last element contains list[[-1]]ker[[kR]].

ListConvolve[ker,list,klist,p]

forms the convolution in which list is padded at each end with repetitions of the element p.

ListConvolve[ker,list,klist,{p1,p2,}]

forms the convolution in which list is padded at each end with cyclic repetitions of the pi.

forms a generalized convolution in which g is used in place of Times and h in place of Plus.

forms a convolution using elements at level lev in ker and list.

# Details  • With kernel Kr and list as, ListConvolve[ker,list] computes , where the limits of the sum are such that the kernel never overhangs either end of the list.
• ListConvolve[ker,list] gives a result of length Length[list]-Length[ker]+1.
• ListConvolve[ker,list] allows no overhangs and is equivalent to ListConvolve[ker,list,{-1,1}].
• ListConvolve[ker,list,k] is equivalent to ListConvolve[ker,list,{k,k}].
• The values of kL and kR in ListConvolve[ker,list,{kL,kR}] determine the amount of overhang to allow at each end of list.
• Common settings for {kL,kR} are:
•  {-1,1} no overhangs (default) {-1,-1} maximal overhang at the right‐hand end {1,1} maximal overhang at the left‐hand end {1,-1} maximal overhangs at both beginning and end
• With maximal overhang at one end only, the result from ListConvolve is the same length as list.
• ListConvolve[ker,list,{kL,kR},padlist] effectively lays down repeated copies of padlist, then superimposes one copy of list on them and forms a convolution of the result.
• Common settings for padlist are:
•  p pad with repetitions of a single element {p1,p2,…} pad with cyclic repetitions of a sequence of elements list pad by treating list as cyclic (default) {} do no padding
• ListConvolve works with multidimensional kernels and lists of data.
• ListConvolve[ker,list,{{kL 1,kL 2,},{kR 1,kR 2,}}] forms the cyclic convolution whose {1,1,} element contains ker[[kL 1,kL 2,]]list[[1,1,]], and whose {-1,-1,} element contains ker[[kR 1,kR 2,]]list[[-1,-1,]].
• {kL,kR} is taken to be equivalent to {{kL,kL,},{kR,kR,}}.
• When a function h is specified to use in place of Plus, explicit nested h expressions are generated with a depth equal to the depth of ker.
• ListConvolve works with exact numbers and symbolic data as well as approximate numbers.

# Examples

open allclose all

## Basic Examples(4)

Convolve a kernel {x,y} with a list of data:

Make a cyclic convolution the same length as the original data:

Align element 2 in the kernel with successive elements in the data:

Two-dimensional convolution:

## Scope(9)

### Overhangs and Alignments(4)

"Slide" the kernel along the data, allowing no overhangs:

Maximal overhang at the beginning; none at the end:

Maximal overhang at the end; none at the beginning:

Maximal overhangs at both beginning and end:

Align element 1 of the kernel with the first element of the data:

Align element 2 of the kernel with the first element of the data:

Align element 3 of the kernel with the first element of the data:

Align the last element of the kernel with the first element of the data:

Align the first element of the kernel with both the first and last elements of the data:

Align element 2 of the kernel with the first element of the data:

Align element 2 of the kernel with the last element of the data:

Cyclically use a list of padding elements:

### Higher Dimensions(3)

Allow no overhangs:

Align with the {1,1} elements of the kernel and data:

The result has the same dimensions as the input data:

Give a different overhang in each dimension:

## Generalizations & Extensions(4)

ListConvolve works with sparse arrays:

Use f in place of Times:

Use g in place of Plus:

Use f and g in place of Times and Plus, with empty data padding:

ListConvolve works with TimeSeries:

## Applications(9)

Find a moving average:

Or use the MovingAverage function:

Smooth noisy data:

Find the autocorrelation of a list:

Apply a simple image processing filter:

Multiply polynomials by convolving coefficient lists:

Multiply numbers by convolving digit lists:

Pascal's triangle:

Additive cellular automaton in base 5:

Fast multiplication of highdegree polynomials:

Use ListConvolve with maximal overhangs and zero padding:

## Properties & Relations(7)

Cyclic convolution is equivalent to multiplication in the discrete Fourier transform domain:

Convolve with a single element:

A kernel of the same length as the data, with no overhangs, is like a reversed dot product:

Successive differences:

Align with successive elements:

Varying alignments:  