- Main Page
- Tutorials
- Functions
- Release Notes
- Examples

Functions
convolve1
Complete List of ArrayFire Functions ArrayFire Functions by Category » Signal Processing » | Convolutions

Convolution Integral for one dimensional data. More...

## Functions
AFAPI array | convolve1 (const array &signal, const array &filter, const convMode mode=AF_CONV_DEFAULT, const convDomain domain=AF_CONV_AUTO)
| C++ Interface for convolution on one dimensional signals. More...
AFAPI af_err | af_convolve1 (af_array *out, const af_array signal, const af_array filter, const af_conv_mode mode, af_conv_domain domain)
| C Interface for convolution on one dimensional signals. More...

## Detailed Description

Convolution Integral for one dimensional data.

A convolution is a common operation between a source array, a, and a filter (or kernel) array b. The answer to the convolution is the same as computing the coefficients in polynomial multiplication, if a and b are the coefficients.

Another way to think about it is that the filter kernel is centered on each pixel in a, and the output for that pixel or data point is the sum of the products.

Depending on the dimensions of the input signal and the filter signal, any one of the following batch mode convolutions take place.

- No Batch - Single filter applied to single input.
- Filter is Batched - Many filters applied on same input
- Signal is Batched - Single filter applied to a set of inputs.
- Identical Batches - A set of filters applied onto to a set of inputs in one-to-one correspondence.
- Non overlapping Batches - All batched filters are applied to all batched signals. The batch dimension of Signal and Filter should not be the same.

For example, if the input size is m along 0th dimension, then the possible batch operations are as follows.

Input Signal Dimensions | Filter Dimensions | Output Dimensions | Batch Mode | Explanation
--- | --- | --- | --- | ---
[m n 1 1] | [m n 1 1] | [m n 1 1] | No Batch | Output will be a single convolve array
[m n 1 1] | [m n p 1] | [m n p 1] | Filter is Batched | p filters applied to same input
[m n p 1] | [m n 1 1] | [m n p 1] | Signal is Batched | 1 filter applied to p inputs
[m n p 1] | [m n p 1] | [m n p 1] | Identical Batches | p filters applied to p inputs in one-to-one correspondence
[m n p 1] | [m n 1 q] | [m n p q] | Non-overlapping batches | q filters applied to p inputs in to produce p x q results
[m n 1 p] | [m n q 1] | [m n q p] | Non-overlapping batches | q filters applied to p inputs in to produce q x p results

## Function Documentation

AFAPI af_err af_convolve1 | ( | af_array * | out,
|  | const af_array | signal,
|  | const af_array | filter,
|  | const af_conv_mode | mode,
|  | af_conv_domain | domain
| ) |  |

C Interface for convolution on one dimensional signals.

Parameters

  [out] | out | is convolved array
  [in] | signal | is the input signal
  [in] | filter | is the signal that shall be flipped for the convolution operation
  [in] | mode | indicates if the convolution should be expanded or not(where output size equals input)
  [in] | domain | specifies if the convolution should be performed in frequency os spatial domain

Returns
  AF_SUCCESS if the convolution is successful, otherwise an appropriate error code is returned.

Note
  The default parameter of `domain`, AF_CONV_AUTO, heuristically switches between frequency and spatial domain.

Examples:
  convolve.cpp.

AFAPI array af::convolve1 | ( | const array & | signal,
|  | const array & | filter,
|  | const convMode | mode = `AF_CONV_DEFAULT`,
|  | const convDomain | domain = `AF_CONV_AUTO`
| ) |  |

C++ Interface for convolution on one dimensional signals.

//vector<dim4> numDims;
//vector<vector<float> > in;
af::array signal(numDims[0], &(in[0].front()));
//signal dims = [32 1 1 1]
af::array filter(numDims[1], &(in[1].front()));
//filter dims = [4 1 1 1]
af::array output = convolve1(signal, filter, AF_CONV_DEFAULT);
//output dims = [32 1 1 1] - same as input since expand(3rd argument is false)
//None of the dimensions > 1 has lenght > 1, so no batch mode is activated.

Parameters

  [in] | signal | is the input signal
  [in] | filter | is the signal that shall be flipped for the convolution operation
  [in] | mode | indicates if the convolution should be expanded or not(where output size equals input)
  [in] | domain | specifies if the convolution should be performed in frequency os spatial domain

Returns
  the convolved array

Note
  The default parameter of `domain`, AF_CONV_AUTO, heuristically switches between frequency and spatial domain.

Examples:
  convolve.cpp.