## CONVOL

The CONVOL function convolves an array with a kernel, and returns the result. Convolution is a general process that can be used for various types of smoothing, signal processing, shifting, differentiation, edge detection, etc. The CENTER keyword controls the alignment of the kernel with the array and the ordering of the kernel elements. If CENTER is explicitly set to 0, convolution is performed in the strict mathematical sense, otherwise the kernel is centered over each data point.

Assume R = CONVOL(A, K, S), where A is an n -element vector, K is an m -element vector ( m < n ), and S is the scale factor. If the CENTER keyword is omitted or set to 1:

where the value m /2 is determined by integer division . This means that the result of the division is the largest integer value less than or equal to the fractional number.

If CENTER is explicitly set to 0:

In the two-dimensional, zero CENTER case where A is an m by n -element array, and K is the l by l element kernel; the result R is an m by n -element array:

The centered case is similar, except the t-i and u-j subscripts are replaced by t+i-l /2 and u+j-l /2.

### Calling Sequence

Result = CONVOL( Array, Kernel [, Scale_Factor] )

### Arguments

#### Array

An array of any basic type except string. The result of CONVOL has the same type and dimensions as Array .

If the Array parameter is of byte type, the result is clipped to the range of 0 to 255. Negative results are set to 0, and values greater than 255 are set to 255.

#### Kernel

An array of any type except string. If the type of Kernel is not the same as Array , a copy of Kernel is made and converted to the appropriate type before use. The size of the kernel dimensions must be smaller than those of Array .

#### Scale_Factor

A scale factor, for use with integer and byte type data only, that is divided into each resulting value. This argument allows the use of fractional kernel values and avoids overflow with byte arguments. If omitted, a scale factor of 1 is used.

### Keywords

#### CENTER

Set or omit this keyword to center the kernel over each array point. If CENTER is explicitly set to zero, the CONVOL function works in the conventional mathematical sense. In many signal and image processing applications, it is useful to center a symmetric kernel over the data, thereby aligning the result with the original array.

Note that for the kernel to be centered, it must be symmetric about the point K(FLOOR( m /2), where m is the number of elements in the kernel.

#### EDGE_WRAP

Set this keyword to make CONVOL compute the values of elements at the edge of Array by "wrapping" the subscripts of Array at the edge. For example, if CENTER is set to zero:

where na is the number of elements in Array .

If neither EDGE_WRAP nor EDGE_TRUNCATE is set, CONVOL sets the values of elements at the edges of Array to zero.

#### EDGE_TRUNCATE

Set this keyword to make CONVOL compute the values of elements at the edge of Array by repeating the subscripts of Array at the edge. For example, if CENTER is set to zero:

where na is the number of elements in Array .

If neither EDGE_WRAP nor EDGE_TRUNCATE is set, CONVOL sets the values of elements at the edges of Array to zero.

### Example

Convolve a vector of random noise and a one-dimensional triangular kernel and plot the result. Create a simple vector as the original dataset and plot it by entering:

A = RANDOMN(SEED, 100) & PLOT, A

Create a simple kernel by entering:

K = [1, 2, 3, 2, 1]

Convolve the two and overplot the result by entering:

OPLOT, CONVOL(A, K, TOTAL(K))