# convn

N-D convolution

## Syntax

``C = convn(A,B)``
``C = convn(A,B,shape)``

## Description

example

````C = convn(A,B)` returns the N-dimensional convolution of arrays `A` and `B`.```

example

````C = convn(A,B,shape)` returns a subsection of the convolution according to `shape`. For example, `C = convn(A,B,'same')` returns the central part of the convolution, which is the same size as `A`.```

## Examples

collapse all

You can control the size of the output of the `convn` function. For example, the `'same'` option trims the outer part of the convolution and returns only the central part, which is the same size as the input.

Convolve a random 2-by-3-by-2 array `A` with a 2-by-2-by-2 kernel `B`. The result is a 3-by-4-by-3 array, which is `size(A) + size(B) - 1`.

```A = rand(2,3,2); B = 0.25*ones(2,2,2); C = convn(A,B)```
```C = C(:,:,1) = 0.2037 0.2354 0.1898 0.1581 0.4301 0.6902 0.4426 0.1825 0.2264 0.4548 0.2527 0.0244 C(:,:,2) = 0.2733 0.5444 0.4686 0.1975 0.6365 1.3772 1.2052 0.4645 0.3632 0.8327 0.7366 0.2670 C(:,:,3) = 0.0696 0.3090 0.2788 0.0394 0.2063 0.6869 0.7627 0.2821 0.1367 0.3779 0.4839 0.2426 ```
`sizeC = size(A) + size(B) - 1`
```sizeC = 1×3 3 4 3 ```

Return the central part of the convolution, which is the same size as `A`.

`C = convn(A,B,'same')`
```C = C(:,:,1) = 1.3772 1.2052 0.4645 0.8327 0.7366 0.2670 C(:,:,2) = 0.6869 0.7627 0.2821 0.3779 0.4839 0.2426 ```

## Input Arguments

collapse all

Input array, specified as vector, a matrix, or a multidimensional array.

Data Types: `double` | `single` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical`
Complex Number Support: Yes

Second input array, specified as a vector, a matrix, or a multidimensional array to convolve with `A`. The array `B` does not have to be the same size as `A`.

Data Types: `double` | `single` | `int8` | `int16` | `int32` | `int64` | `uint8` | `uint16` | `uint32` | `uint64` | `logical`
Complex Number Support: Yes

Subsection of the convolution, specified as one of these values:

• `'full'` — Return the full N-D convolution.

• `'same'` — Return the central part of the convolution, which is the same size as `A`.

• `'valid'` — Return only parts of the convolution that are computed without zero-padded edges.

## Output Arguments

collapse all

N-D convolution, returned as a vector, a matrix, or a multidimensional array. If `A` and `B` have the same number of dimensions, the full convolution `C = convn(A,B)` has size `size(A)+size(B)-1`.

When one or both of `A` and `B` are of type `single`, then the output is of type `single`. Otherwise, `convn` converts inputs to type `double` and returns type `double`.

Data Types: `double` | `single`

collapse all

### N-D Convolution

For discrete, N-dimensional variables A and B, the following equation defines the convolution of A and B:

`$C\left({j}_{1},{j}_{2},...,{j}_{N}\right)=\sum _{{k}_{1}}\sum _{{k}_{2}}...\sum _{{k}_{N}}A\left({k}_{1},{k}_{2},...,{k}_{N}\right)B\left({j}_{1}-{k}_{1}+1,{j}_{2}-{k}_{2}+1,...,{j}_{N}-{k}_{N}+1\right)$`

Each ki runs over all values that lead to legal subscripts of A and B.