Convolution and polynomial multiplication of `fi`

objects

`c = conv(a,b)`

c = conv(a,b,'shape')

`c = conv(a,b)`

outputs the convolution of
input vectors `a`

and `b`

, at least
one of which must be a `fi`

object.

`c = conv(a,b,'shape')`

returns a subsection
of the convolution, as specified by the `shape`

parameter:

`full`

— Returns the full convolution. This option is the default shape.`same`

— Returns the central part of the convolution that is the same size as input vector`a`

.`valid`

— Returns only those parts of the convolution that the function computes without zero-padded edges. In this case, the length of output vector`c`

is`max(length(a)-max(0,length(b)-1), 0)`

.

The `fimath`

properties associated with the
inputs determine the `numerictype`

properties of
output `fi`

object `c`

:

If either

`a`

or`b`

has a local`fimath`

object,`conv`

uses that`fimath`

object to compute intermediate quantities and determine the`numerictype`

properties of`c`

.If neither

`a`

nor`b`

have an attached fimath,`conv`

uses the default fimath to compute intermediate quantities and determine the`numerictype`

properties of`c`

.

If either input is a built-in data type, `conv`

casts
it into a `fi`

object using best-precision rules
before the performing the convolution operation.

The output `fi`

object `c`

always
uses the default fimath.

Refer to the MATLAB^{®} `conv`

reference
page for more information on the convolution algorithm.

The following example illustrates the convolution of a 22-sample sequence with a 16-tap FIR filter.

`x`

is a 22-sample sequence of signed values with a word length of 16 bits and a fraction length of 15 bits.`h`

is the 16 tap FIR filter.

u = (pi/4)*[1 1 1 -1 -1 -1 1 -1 -1 1 -1]; x = fi(kron(u,[1 1])); h = firls(15, [0 .1 .2 .5]*2, [1 1 0 0]);

Because `x`

is a `fi`

object,
you do not need to cast `h`

into a `fi`

object
before performing the convolution operation. The `conv`

function
does so using best-precision scaling.

Finally, use the `conv`

function to convolve
the two vectors:

y = conv(x,h);

The operation results in a signed `fi`

object `y`

with
a word length of 36 bits and a fraction length of 31 bits. The default `fimath`

properties
associated with the inputs determine the `numerictype`

of
the output. The output does not have a local `fimath`

.

Was this topic helpful?