A high-performance general-purpose compute library

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 array fftConvolve1 (const array &signal, const array &filter, const convMode mode=AF_CONV_DEFAULT)
C++ Interface for convolution on 1D signals using FFT. 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...

AFAPI af_err af_fft_convolve1 (af_array *out, const af_array signal, const af_array filter, const af_conv_mode mode)
C Interface for convolution on 1D signals using FFT. 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 size of the signal and the filter, 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 axis of Signal and Filter should not be the same.
Note
All non-overlapping(interleaved) convolutions default to frequency domain AF_CONV_FREQ irrespective of the provided convolution mode argument.

For one dimensional signals (lets say m is size of 0th axis), below batch operations are possible.

Signal Size Filter Size Output Size Batch Mode Description
$$[m \ 1 \ 1 \ 1]$$ $$[m \ 1 \ 1 \ 1]$$ $$[m \ 1 \ 1 \ 1]$$ No Batch Output will be a single convolved array
$$[m \ 1 \ 1 \ 1]$$ $$[m \ n \ 1 \ 1]$$ $$[m \ n \ 1 \ 1]$$ Filter is Batched n filters applied to same input
$$[m \ n \ 1 \ 1]$$ $$[m \ 1 \ 1 \ 1]$$ $$[m \ n \ 1 \ 1]$$ Signal is Batched 1 filter applied to n inputs
$$[m \ n \ p \ q]$$ $$[m \ n \ p \ q]$$ $$[m \ n \ p \ q]$$ Identical Batches n*p*q filters applied to n*p*q inputs in one-to-one correspondence
$$[m \ n \ 1 \ 1]$$ $$[m \ 1 \ p \ q]$$ $$[m \ n \ p \ q]$$ Non-overlapping batches p*q filters applied to n inputs to produce n x p x q results

There are various other permutations of signal and filter sizes that fall under the category of non-overlapping batch mode that are not listed in the above table. For any signal and filter size combination to fall under the non-overlapping batch mode, they should satisfy one of the following conditions.

• Signal and filter size along a given batch axis ( $$> 1$$) should be same.
• Either signal size or filter size along a given batch axis ( $$> 1$$) should be equal to one.
Note
For the above tabular illustrations, we assumed af_conv_mode is AF_CONV_DEFAULT.

## ◆ af_convolve1()

 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.

## ◆ af_fft_convolve1()

 AFAPI af_err af_fft_convolve1 ( af_array * out, const af_array signal, const af_array filter, const af_conv_mode mode )

C Interface for convolution on 1D signals using FFT.

Parameters
 [out] out is convolved array [in] signal is the input signal [in] filter is the signal that shall be used for the convolution operation [in] mode indicates if the convolution should be expanded or not(where output size equals input)
Returns
AF_SUCCESS if the convolution is successful, otherwise an appropriate error code is returned.

## ◆ convolve1()

 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.

// vector<dim4> numDims;
// vector<vector<float> > in;
array signal(numDims[0], &(in[0].front()));
// signal dims = [32 1 1 1]
array filter(numDims[1], &(in[1].front()));
// filter dims = [4 1 1 1]
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.
A multi dimensional data container.
Definition: array.h:37
@ AF_CONV_DEFAULT
Output of the convolution is the same size as input.
Definition: defines.h:305
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.
AFAPI array filter(const array &image, const array &kernel)
Image Filtering.
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.

## ◆ fftConvolve1()

 AFAPI array fftConvolve1 ( const array & signal, const array & filter, const convMode mode = AF_CONV_DEFAULT )

C++ Interface for convolution on 1D signals using FFT.

Parameters
 [in] signal is the input signal [in] filter is the signal that shall be used for the convolution operation [in] mode indicates if the convolution should be expanded or not(where output size equals input)
Returns
the convolved array