 SignalProcessing - Maple Programming Help

Home : Support : Online Help : Science and Engineering : Signal Processing : Convolution and Correlation Computations : SignalProcessing/Convolution

SignalProcessing

 Convolution
 compute the finite linear convolution of two arrays of samples

 Calling Sequence Convolution(A, B)

Parameters

 A, B - Arrays of real or complex numeric sample values

Options

 • container : Array, predefined Array for holding result
 • algorithm : symbol, algorithm to use for computation

Description

 • The Convolution(A, B) command computes the convolution of the Arrays A and B of length $M$ and $N$ respectively, storing the result in a Array C of length $M+N-1$ and having datatype float or complex, which is then returned.
 • The convolution is defined by the formula

${C}_{k}={\sum }_{i=1}^{k}{A}_{i}{B}_{k-i+1}$

 for each $k$ from $1$ to $M+N-1$, with ${A}_{j}=0$ for $M and ${B}_{j}=0$ for $N.
 • Before the code performing the computation runs, A and B are converted to datatype float (if the values are all real-valued) or complex (if all the values are complex-valued, but not all real-valued) if they do not have that datatype already. For this reason, it is most efficient if A and B have one of these datatypes beforehand.
 • If either A or B is an rtable that is not a 1-D Array, it is accepted by the command and converted to an Array. Should this not be possible, an error will be thrown.
 • If the container=C option is provided, then the results are put into C and C is returned. With this option, no additional memory is allocated to store the result. The container must be an Array of size $M+N-1$ having datatype float or complex.
 • The algorithm=name option can be used to specify the algorithm used for computing the convolution. Supported algorithms:
 – auto - automatically choose the fastest algorithm based on input.
 – direct - use direct convolution formula for computation. This is the default.
 – fft - use an algorithm based on the Fast Fourier Transform (FFT). This is a much faster algorithm than the direct formula for large samples, but numerical roundoff can cause significant numerical artifacts, especially when the result has a large dynamic range.

 • The SignalProcessing[Convolution] command is thread-safe as of Maple 17.

Examples

 > with( SignalProcessing ):

Example 1

 > Convolution( Array( [ 5, 7 ] ), Array( [ -2, 6, 10 ] ) );
 $\left[\begin{array}{cccc}{-10.}& {16.}& {92.}& {70.}\end{array}\right]$ (1)

Example 2

 > a := Array( [ 1, 2, 3 ], 'datatype' = 'float'[ 8 ] );
 ${a}{≔}\left[\begin{array}{ccc}{1.}& {2.}& {3.}\end{array}\right]$ (2)
 > b := Array( [ 1, -1, 1, -1 ], 'datatype' = 'float'[ 8 ] );
 ${b}{≔}\left[\begin{array}{cccc}{1.}& {-1.}& {1.}& {-1.}\end{array}\right]$ (3)
 > Convolution( a, b, 'algorithm' = 'auto' );
 $\left[\begin{array}{cccccc}{1.}& {1.}& {2.}& {-2.}& {1.}& {-3.}\end{array}\right]$ (4)
 > c := Array( 1 .. numelems( a ) + numelems( b ) - 1, 'datatype' = 'float'[ 8 ] ):
 > Convolution( a, b, 'container' = c, 'algorithm' = 'direct' );
 $\left[\begin{array}{cccccc}{1.}& {1.}& {2.}& {-2.}& {1.}& {-3.}\end{array}\right]$ (5)
 > c;
 $\left[\begin{array}{cccccc}{1.}& {1.}& {2.}& {-2.}& {1.}& {-3.}\end{array}\right]$ (6)

Example 3

 > A := Vector[row]( [ 2 - I, 0, 5 + 3 * I, 0, 4 * I ] );
 ${A}{≔}\left[\begin{array}{ccccc}{2}{-}{I}& {0}& {5}{+}{3}{}{I}& {0}& {4}{}{I}\end{array}\right]$ (7)
 > B := Vector[row]( [ -7, 3 + 10 * I, 9 - 2 * I, 1 ] );
 ${B}{≔}\left[\begin{array}{cccc}{-7}& {3}{+}{10}{}{I}& {9}{-}{2}{}{I}& {1}\end{array}\right]$ (8)
 > C1 := Convolution( A, B, 'algorithm' = 'fft' );
 ${\mathrm{C1}}{≔}\left[\begin{array}{cccccccc}{-14.}{+}{7.}{}{I}& {16.0000000000000}{+}{17.}{}{I}& {-19.}{-}{34.}{}{I}& {-13.}{+}{58.}{}{I}& {51.}{-}{11.}{}{I}& {-35.}{+}{15.0000000000000}{}{I}& {8.}{+}{36.}{}{I}& {4.00000000000000}{}{I}\end{array}\right]$ (9)
 > C2 := round~( C1 );
 ${\mathrm{C2}}{≔}\left[\begin{array}{cccccccc}{-14.}{+}{7.}{}{I}& {16.}{+}{17.}{}{I}& {-19.}{-}{34.}{}{I}& {-13.}{+}{58.}{}{I}& {51.}{-}{11.}{}{I}& {-35.}{+}{15.}{}{I}& {8.}{+}{36.}{}{I}& {4.}{}{I}\end{array}\right]$ (10)

Compatibility

 • The SignalProcessing[Convolution] command was introduced in Maple 17.