*Figure 11. Fourier convolution is used here to
determine how the atomic line spectrum in Window 1 (top left)
will appear when scanned with a spectrometer whose slit function
(spectral resolution) is described by the Gaussian function in
Window 2 (top right). The Gaussian function has already been
rotated so that its maximum falls at x=0. The resulting
convoluted spectrum (bottom center) shows that the two lines
near x=110 and 120 will not be resolved but the line at x=40
will be partly resolved. *

In practice, the calculation is usually performed by
point-by-point multiplication of the two signals in the Fourier
domain. First, the Fourier transform of each signal is obtained.
Then the two Fourier transforms are multiplied point-by-point by
the rules for complex multiplication and the result is then
inverse Fourier transformed. Fourier transforms are usually
expressed in terms of complex numbers, with real and imaginary
parts; if the Fourier transform of the first signal is a + ib, and the Fourier transform of the second
signal is c + id, then the product of the
two Fourier transforms is (a
+ ib)(c + id) = (ac
- bd) + i(bc + ad).
Although this seems to be a round-about method, it turns out
to be faster then the shift-and-multiply algorithm when the number
of points in the signal is large. Convolution can be used as a
powerful and general algorithm for smoothing and differentiation.

Fourier convolution can also be used as a very general algorithm
for the smoothing and differentiation of digital signals, by
convoluting the signal with a (usually) small set of numbers
representing the convolution vector. Smoothing is performed by
convolution with sets of positive numbers, e.g. [1 1 1] for a
3-point boxcar. Convolution with [–1 1] computes a first
derivative; [1 -2 1] computes a second derivative. Successive
convolutions by Conv1 and then Conv2 is equivalent to one
convolution with the convolution of Conv1 and Conv2. First
differentiation with smoothing is done by using a convolution
vector in which the first half of the coefficients are negative
and the second half are positive (e.g.[-1 -2 0 2 1]).

**Simple whole-number convolution vectors:**

**Smoothing**

`[1 1 1] = 3 point boxcar (sliding
average) smooth`

`[1 1 1 1] = 4 point boxcar (sliding
average) smooth`

`[1 2 1] = 3
point triangular smooth`

`[1 2 3 2 1] = 5 point
triangular smooth
[1 4 6 4 1] = 5 point Gaussian
smooth
[1 4 8 10 8 4 1] = 7 point Gaussian
smooth
[1 4 9 14 17 14 9 4 1] = `

` `**Differentiation:**

`[-1 1]
First derivative`

`[1 -2 1] Second
derivative`

`[1 -2 1 -1] Third derivative`

`[1 -4 6 -4 1] Fourth derivative`

**Results of successive convolution by two vectors Conv1 and
Conv2:**

**Conv1
Conv2 **** **

`[1 1 1] x [1 1
1] = [1 2 3 2 1] Triangular
smooth `

`[1 2 1] x [1 2 1] =
[1 4 6 4 1] Pseudo-Gaussian
smooth `

`[-1 1] x [-1
1] = [1 -2 1]
2nd derivative
`

`[-1 1] x [1 -2 1] =
[1 -3 3 -1] 3rd
derivative
`

`[-1 1] x [1 1
1] = [1 0 0 -1) 1st derivative
with gap-segment
`

`[-1 1] x [1 2
1] = [1 1 -1 -1) Smoothed 1st
derivative
`

`[1 1 -1 -1] x [1 2 1] = [1 3 2 -2 -3
-1] 1st derivative with more
smoothing `

`[1 -2 1] x [1 2 1] =
[1 0 -2 0 1] 2nd derivative with
gap-segment `

SPECTRUM, the freeware signal-processing application that accompanies this tutorial, includes convolution and auto-correlation (self-convolution) functions.

Spreadsheets can be used to perform "shift-and-multiply" convolution for small data sets (for example, MultipleConvolution.xls or MultipleConvolution.xlsx for Excel and MultipleConvolutionOO.ods for Calc), but for larger data sets the performance is much slower that Fourier convolution (which is much easier done in Matlab or Octave than in spreadsheets).

Matlab and Octave have a built-in function for convolution of two vectors: conv. This function can be used to create very general type of filters and smoothing functions, such as sliding-average and triangular smooths. For example,

ysmoothed=conv(y,[1 1 1 1 1],'same')./5;

smooths the vector y with a 5-point unweighted sliding average (boxcar) smooth, and

ysmoothed=conv(y,[1 2 3 2 1],'same')./9;

smooths the vector y with a 5-point triangular smooth. The optional argument 'same' returns the central part of the convolution that is the same size as y. The keyword 'same' returns the central part of the convolution that is the same size as y.

Differentiation is carried out with smoothing by using a convolution vector in which the first half of the coefficients are negative and the second half are positive (e.g.[-1 0 1],[-2 -1 0 1 2], or [-3 -2 -1 0 1 2 3]) to compute a first derivative with increasing amounts of smoothing.

The next example creates an exponential trailing transfer function (c), which has an effect similar to a simple RC low-pass filter, and applies it to y.

c=exp(-(1:length(y))./30);

yc=conv(y,c,'full')./sum(c);

In each of the above three examples, the result of the convolution is divided by the sum of the convolution transfer function, in order to insure that the convolution has a net gain of 1.000 and thus does not effect the area under the curve of the signal.

This page is maintained by Prof. Tom O'Haver , Department of Chemistry and Biochemistry, The University of Maryland at College Park. Comments, suggestions and questions should be directed to Prof. O'Haver at toh@umd.edu.

Unique visits since May 17, 2008: